Escolar Documentos
Profissional Documentos
Cultura Documentos
Estrutura externa
8086
16 bits
16 bits
8088
16 bits
8 bits
Registos internos
15
DATA
GROUP
AH
BH
CH
DH
POINTER
AND
INDEX GROUP
AX
BX
CX
DX
AL
BL
CL
DL
Accumulator
Base
Count
Data
SP
BP
SI
DI
Stack pointer
Base pointer
Source index
Destination index
CS
DS
SS
ES
Code segment
Data segment
Stack segment
Extra segment
IP
Instruction pointer
FLAGS
BX
SI
BP
DI
DI
Displacement
BX
0000
BP
0000
SI
0000
DI
0000
Physical address
Codificado
na
instruo
Explcito
na
instruo
Assumido
excepto
se indicao
contrria
Registo de flags
X
X OF DF IF TF SF ZF X AF X
CF Carry flag
PF Parity flag
AF Auxiliar flag
ZF Zero flag
SF Sign flag
PF
Modos de endereamento
Endereamento directo
Endereamento indirecto atravs de registo
Endereamento baseado
Endereamento indexado
Endereamento baseado indexado
Modos de endereamento
Endereamento directo (6 clocks)
O endereo dado na instruo
Ex: mov
ax, Var1
Modos de endereamento
Endereamento indexado (9 clocks)
Instruo MOV
mov destino,origem
Transfere um byte ou uma word do operando origem para o
operando destino.
registo
mov
bx,cx
memria
registo
mov
var1, ax
registo
memria
mov
ax, var2
memria
constante
mov
var1, 23
registo
constante
mov
dx, 45
registo
add
cx,dx
memria
registo
sub
var1, ax
registo
memria
add
ax, var2
memria
constante
sub
var1, 2
registo
constante
add
cl, 4
Instruo CMP
cmp destino,origem
Subtrai a origem do destino (byte ou word) no produzindo
resultado mas afectando as flags AF, CF, OF, PF, SF, ZF.
Uma comparao seguida de um JG produzir um salto se
destino > origem.
registo
cmp
bx,cx
memria
registo
cmp
var1, ax
registo
memria
cmp
ax, var2
memria
constante
cmp
var1, 23
registo
constante
cmp
bl, 45
Instruo JMP
jmp endereo
Salta incondicionalmente para endereo .
label1
JG/JNLE
JNE/JNZ
JAE/JNB
JGE/JNL
JNO
JB/JNAE
JL/JNGE
JNP/JPO
JC
JLE/JNG
JE/JZ
JNC
JNS
JO
JP/JPE
JS
JBE/JNA
Comparao
com sinal
Salta se:
Comparao
sem sinal
Salta se:
Igual
JE
ZF=1
JE
ZF=1
Desigual
JNE
ZF=0
JNE
ZF=0
Maior que
JG ou JNLE
ZF=0 e SF=OF
JA ou JNBE
CF=0 e ZF=OF
Menor que
JL ou JNGE
SF?OF
JB ou JNAE
CF=1
Maior ou igual
JGE ou JNL
SF=OF
JAE ou JNB
CF=0
Menor ou igual
JLE ou JNG
ZF=1 e SF?OF
JBE ou JNA
CF=1 ou ZF=1
XCHG
XLAT
Descrio: AL = DS : BX [AL]
DS:BX e AL=5 ?
CBW
Descrio: AL = sinal(AL)
CWD
Descrio: DX = sinal(AX)
ADC
SUB
SBB
NEG
{registo | memria}
Descrio: Destino = -Destino
{registo | memria}
DEC
{registo | memria}
{registo | memria}
IDIV
{registo | memria}
Instrues de ajuste
Instrues de ajuste ASCII (unpacked BCD)
AAA Ascii adjust for addition
Exemplo: mov
mov
add
aaa
ax, 9
bx, 3
al, bl
; ax=9
; bx=3
; al=0ch
; ah=1, al=2
mov
add
daa
Instrues de I/O
IN
Descrio: AH = flags
SAHF
Descrio: flags = AH
PUSHF
POPF
STC
Descrio: Carry = 1
CLC
Descrio: Carry = 0
CMC
STD
Descrio: DF = 1
CLD
Descrio: DF = 0
STI
Descrio: IF = 1
CLI
Descrio: IF = 0
registo, memria
Descrio: Registo = Endereo(memria)
Exemplo:
LDS
dx, string
dx, OFFSET string
dx, string[si]
; lento !!!
; rpido
; til !!!
registo, memria
Descrio:
LES
lea
mov
lea
registo, memria
Descrio:
Instrues lgicas
NOT
{registo | memria}
Descrio :
AND
OR
XOR
Descrio :
TEST
CMP
Shift left
SHR
Shift right
SAL
SAR
ROL
Rotate left
ROR
Rotate right
RCL
RCR
Instrues de shift
7
CF
CF
7
CF
CF
Instrues de rotate
7
CF
CF
CF
CF
REP
Descrio : repetir CX vezes
REPE/REPZ
Descrio : repetir enquanto igual no mximo CX vezes
REPNE/REPNZ Descrio: repetir enquanto diferente no mximo CX vezes
Instrues
[rep] MOVS
[rep] MOVSB
[rep] MOVSW
[repe|repne]
[repe|repne]
[repe|repne]
[ES:]destination,[segmentregister]:source
Descrio : ES:DI ? DS:SI
CMPS
[segmentregister:]source,[ES:]:destination
CMPSB
CMPSW
SCAS [ES:]destination
SCASB
SCASW
Descri
Descri
o
o:: procura na string ES:DI a primeira ocorrncia/no ocorrncia do valor em
AL/AX. ES:DI ficaro com o valor imediatamente seguinte
seguinte.. Depois de um
REPNE SCAS, ZF=0 indica que no foi encontrado o valor. Depois de um REPE
SCAS, ZF=1 indica que no foi encontrado o valor procurado
procurado..
LODS
[segmentregister:]source
LODSB
LODSW
Descri
Descri
o
o:: AL/AX=DI:SI (Si
( Si ajustado de acordo com a DF).
{registo | memria}
Descrio: Topo(stack)=end.
Descrio:
Topo(stack)=end. Retorno e PC=End. Destino
Exemplos::
Exemplos
call
Proc1
call
ProcTable[si]]
ProcTable[si
call
ax
call
[bx].table[si
bx].table[si]]
RET
[constante]
Descrio:: PC=Topo(stack
Descrio
PC=Topo(stack)) e Stack=stack+constante
Stack=stack+constante
JMP
{registo | memria}
short
near
far_ptr
[bx].target
cx
JA/JNBE
JNS
JNC
JLE/JNG
JAE/JNB
JO
JE/JZ
JNE/JNZ
JB/JNAE
JP/JPE
JG/JNLE
JNO
JBE/JNA
JS
JGE/JNL
JNP/JPO
JC
IMPORTANTE
Os saltos condicionais so limitados a 128 bytes (jumps short).
Instrues de loop
LOOP
label
LOOPE/LOOPZ
label
LOOPNE/LOOPNZ
label
JCXZ
label
Descrio : se CX=0 salta para label seno continua (no consulta as flags).
Instrues de interrupo
INT
interruptNumber
INTO
Descrio : provoca uma interrupo por software sobre o vector 4.
IRET
Descrio : retorna de uma rotina de entendimento de interrupo .
INT segment
Status flags
Program FLAGS
Code segment
Program CS
Instruction
pointer
Program IP
INT offset
Memria baixa
Program FLAGS
New CS
New IP
Program FLAGS
Program CS
Program IP
Memria baixa
SP
Previous IP
Stack
Previous CS
Previous FLAGS
SP
Memria alta
Memria alta
SP
WAIT
ESC
LOCK
NOP