ASM Terimleri - Sıkça karşılaşılan ASM kalıpları

Tengri

Moderatör
  • Register boyutları;
  • AL,AH,BL,BH = 8 bitAX,BX,CX vb. = 16 bitEAX,EBX,ECX,EDX,ESI,EDI.. = 32 bitRAX,RBX,RCX .. = 64 bit

Kod:
; KALIP 1 - ATAMA İŞLEMLERİ
; ASSEMBLY KODU          ; C++ karşılığı
mov eax, ebx            ; eax = ebx;  // register'den registere aktarım
mov ecx, 3              ; ecx = 3;    // register'a doğrudan değer atama
mov eax, 'j'            ; eax = 'j'   // 000000a6h = 0,0,0,'j'
mov edx, offset c3      ; edx = &c3;  // edx, c3'e işaret eder. bir nevi char*edx = &c3;
mov ebx, [d];           ; ebx = (*d);    // EBX'e d tarafından işaret edilen değeri aktar.
mov [edx], al           ; *edx = al; 
; offsetleme
mov ah, [edx]           ; ah = *edx;  // eax = 0,0,"jj"
mov ah, [edx+1]         ; ah = edx[1] // eax = 0,0,"ej"
mov al, [ecx+edx]       ; al = *(ecx+edx);  // eax = 0,0,"el"
mov al, [edx+ecx*8]     ; al = *(edx+ecx*8); katsayı 1, veya 2'nin katları olmalı (*1, *2, *4, *8)
mov al, [edx+ecx*4+1]   ; al = *(edx+ecx*4+1)herhangi iki register, birisi katsayılı olabilir + sabit sayı
mov [edx+ecx*4+1], al   ; *(edx+ecx*4+1) = al; offset olarak hedef

Kod:
; KALIP 2 - Aritmetik operasyonlar
;ASSEMBLY                ; C++
add eax, ebx            ; eax += ebx;  // 32, 16 veya 8 bit toplama (register boyutuna göre değişir)
add ax, [w]             ; ax += (*w);     // toplama, ax değerine w değeri tarafından işaret edilen sayı eklenir
add [c1], al            ; (*c1) += al;    // toplama, pointer tarafından işaret edilen değere eklenir
sub eax, [d]            ; eax -= (*d);    // çıkartma, d değerinin işaret ettiği sayı eax'tan çıkartılır
inc eax                 ; ++eax;          // eax'ın değeri 1 arttırılır
inc byte ptr [edx]      ; ++*(char*)edx;   // değişkenin boyutu özellikle belirtilmiş, pointerin işaret ettiği 8 bit değeri arttır.
inc word ptr [edx]      ; ++*(short*)edx;
inc dword ptr [edx]     ; ++*(long*)edx;
mov     BYTE PTR [ESI], 5  ; ESI'nin işaret ettiği değere byte olarak 5 değerini yaz.
mov     WORD PTR [ESI], 5  ; ESI'nin işaret ettiği değere unsigned short olarak 5 değerini yaz.
mov     DWORD PTR [ESI], 5 ; ESI'nin işaret ettiği değere unsigned int olarak 5 değerini yaz.
dec eax                 ; --eax;
neg eax                 ; eax = -eax; // işaret değişimi
not eax                 ; eax = ~eax; // eax'ın tüm bitleri tersine çevrilir
and eax, ebx            ; eax &= ebx; // bitwise and
or  eax, ebx            ; eax |= ebx; // bitwise or
xor eax, ebx            ; eax ^= ebx; // bitwise xor
sal eax, cl             ; eax sar eax, cl             ; (long) eax >>= cl; // sağa doğru kaydır(işaretli), eax'ın bitleri cl kadar sağa kaydırılır. taşan bitler kaybolur. işaret biti korunur.
shr eax, cl             ; (unsigned long) eax >>= cl; // sağa doğru kaydır (işaretsiz),eax'ın bitleri cl kadar sağa kaydırılır. taşan bitler kaybolur. işaret korunmaz.
imul bl                 ; ax = al * bl;         // 8 bit işaretli çarpma işlemi
imul bx                 ; dx:ax = ax * bx;      // 16 bit işaretli çarpma işlemi
imul ebx                ; edx:eax = eax * ebx;  // 32 bit işaretli çarpma işlemi
mul ebx                 ; edx:eax = eax * ebx;  // 32 bit işaretsiz çarpma işlemi
idiv ebx                ; edx = eax % ebx; eax /= ebx;  // 8,16,32 bit işaretli bölme işlemi
div ebx                 ; edx = eax % ebx; eax /= ebx;  // ...işaretsiz bölme işlemi

Kod:
; KALIP 3 - CAST (dönüştürme)

cbw                     ; ax = (short) al;   // al, ax, sadece EAX için kullanılabilir
cwd                     ; eax = (long) ax;   // ax'teki değeri long olarak eax'a aktar
cdq                     ; edx = -(eax movsx bx, al;           ; bx = (short) al;   // AL'deki değeri işaretli short olarak BX'e aktarır
movzx bx, al;           ; bx = (unsigned short) al; // AL'deki değeri işaretsiz short olarak BX'e aktarır
movsx ebx, ax;          ; ebx = (long) ax;          // AX'teki değeri işaretli int olarak ebx'e aktarır
movzx ebx, ax;          ; ebx = (unsigned long) ax; // AX'teki değeri işaretsiz int olarak ebx'e aktarır

Kod:
; KALIP 4 - Dallandırma ve döngü (if, for, while..)
; Compare (operands as in MOV)
cmp eax, ebx            ; CF, OF, SF, ZF bitlerini karşılaştırır
ja l1                   ; if (eax > ebx) goto l1;  // işaretsiz karşılaştırma
jb l1                   ;         jae l1                  ;         >=
jbe l1                  ;         je l1                   ;         ==
jne l1                  ;         !=
jg l1                   ; if (eax > ebx) goto l1;  // işaretli karşılaştırma
jl l1                   ;         jge l1                  ;         >=
jle l1                  ;         jmp l1                  ; goto l1;
l1:                     ; l1:  // etiket
 
T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ Yaptıkları paylaşımlardan kendileri sorumludur!
Geri
Üst Alt