Instrucțiuni de asamblare

Mai multe despre comenzile de asamblare.

Bits, schimbare logică, aritmetică și ciclică.
Notă: Cele mai multe dintre exemplele de mai jos utilizează numere pe 8 biți, acest lucru este făcut pentru a vă face mai ușor să înțelegeți cum funcționează acest lucru.







Funcțiile de schimbare (trecerea operatorului logic stânga / dreapta)

SHL operand, număr de schimburi
SHR operand, număr de schimburi
SHL și SHR trec biții operand (registru / memorie) la stânga sau la dreapta, respectiv, cu un bit.

Acțiunea de mai sus este repetată de mai multe ori egală cu valoarea celui de-al doilea operand.

; al = 01011011 (binar)
shr al, 3

; bl = 11100101 (binar)
shl bl, 2

După executarea comenzii, registrul bl va fi egal cu 10010100 (binar). Ultimii doi biți au fost umpluți cu zerouri, pavilionul de transportare a fost setat, pentru că ultimul bit lăsat în stânga a fost 1

Aici există două alte opcode: (trecerea operandului aritmetic stânga / dreapta)

Operand SAL, numar de schimburi
Operand SAR, numar de schimburi

Comanda SAL este aceeași cu SHL, dar SAR nu este exact ca SHR. Instrucțiunea SAR, ca SHR, schimbă toți biții operandului spre dreapta cu un bit, în timp ce bitul schimbat în dreapta devine valoarea semnului de transfer cf. Notă: în același timp, un bit non-zero, ca în SHR, este inserat în operand în același timp și valoarea celui mai semnificativ bit al operandului. exemplu:

al = 10100110
sar al, 3
al = 11110100
sar al, 2
al = 11111101

bl = 00100110
sar bl, 3
bl = 00000010

rol operand, număr de schimburi; rotiți operandul stâng
ror operand, numar de schimburi; rotiți operandul spre dreapta
operatorul rcl, numărul de schimburi; schimbarea ciclică a operandului spre stânga prin stegulețul de transportare
rcr operand, numar de schimburi; schimbarea circulară a operandului spre dreapta prin steagul de transportare







Schimbarea ciclică amintește de offset, biții fiind împinși, sunt împinși din nou pe cealaltă parte:

Exemplu: comanda ror (schimbarea ciclică dreapta)


Așa cum se poate vedea din figura de mai sus, biții se rotesc, adică fiecare bit care este împins este din nou introdus din cealaltă parte. Flagul de transfer cf conține valoarea ultimului bit extins.
RCL și RCR trecerea tuturor biți la operandul din stânga (pentru RCL) sau dreapta (pentru RCR) de un bit, în timp ce mai în vârstă (pentru RCL) sau minor (pentru RCR) devine un pavilion valoare de transfer de biți cf; transferul simultan vechea valoare a cf pavilion împins în operandul pe dreapta (pentru RCL) sau la stânga (pentru RCR) și devine o valoare Jr. (pentru RCL) sau mai mari (pentru RCR) biți operand. Acțiunile specificate se repetă de câte ori sunt egale cu valoarea celui de-al doilea operand.
Lei și ROR deplasarea tuturor bitii operandului la stânga (pentru lei) sau la dreapta (pentru ROR), de un bit, în timp ce mai mari (pentru lei) sau minor (pentru ROR) bit Operandul împinse în operandul pe dreapta (pentru lei) sau din stânga (pentru ROR ) și devine o valoare Jr. (pentru lei) sau mai mari (pentru ROR bit operand); simultan bitul extins devine valoarea pavilionului de transfer cf. Acțiunile specificate se repetă de câte ori sunt egale cu valoarea celui de-al doilea operand.

Operațiuni de stivuire.
Uneori, când sunați la anumite subrutine, trebuie să salvați toate registrele pentru o funcționare corectă a programului în viitor. Pentru aceasta, veți păstra în mod constant fiecare registru în stivă și extrageți exact același lucru:

Apăsați eax
Apăsați ebx
Apăsați ecx
[de asemenea toate celelalte registre]
......
[scoateți restul registrelor]
Pop ecx
Pop ebx
Pop eax

Această abordare este foarte greoaie în acest scop și este creată comanda pushad. Stochează toate registrele extinse de pe stivă. În consecință, comanda popad este necesară pentru a extrage toate registrele din stiva.

Există, de asemenea, o comandă pentru a salva mai tineri registre pushaw și popaw. Ele sunt echivalente cu comenzile PUSH AX, CX, DX, BX, SP, BP, SI, DI și POP DI, SI, BP, BX, DX, CX, AX.
Uneori trebuie să stocați valorile steagurilor după efectuarea unei anumite operații. Acest lucru necesită comenzile pushf și popf. Aceste comenzi stochează valoarea registrului de steaguri pe stivă sau o restaurează de acolo.
Modificarea steagurilor procesorului.
Instalarea CLC CF = 0
Setarea CLD DF = 0
Setarea CLI IF = 0
Încărcarea LAHF a registrului AH din registrul de steaguri: setează biții 7, 6, 4, 2 și 0 prin stegulețele SF ZF AF PF CF.
Înregistrarea înregistrării SAHF AH în registrul de steaguri: setează steagurile SF ZF AF PF CF pe biții 7, 6, 4, 2 și 0 ai registrului AH.
Instalarea STC CF = 1
Instalarea STD DF = 1
Setarea STI IF = 1

În această lecție am aflat mai multe despre comenzile de asamblare. În următoarea lecție vă voi spune despre operațiile cu blocuri de date. Nu vă relaxați, citiți următoarea lecție.







Articole similare

Trimiteți-le prietenilor: