Diferente pentru introducere-in-asamblare intre reviziile #9 si #10

Nu exista diferente intre titluri.

Diferente intre continut:

Parantezele drepte se refera la zona de memorie adresata de registru.
Exemplu :
"[esi]" * se refera la valoarea aflata la adresa de memorie cu offset-ul esi, iar "esi" * se refera la valoarea stocata in registrul esi;
"{$[esi]$}" se refera la valoarea aflata la adresa de memorie cu offset-ul esi, iar "{$esi$}" se refera la valoarea stocata in registrul esi;
daca esi = 100 atunci [esi] * va reprezenta valoarea care se afla la adresa cu offset-ul 100, iar esi va reprezenta valoarea 100.
daca $esi = 100$ atunci [{$esi$}] va reprezenta valoarea care se afla la adresa cu offset-ul {$100$}, iar esi va reprezenta valoarea {$100$}.
Va sfatuiesc sa NU incercati sa modificati urmatorii registri : cs (care contine segmentul la care se afla incarcat codul executabilului, ss * contine segmentul de memorie in care se afla stiva sistemului).
Va sfatuiesc sa NU incercati sa modificati urmatorii registri : $cs$ (care contine segmentul la care se afla incarcat codul executabilului, $ss$ contine segmentul de memorie in care se afla stiva sistemului).
h4. Registrii speciali
Sunt folositi foarte rar in scrierea efectiva a programelor, deci nu veti accesa prea des acesti registri.De exemplu, $ip$ (instruction pointer) care retine adresa (de fapt offset-ul) la care se afla instructiunea care urmeaza sa fie executata.
Registrii speciali
h4. Flagurile microprocesorului
Sunt folositi foarte rar in scrierea efectiva a programelor, deci nu veti accesa prea des acesti registri.De exemplu, ip (instruction pointer) care retine adresa (de fapt offset-ul) la care se afla instructiunea care urmeaza sa fie executata.
 
 
 
Flagurile microprocesorului
 
Flag-urile microprocesorului sunt asemanatoare unor variabile boolene. Cu ajutorul lor putem afla rezultatul unei comparatii sau daca o operatie a produs "overflow", etc. Aceste flag-uri nu pot fi accesate direct ca si registrii, ci testarea daca un flag este activat se face prin intermediul "jump"-urilor conditionate.(vezi instructiunea cmp).
Flag-urile microprocesorului sunt asemanatoare unor variabile boolene. Cu ajutorul lor putem afla rezultatul unei comparatii sau daca o operatie a produs "overflow", etc. Aceste flag-uri nu pot fi accesate direct ca si registrii, ci testarea daca un flag este activat se face prin intermediul "jump"-urilor conditionate.(vezi instructiunea {$cmp$}).
Exemplu :
Fie {$ax = 1$}. Decrementarea lui $ax$ cu $1$ va duce la activarea flagului numit Zero-Flag.(rezultatul operatiei a fost {$0$}).
Fie {$ax = 65535$} ({$0xFFFF$}). Incrementarea lui $ax$ cu $2$ va duce la setarea flagului numit Overflow-Flag (rezultatul operatiei nu "incape" in $16$ biti);
Fie ax = 1. Decrementarea lui ax cu 1 va duce la activarea flagului numit Zero-Flag.(rezultatul operatiei a fost 0).
 
Fie ax = 65535 (0xFFFF). Incrementarea lui ax cu 2 va duce la setarea flagului numit Overflow-Flag (rezultatul operatiei nu "incape" in 16 biti);
 
 
 
 
 
Instructiunile de baza ale microprocesorului 8086 :
h3. Instructiunile de baza ale microprocesorului 8086 :
Sunt folosite urmatoarele prescurtari :
* reg8/ reg16/ reg32 * se refera la registri pe 8/16/32 biti;
* imm8/ imm16/ imm32 * se refera la valori imediate (constante);
* mem8/ mem16/ mem32 * zona memorie de memorie sau variabile pe 8/16/32 biti;
* {$reg8$}/ {$reg16$}/ {$reg32$} - se refera la registri pe {$8$}/{$16$}/{$32$} biti;
* {$imm8$}/ {$imm16$}/ {$imm32$} - se refera la valori imediate (constante);
* {$mem8$}/ {$mem16$}/ {$mem32$} - zona memorie de memorie sau variabile pe {$8$}/{$16$}/{$32$} biti;
Scriere/Citire memorie si registri
h4. Instructiunea MOV
Instructiunea MOV
 
Sintaxa
h5. Sintaxa
mov dest, source // echivalenta cu dest = source
Variante
h5. Variante
mov reg8/16/32, mem8/16/32
mov reg8/16/32, reg8/16/32
mov reg8/16/32, imm8/16/32
mov mem8/16/32, imm8/16/32
Descriere
h5. Descriere
Instructiunea copiaza o valoare dintr-o locatie in alta locatie. Aceasta locatie poate fi zona de memorie, variabila, registru. De retinut este ca nu exista variante ale instructiunii care copiaza direct dintr-o zona de memorie in alta.
Flaguri afectate
h5. Flaguri afectate
Instructiunea mov nu modifica nici un flag.
Restrictii
h5. Restrictii
Ambii operanzi trebuie sa aiba aceeasi marime. De exemplu pentru ultima varianta a instructiunii mov trebuie specificata marimea zonei de memorie. Instructiunea "mov [bx], 0" nu este corecta deoarece compilatorul nu stie ce vrea sa faca instructiunea: sa copieze valoarea 0 in byte-ul, in word-ul sau in doubleword-ul de la adresa bx. Astfel variantele corecte sunt:
mov byte ptr [bx], 0
 
mov word ptr [bx], 0
* mov byte ptr [bx], 0
* mov word ptr [bx], 0
* mov dword ptr [bx], 0
mov dword ptr [bx], 0
h5. Exemplu
Exemplu
 
mov ax, 3 // ax = 3
== code(cpp)|mov ax, 3 // ax = 3
mov bx, ax // bx = ax
 
 
==
Instructiuni aritmetice

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.