Diferente pentru introducere-in-asamblare intre reviziile #14 si #15

Nu exista diferente intre titluri.

Diferente intre continut:

h5. Sintaxa
mov dest, source // echivalenta cu dest = source
* $mov dest, source$ // echivalenta cu dest = source
h5. Variante
mov reg8/16/32, mem8/16/32
mov reg8/16/32, reg8/16/32
mov mem8/16/32, reg8/16/32
mov reg8/16/32, imm8/16/32
mov mem8/16/32, imm8/16/32
* $mov reg8/16/32, mem8/16/32$
* $mov reg8/16/32, reg8/16/32$
* $mov mem8/16/32, reg8/16/32$
* $mov reg8/16/32, imm8/16/32$
* $mov mem8/16/32, imm8/16/32$
h5. Descriere
h5. Sintaxa
* add dest, source // echivalenta cu dest+=source
* sub dest, source // echivalenta cu dest-=source
* inc dest // echivalenta cu dest++
* dec dest // echivalenta cu dest--
* $add dest, source$ // echivalenta cu dest+=source
* $sub dest, source$ // echivalenta cu dest-=source
* $inc dest$ // echivalenta cu dest++
* $dec dest$ // echivalenta cu dest--
h5. Variante
* add(sub) reg8/16/32, mem8/16/32
* add(sub) reg8/16/32, reg8/16/32
* add(sub) mem8/16/32, reg8/16/32
* add(sub) reg8/16/32, imm8/16/32
* add(sub) mem8/16/32, imm8/16/32
* $add(sub) reg8/16/32, mem8/16/32$
* $add(sub) reg8/16/32, reg8/16/32$
* $add(sub) mem8/16/32, reg8/16/32$
* $add(sub) reg8/16/32, imm8/16/32$
* $add(sub) mem8/16/32, imm8/16/32$
h5. Descriere
h5. Flaguri afectate
* carry flag - pentru "signed overflow"
* overflow flag - pentru overflow
* sign flag - activat daca rezultatul este negativ
* zero flag - activat daca rezultatul operatiei a fost 0
* parity flag - este setat in functie de paritatea rezultatului
* $carry flag$ - pentru "signed overflow"
* $overflow flag$ - pentru overflow
* $sign flag$ - activat daca rezultatul este negativ
* $zero flag$ - activat daca rezultatul operatiei a fost 0
* $parity flag$ - este setat in functie de paritatea rezultatului
h5. Restrictii
h5. Sintaxa
* and dest, source // echivalenta cu dest&=source
* test dest, source // dest & source
* or dest, source // echivalenta cu dest|=source
* xor dest, source // echivalenta cu dest^=source
* not dest // ~dest
* $and dest, source$ // echivalenta cu dest&=source
* $test dest, source$ // dest & source
* $or dest, source$ // echivalenta cu dest|=source
* $xor dest, source$ // echivalenta cu dest^=source
* $not dest$ // ~dest
h5. Variante
Pentru "{$and$}", "{$or$}", "{$test$}", "{$xor$}" sunt ca si cele de la "{$add$}". Pentru "{$not$}" avem doua variante :
* not reg8/16/32
* not mem
* $not reg8/16/32$
* $not mem$
h5. Descriere
Instructiunea "{$not$}" nu afecteaza nici un flag.
Flagurile afectate de celalalte instructiuni sunt :
* carry, overflow - le dezactiveaza
* sign flag - este copiat bitul cel mai semnificativ din rezultat (semnul rezultatului, de fapt)
* zero flag - activat daca rezultatul operatiei a fost 0
* parity flag - este setat in functie de paritatea rezultatului
* {$carry$}, $overflow$ - le dezactiveaza
* $sign flag$ - este copiat bitul cel mai semnificativ din rezultat (semnul rezultatului, de fapt)
* $zero flag$ - activat daca rezultatul operatiei a fost 0
* $parity flag$ - este setat in functie de paritatea rezultatului
h5. Restrictii
Destinatia trebuie sa aiba aceeasi marime ca si sursa.
Instructinile OR/XOR/INC/DEC modifica flag-urile microprocesorului: Carry(numai ADD/SUB), Overflow, Zero, Parity.
Instructinile $OR/XOR/INC/DEC$ modifica flag-urile microprocesorului: {$Carry$}(numai {$ADD/SUB$}), {$Overflow$}, {$Zero$}, {$Parity$}.
h5. Exemplu
// executa instructiuni
@skip
and bx, FFFEh // bx = bx & 0xFFFE (se sterge bitul cel mai nesemnificativ)
==
h4. Instructiunile PUSH/POP
h5. Sintaxa
* push val
* pop val
* $push val$
* $pop val$
h5. Variante
* push reg8/16/32
* pop reg8/16/32
* $push reg8/16/32$
* $pop reg8/16/32$
h5. Exemplu
h5. Sintaxa
* cmp val1, val2
* $cmp val1, val2$
h5. Variante
* cmp reg8/16/32, reg8/16/32
* cmp reg8/16/32, imm8/16/32
* cmp mem8/16/32, reg8/16/32
* cmp mem8/16/32, imm8/16/32
* $cmp reg8/16/32, reg8/16/32$
* $cmp reg8/16/32, imm8/16/32$
* $cmp mem8/16/32, reg8/16/32$
* $cmp mem8/16/32, imm8/16/32$
h4. Jump-urile neconditionate (JMP) si jump-urile conditionate (JE, JNE, JB, JBE, JA, JAE, JZ, JNZ)
$instructiune label$
* JE * "sare" cu executia programului la label daca flag-ul equality este setat;
* JNE * "sare" cu executia programului la label daca flag-ul equality nu este setat;
* JB * "sare" cu executia programului la label daca flag-ul below este setat;
* JBE * "sare" cu executia programului la label daca flag-ul below sau flagul equality este setat;
* JA * "sare" cu executia programului la label daca flag-ul below nu este setat;
* JAE * "sare" cu executia programului la label daca flag-ul equality este setat sau flag-ul below nu este setat;
* JZ * "sare" cu executia programului la label daca flag-ul zero este setat;
* JNZ * "sare" cu executia programului la label daca flag-ul zero nu este setat;
* JMP * "sare" cu executia programului la label;
* $JE$ * "sare" cu executia programului la label daca flag-ul equality este setat;
* $JNE$ * "sare" cu executia programului la label daca flag-ul equality nu este setat;
* $JB$ * "sare" cu executia programului la label daca flag-ul below este setat;
* $JBE$ * "sare" cu executia programului la label daca flag-ul below sau flagul equality este setat;
* $JA$ * "sare" cu executia programului la label daca flag-ul below nu este setat;
* $JAE$ * "sare" cu executia programului la label daca flag-ul equality este setat sau flag-ul below nu este setat;
* $JZ$ * "sare" cu executia programului la label daca flag-ul zero este setat;
* $JNZ$ * "sare" cu executia programului la label daca flag-ul zero nu este setat;
* $JMP$ * "sare" cu executia programului la label;
h5. Exemplu
h5. Sintaxa
* loop label
* $loop label$
h5. Descriere
h5. Sintaxa
* INT nr_intrerupere (un numar cuprins intre 0 si 255);
* $INT nr_intrerupere$ (un numar cuprins intre 0 si 255);
Intreruperile opresc programul din rulare, executa un anumit cod si apoi permit continuarea rularii programului. Cu ajutorul apelului intreruperilor aplicatia poate sa comunice cu sistemul de operare, si cu unele componente hardware ale calculatorului (mouse-ul, tastatura, imprimanta, etc). Fiecare intrerupere are asociat un numar.
h5. Exemple
* 0x9 : intreruperea pentru tastatura;
* 0x10 : intreruperea care ofera serviciile BIOS pentru accesul la placa video;
* 0x21 : intreruperea sistemului de operare DOS;
* 0x33 : intreruperea pentru mouse;
* $0x9$ : intreruperea pentru tastatura;
* $0x10$ : intreruperea care ofera serviciile BIOS pentru accesul la placa video;
* $0x21$ : intreruperea sistemului de operare DOS;
* $0x33$ : intreruperea pentru mouse;
In DOS pentru initializarea mouse-ului se va apela functia numarul 0 a intreruperii 0x33 :
In DOS pentru initializarea mouse-ului se va apela functia numarul $0$ a intreruperii $0x33$ :
== code(cpp) |asm
{

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.