Detalhamento das Micro-operações:

Instrução ADD

Modificação das Flags:


C

Z

S

O

P

A

r

r

r

r

r

r

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:


C

Z

S

O

P

A

r

r

r

r

r

r

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:


C

Z

S

O

P

0

r

r

0

r

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:


C

Z

S

O

P

A

0

r

r

0

r

?

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:


C

Z

S

O

P

A

0

r

r

0

r

?

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:


C

Z

S

O

P

A

r

?

?

r

?

?

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:


C

Z

S

O

P

A

?

?

?

?

?

?

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:


C

Z

S

O

P

A

unchanged

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:


C

Z

S

O

P

A

r

r

r

r

r

r

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:


C

Z

S

O

P

A

unchanged

Funcionamento:

jmp label
IP = endereço destino

______________________________________________________________________

Instrução JE

Modificação das Flags:


C

Z

S

O

P

A

unchanged

Funcionamento:

je label
if (Zero_Flag == 1)
            IP = endereço destino
______________________________________________________________________

 

Instrução JNE

Modificação das Flags:


C

Z

S

O

P

A

unchanged

Funcionamento:

je label
if (Zero_Flag == 0)
            IP = endereço destino
______________________________________________________________________

Instrução JB

Modificação das Flags:


C

Z

S

O

P

A

unchanged

Funcionamento:

jb label
if (Carry_Flag == 1)
            IP = endereço destino

______________________________________________________________________

Instrução JNB

Modificação das Flags:


C

Z

S

O

P

A

unchanged

Funcionamento:

jnb label
if (Carry_Flag == 0)
            IP = endereço destino

______________________________________________________________________

Instrução JA

Modificação das Flags:


C

Z

S

O

P

A

unchanged

Funcionamento:

ja label
if (Carry Flag == 1 && Zero_Flag == 0)
            IP = endereço destino

______________________________________________________________________

Instrução JNA

Modificação das Flags:


C

Z

S

O

P

A

unchanged

Funcionamento:

jna label
if (Carry Flag == 0 && Zero_Flag == 1)
            IP = endereço destino

 

Copyright © 2007 Yamada-san. All Rights Reserved.