Programare în Limbaj de Asamblare

Previzualizare curs:

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

Observații:

cursuri de programare in limbaj de asamblare pe procesor INTEL 8086

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • 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
Alte informații:
Tipuri fișiere:
doc
Nota:
7.7/10 (3 voturi)
Nr fișiere:
14 fisiere
Pagini (total):
138 pagini
Imagini extrase:
139 imagini
Nr cuvinte:
36 728 cuvinte
Nr caractere:
203 209 caractere
Marime:
405.35KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Curs
Domeniu:
Limbaje de Programare
Predat:
la facultate
Materie:
Limbaje de Programare
Profesorului:
prof. Ioan Jianu
Sus!