Extras din curs
2. INSTRUCTIUNI ARITMETICE SI LOGICE
2.1. Instructiuni de mutare
Instructiunile de mutare realizeaza transferul datelor intre registre, intre registre si memorie, intre registre si stiva. Transferurile se pot executa intre registre de aceeasi lungime, iar la transferul intre registre si memorie lungimea este data de registrul folosit.
Instructiunile de mutare nu modifica indicatorii de conditie.
Toate mutarile se pot face pe 1,2,4 sau 8 octeti. Mutarile sunt de forma:
MOV destinatie, sursa - unde ca argumente putem avea combinatiile:
reg,reg - transfer intre registre pe 1, 2, 4 octeti
reg,const - încarcare imediata constanta intr-un registru
mem, const - încarcare imediata constanta intr-o adresa de memorie
reg,mem - încarcare continut adresa de memorie într-un registru
mem,reg - memorare continut registru într-o locatie de memorie
mem,mem - !! este o combinatie interzisa fiindca nu pot fi doua adrese în instructiune
Prin mem vom întelege o locatie de memorie specificata prin orice mod de adresare (directa, indirecta, indexata). La indexare se pot folosi numai registrele SI si DI, iar la adresarea cu baza se pot folosi numai BX si BP. La toate adresarile se foloseste un registru de segment implicit sau explicit. Registrele segment implicite sunt:
CS - pentru instructiunile de salt în program
DS - pentru toate datele utilizate
SS - pentru adresarea stivei prin SP (Stack Pointer) sau când baza este BP.
Exemple:
MOV CL,DH - reg-reg pe 1 octet unde orice combinatie este posibila
MOV SI,DX - reg-reg pe 2 octeti aproape orice combinatie este posibila
MOV EDX,EBX - reg-reg pe 4 octeti
MOV BP,3420 - încarcare imediata constanta intr-un registru pe 2 octeti
MOV ECX,3420 - încarcare imediata constanta intr-un registru pe 4 octeti
MOV b/[4200],54 - încarcare imediata const. intr-o adresa de mem. pe 1 octet
MOV w/[4200],54 - încarcare imediata const. intr-o adresa de mem. pe 2 octeti
In memorie constanta 0054 se va memora pe cei 2 octeti inversati 5400.
Inversarea se produce la orice memorare de registru si la orice citire din memorie.
MOV BX,[3450] - încarcare continut adresa de memorie intr-un reg. pe 2 oct.
MOV EBX[3450] - încarcare continut adresa de memorie intr-un reg pe 4 oct.
MOV [2400],DS - memorare continut registru într-o locatie de memorie
MOV X,DX - memorare continut reg. într-o locatie de memorie in ASM
MOV [BX],DX - memorare continut reg. într-o locatie de memorie indirect
MOV DX,X[SI] - încarcare reg. din memorie cu adresa indexata din tabel X
MOV CX,[BX+SI+5]- încarcare reg. din memorie cu adresa indirecta si indexata
Când nu se poate da implicit prin registru lungimea în AFD se precizeaza explicit prin:
b/ - byte (1 octet) si w/ - word(2octeti).
În limbajul de asamblare (ASM sauTASM) lungimea explicita a operanzilor se da prin:
MOV byte ptr[BP+5],25 - încarcare imediata in memorie pe 1 octet
MOV word ptr[BP+5],25 - încarcare imediata in memorie pe 2 octeti (word)
MOV dword ptr[BP+5],25 - încarcare imediata in memorie pe 4 octet (double word)
MOV qword ptr[BP+5],25 - încarcare imediata in memorie pe 8 octet (quadword)
MOV tbyte ptr[BP+5],25 - încarcare imediata in memorie 10 octeti(ten byte la VF)
XCHG operand1,operand2 (XChange)
- Instructiune de interschimbare operand1 cu operand2
Pentru operand1 si operand 2 se pastreaza toate posibilitatile de la instructiunea MOV.
Ex: MOV AX,DX - se schimba continutul registrelor AX cu DX
MOV BX,X - se schimba continutul registrelor AX cu variabila X
Instructiunea NOP este echivalenta cu XCHG AX,AX
Adresarea stivei (PUSH si POP)
Stiva este o zona de memorie adresata prin registrul SP care indica elementul din vârful stivei (top). In stiva se ia din vârful stivei si apoi se incrementeaza SP.
Când se pune în stiva întâi se decrementeaza SP si dupa aceea se memoreaza valoarea.
PUSH reg16 - pune în stiva un registru pe 16 biti (PUSH BX)
POP reg16 - încarca din stiva un registru pe 16 biti (POP BX)
PUSH reg32 - pune în stiva un registru pe 32 biti (PUSH EBX)
POP reg32 - încarca din stiva un registru pe 32 biti (POP EBX)
PUSH mem - pune în stiva continutul unei locatii de memorie pe 16 biti
Este foarte utila la transmiterea parametrilor spre subprograme (PUSH X).
PUSH constanta - pune în stiva o constanta pe 16 biti
PUSHA - pune în stiva toate registrele pe 16 biti (AX;BX;CX,...)
POPA - încarca toate registrele pe 16 biti din stiva (starea programului)
PUSHAD - pune în stiva toate registrele pe 32 biti (EAX;EBX;ECX,...)
POPAD - încarca toate registrele pe 32 biti din stiva
PUSHF - pune în stiva registrul FLAGS (indicatorii de conditie)
POPF - încarca di stiva registrul FLAGS
PUSHFD - pune în stiva registrul EFLAGS
POPFD - încarca di stiva registrul FLAGS
Preview document
Conținut arhivă zip
- Programare in Limbaj de Asamblare
- Curs10_fis.doc
- Curs11_ LOG.doc
- Curs1_I86.doc
- Curs2_Instr.doc
- Curs3_inm.doc
- Curs4_Jmp.doc
- Curs5_sir.doc
- Curs6_param.doc
- Curs7_pmem.doc
- Curs8_rentr.doc
- Curs9_mac.doc
- fisiere.doc
- LAB_8087.DOC
- LAB_80871.doc