Detalhamento das Micro-operações:
Instrução ADD
Modificação das Flags:
Funcionamento:
add reg1, reg2
Abus = reg1
tmp1 = Abus
Abus = reg2
tmp2 = Abus
Executa add(na ULA) -> Gera flags
Abus = resultado add
reg1 = Abus
add reg1, memoria
Abus = reg1
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa add(na ULA) -> Gera flags
Abus = resultado add
reg1 = Abus
add memoria, reg1
Abus = memoria[op1]
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa add(na ULA) -> Gera flags
Abus = resultado add
memoria[op1] = Abus
add reg1, imediato
Abus = reg1
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa add(na ULA) -> Gera flags
Abus = resultado add
reg1 = Abus
______________________________________________________________________
add memoria, imediato
Abus = memoria[op1]
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa add(na ULA) -> Gera flags
Abus = resultado add
memoria = Abus
_____________________________________________________________________
Instrução SUB
Modificação das Flags:
Funcionamento:
sub reg1, reg2
Abus = reg1
tmp1 = Abus
Abus = reg2
tmp2 = Abus
Executa sub(na ULA) -> Gera flags
Abus = resultado sub
reg1 = Abus
______________________________________________________________________
sub reg1, memoria
Abus = reg1
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa sub(na ULA) -> Gera flags
Abus = resultado sub
reg1 = Abus
______________________________________________________________________
sub memoria, reg1
Abus = memoria[op1]
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa sub(na ULA) -> Gera flags
Abus = resultado sub
memoria[op1] = Abus
______________________________________________________________________
sub reg1, imediato
Abus = reg1
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa sub(na ULA) -> Gera flags
Abus = resultado sub
reg1 = Abus
______________________________________________________________________
sub memoria, imediato
Abus = memoria[op1]
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa sub(na ULA) -> Gera flags
Abus = resultado sub
memoria = Abus
______________________________________________________________________
Instrução AND
Modificação das Flags:
Funcionamento:
and reg1, reg2
Abus = reg1
tmp1 = Abus
Abus = reg2
tmp2 = Abus
Executa and(na ULA) -> Gera flags
Abus = resultado and
reg1 = Abus
______________________________________________________________________
and reg1, memoria
Abus = reg1
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa and(na ULA) -> Gera flags
Abus = resultado and
reg1 = Abus
____________________________________________________________
and memoria, reg1
Abus = memoria[op1]
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa and(na ULA) -> Gera flags
Abus = resultado and
memoria[op1] = Abus
______________________________________________________________________
and reg1, imediato
Abus = reg1
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa and(na ULA) -> Gera flags
Abus = resultado and
reg1 = Abus
______________________________________________________________________
and memoria, imediato
Abus = memoria[op1]
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa and(na ULA) -> Gera flags
Abus = resultado and
memoria = Abus
______________________________________________________________________
Instrução XOR
Modificação das Flags:
Funcionamento:
xor reg1, reg2
Abus = reg1
tmp1 = Abus
Abus = reg2
tmp2 = Abus
Executa xor(na ULA) -> Gera flags
Abus = resultado xor
reg1 = Abus
______________________________________________________________________
xor reg1, memoria
Abus = reg1
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa xor(na ULA) -> Gera flags
Abus = resultado xor
reg1 = Abus
____________________________________________________________
xor memoria, reg1
Abus = memoria[op1]
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa xor(na ULA) -> Gera flags
Abus = resultado xor
memoria[op1] = Abus
______________________________________________________________________
xor reg1, imediato
Abus = reg1
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa xor(na ULA) -> Gera flags
Abus = resultado xor
reg1 = Abus
______________________________________________________________________
xor memoria, imediato
Abus = memoria[op1]
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa xor(na ULA) -> Gera flags
Abus = resultado xor
memoria = Abus
______________________________________________________________________
Instrução OR
Modificação das Flags:
Funcionamento:
or reg1, reg2
Abus = reg1
tmp1 = Abus
Abus = reg2
tmp2 = Abus
Executa or(na ULA) -> Gera flags
Abus = resultado or
reg1 = Abus
______________________________________________________________________
or reg1, memoria
Abus = reg1
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa or (na ULA) -> Gera flags
Abus = resultado or
reg1 = Abus
____________________________________________________________
or memoria, reg1
Abus = memoria[op1]
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa or (na ULA) -> Gera flags
Abus = resultado or
memoria[op1] = Abus
______________________________________________________________________
or reg1, imediato
Abus = reg1
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa or (na ULA) -> Gera flags
Abus = resultado or
reg1 = Abus
______________________________________________________________________
or memoria, imediato
Abus = memoria[op1]
tmp1 = Abus
Abus = imediato
tmp2 = Abus
Executa or (na ULA) -> Gera flags
Abus = resultado or
memoria = Abus
______________________________________________________________________
Instrução MUL
Modificação das Flags:
Funcionamento:
mul memoria
Abus = Reg-AL
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa mul(na ULA) -> Gera flags
Abus = resultado mul
Reg-AX = Abus
______________________________________________________________________
mul reg1
Abus = Reg-AL
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa mul(na ULA) -> Gera flags
Abus = resultado mul
Reg-AX = Abus
______________________________________________________________________
Instrução DIV
Modificação das Flags:
Funcionamento:
div memoria
Abus = Reg-AX
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
Executa div(na ULA) -> Gera flags
Abus = quociente
Reg-AL = Abus
Abus = resto
Reg-AH = Abus
______________________________________________________________________
div reg1
Abus = Reg-AX
tmp1 = Abus
Abus = reg1
tmp2 = Abus
Executa div(na ULA) -> Gera flags
Abus = quociente
Reg-AL = Abus
Abus = resto
Reg-AH = Abus
______________________________________________________________________
Instrução NOT
Modificação das Flags:
Funcionamento:
not Reg1
Abus = Reg1
tmp1 = Abus
Executa not(na ULA) -> Gera flags
Abus = resultado
Re1 = Abus
______________________________________________________________________
not memoria
Abus = memoria[Op1]
tmp1 = Abus
Executa not(na ULA) -> Gera flags
Abus = resultado
memoria[Op1] = Abus
______________________________________________________________________
Instrução CMP
Modificação das Flags:
Funcionamento:
cmp reg1, reg2
Abus = reg1
tmp1 = Abus
Abus = reg2
tmp2 = Abus
sub tmp1, tmp2
Executa cmp -> Gera flags
cmp reg1, memória
Abus = reg1
tmp1 = Abus
Abus = memoria[op1]
tmp2 = Abus
sub tmp1, tmp2
Executa cmp -> Gera flags
cmp memoria, reg1
Abus = memoria[op1]
tmp1 = Abus
Abus = reg1
tmp2 = Abus
sub tmp1, tmp2
Executa cmp -> Gera flags
cmp reg1, imediato
Abus = reg1
tmp1 = Abus
Abus = imediato
tmp2 = Abus
sub tmp1, tmp2
Executa cmp -> Gera flags
______________________________________________________________________
cmp memoria, imediato
Abus = memoria[op1]
tmp1 = Abus
Abus = imediato
tmp2 = Abus
sub tmp1, tmp2
Executa cmp -> Gera flags
______________________________________________________________________
Instrução JMP
Modificação das Flags:
Funcionamento:
jmp label
IP = endereço destino
______________________________________________________________________
Instrução JE
Modificação das Flags:
Funcionamento:
je label
if (Zero_Flag == 1)
IP = endereço destino
______________________________________________________________________
Instrução JNE
Modificação das Flags:
Funcionamento:
je label
if (Zero_Flag == 0)
IP = endereço destino
______________________________________________________________________
Instrução JB
Modificação das Flags:
Funcionamento:
jb label
if (Carry_Flag == 1)
IP = endereço destino
______________________________________________________________________
Instrução JNB
Modificação das Flags:
Funcionamento:
jnb label
if (Carry_Flag == 0)
IP = endereço destino
______________________________________________________________________
Instrução JA
Modificação das Flags:
Funcionamento:
ja label
if (Carry Flag == 1 && Zero_Flag == 0)
IP = endereço destino
______________________________________________________________________
Instrução JNA
Modificação das Flags:
Funcionamento:
jna label
if (Carry Flag == 0 && Zero_Flag == 1)
IP = endereço destino
|