MOV
“Mov” komutu 2 register veya 1 bellek bölgesi ile 1 register arasında byte,word veya dword uzunluğundaki verinin aktarımını sağlar. Önemli olan 2 değişkeninde aynı büyüklükte olmasıdır.
mov alıcı,gönderici
mov eax,edx ;eax=edx
mov ax,cx ;ax=cx
mov dword ptr ds:[esi],eax ;esi tarafından adreslenmiş bellek bölgesine eax’in değerini koy. burada esi belleğin offsetidir. (c’deki pointer gibi)
mov eax,dword ptr ds:[ecx]
mov ecx,123456 ;ecx=12346
mov edx,cx ;Yanlış edx=dword,cx=word
mov si,dword ptr ds:[ebx] ;Yanlış si=word
mov al,byte ptr ds:[ecx] ;Doğru
mov word ptr[edx],word ptr [ecx] ;Yanlış, 2’side bellek bölgesi olamaz.
mov ds,123 ;Yanlış segment registerleri direkt parametre alamazlar. aşağıdaki gibi olmalıdır.
mov ax,123
mov ds,ax
XCHG
“Xchg” komutu 2 register ve bir bellek bölgesini karşılıklı değiştirilmesi için kullanılır.Mov için geçerli olan tüm kurallar bu komut içinde geçerldir.
xchg param1,param2
mov eax,1234 ;eax=12345
mov edx,6789 ;edx=6789
xchg eax,edx ;artık eax=6789 edx=12345
LEA
“Lea” komut verilen bir bellek bölgesinin offsetini hesaplar.Eğer programınını yüzen kod parcaları içermiyorsa kullanmanız gerekmez.Masm32 “offset” macrosu ile kullandığınız değişkenlerin offsetini sabit bir değer olarak elde etmenizi sağlar.
lea alıcı,değişken
lea eax,dword ptr cs:[12345] ;gibi
ADD
“Add” komutu 2 paramterisini toplayıp sonucu ilk parametereye aktarır.(Parametreler mov komutunkilerle aynı özelliktedirler.
add alıcı,gönderici
add eax,1234 ;eax=eax+1234
add ecx,edx ;eax=eax+edx
add eax,dword ptr es:[esi] ;eax=eax+esi ile adrelenen değer.
add dword ptr ds:[2324],edi
SUB
“Sub” komutu add ile aynı özellikleri taşır.Sadece bu komut toplamak yerine çıkartır.
sub alıcı,gönderici
sub eax,1234 ;eax=eax-1234 eğer eax<1234 ise FFFFFFFF-1234
sub edx,edx ;edx=0
MUL
“Mul” komutu eax*parametre işlemini yapar.Sonucun düşük kısmı eax,’e yüksek kısmı ile edx’e aktarılır. Parametre mov komutunda belirtildiği gibidir.
mul çarpan
mov eax,1234 ;eax=1234
sub edx,edx ;edx=0
mov ecx,4 ;ecx=4
mul ecx ;eax=1234*4
DIV
“Div” komutu eax/parametre işlemini yapar eax=bölüm edx=kalan.
div bölen
INC
“Inc” komutu parmetre olarak aldığı değeri 1 artırır.
inc parametre
inc eax
inc dword ptr ds:[edi]
inc word ptr ss:[3443]
DEC
“Dec” ile aynı özelliklere sahiptir.Fakan bu komut 1 artırmak yerine 1 azaltır.
dec parametre
CMP
“Cmp” 2 parametreyi kıyaslar ve eflags registerini duruma göre değiştirir.Bu komut az sonra gelceğimiz “Jump” komut kombinasyonları ile kullanılır.
cmp p1,p2
cmp eax,edx ;eğer eax=edx ise ZF=1
;eax!=edx ise ZF=0
;eax<edx ise CF=1
Jxx Komut seti
“Jxx”(Jump) komutları istenen koşul oluştuğunda verilen parametreyi eip’e aktarırlar.Bir başka değişle programın parametrede verilen noktadan devam etmesini sağlarlar.
Jxx parametre
Jmp: Koşulsuz sıçrama
Je: Eğer zf=1 ise yani cmp’in parametreleri eşit ise
Jb,Jc: Eğer cf=1 ise yani cmp’de p1<p2 ise
Ja: Eğer cmp’de p1>p2 ise (cf=0 ve zf=0)
Jbe:p1<=p2 ise (cf=1 veya zf=1)
Jnb: p1=>p2 ise (cf=0)
Jnz,Jne: p1<>p2 ise (zf=0)
Jmp eax ;gibi
Jnb dword ptr[edi] ;gibi