Laborator 2 - Suport teoretic

Instrucțiuni aritmetice

Sintaxă:

add <regd>,<regs>; <regd> ← <regd> + <regs>
add <reg>,<mem>; <reg> ← <reg> + <mem>
add <mem>,<reg>; <mem> ← <mem> + <reg>
add <reg>,<con>; <reg> ← <reg> + <con>
add <mem>,<con>; <mem> ← <mem> + <con>

Semantică și restricții:

  • Cei doi operanzi ai adunării trebuie să aibă același tip (ambii octeți, ambii cuvinte, ambii dublucuvinte);
  • În timp ce ambii operanzi pot fi regiștri, cel mult un operand poate fi o locație de memorie.

Exemplu:

add EDX,EBX; EDX ← EDX + EBX
add AX,[var]; AX ← AX + [var]
add [var],AX; [var] ← [var] + AX
add EAX,123456h; EAX ← EAX + 123456h
add BYTE [var],10; BYTE [var] ← BYTE [var] + 10

Declararea variabilelor / constantelor

a DB 0A2h ;se declara variabila a de tip BYTE si se initializeaza cu valoarea 0A2h
b DW 'ab' ;se declara variabila a de tip WORD si se initializeaza cu valoarea 'ab'
c DD 12345678h ;se declara variabila a de tip DOUBLE WORD si se initializeaza cu valoarea 12345678h
d DQ 1122334455667788h ;se declara variabila a de tip QUAD WORD si se initializeaza cu valoarea 1122334455667788h

Legendă

<op8>    - operand pe 8 biți
<op16>   - operand pe 16 biți
<op32>   - operand pe 32 biți

<reg8>   - registru pe 8 biți
<reg16>  - registru pe 16 biți
<reg32>  - registru pe 32 biți
<reg>    - registru
<regd>   - registru destinație
<regs>   - registru sursă

<mem8>   - variabilă de memorie pe 8 biți
<mem16>  - variabilă de memorie pe 16 biți
<mem32>  - variabilă de memorie pe 32 biți
<mem>    - variabilă de memorie

<con8>   - constantă (valoare imediată) pe 8 biți
<con16>  - constantă (valoare imediată) pe 16 biți
<con32>  - constantă (valoare imediată) pe 32 biți
<con>    - constantă (valoare imediată)