Intel 8086 modelo básico (primera parte) Registros: Uso general: AX

Anuncio
Intel 8086 modelo básico (primera parte)
Registros:
Uso general: AX, BX, CX, DX, SI, DI, BP.
Uso con direccionamento especial: SP, IP.
Registros de segmento: CS, SS, DS, ES.
Modelo de los registros:
20
16
8
AH
CS
AX
0
AL
IP
CH
-D I T S Z -A -P-C
FLAGS
DH
CX
DX
CL
DL
DS
Direccionamiento de memoria general:
BH
byte, word, double word (lds,les):
BP
EAoffset = Displ +
SI
BX
SI
+
BX
DI
ES
DI
EA
= EAoffset + 16 * Segment
Por lo menos un elemento de
EAoffset es obligatorio.
SS
BP
Segmento por defecto: SS si BP participa,
ES si op. String y [DI].
CS jmp y call
DS todos los otros casos.
SP
BL
Instrucciones básicas (por frecuencia del uso):
Mnemonica Ingles
Castellano
Flags
Movimiento
MOV
MOV
XCHG
LEA
PUSH
POP
de datos
A, DE
As, Des
REG, A
reg16, M
DATA16
DIR16
Move
Mover
Move
Mover
Exchange Reemplazar REG <-> MEM
Load Efective Address
reg16<-EA
Push
Push
Pop
Pop
Aritmetica
ADD
ADC
SUB
SBB
CMP
NEG
INC
DEC
A,
A,
A,
A,
A,
A
A
A
Add
Añadir
add with carry
Añadir
subtract
Resta
Subtact with borrow Resta
Compare
Compara
. <- A-DE
Negate
Negativo
Increment Incremento
A++
Decrement Decremento A--
Logica
AND
OR
XOR
TEST
NOT
A, DE
A, DE
A, DE
A, DE
A
DE
DE
DE
DE
DE
And
Or
Exclusive Or XOr
Test And
Not
A <- DE
As <- DEs
DATA16 -> [SS:SP], SP<-SP-2
SP<-SP+2, DIR16<- [SS:SP]
A <- A+DE
A <- A+DE+C
A <- A-DE
A <- A-DE-C
OSCZAP
A <- -A
And
Or
A <- A
Test
-
A <- A
DE
A <- A
DE
DE
SZP/COA
. <- A
DE
A <- -1
DE
OSCZAP
OSCZAP
OSCZAP
OSCZAP
SZP/COA
SZP/COA
SZP/COA
Otras instrucciones aritméticas de uso frecuente:
MUL
IMUL
DIV
DE
DE
DE
IDIV
DE
Control
JMP
DEST
Jump
CALL
RET
RET
DEST
Call
Return
Jcc
DISPL8
Multiply
Multiplicar
ACC <- ACC1 * SRC
Int. Multiply Multiplicar
; con signo
Divide
Dividir
ACC1 <- ACC / SRC ;
ACC2 <- ACC % SRC
Divide
Dividir
; Con signo
Ir a DEST
Llamar a DEST
Volver
imm
Jump if cc
Ir si cc
IP <- DEST (near) o
CS:IP <-DEST (far)
PUSH CS; (far) PUSH IP; JMP DEST
POP IP; POP CS (far);
SP <- SP+imm; POP CS (far); POP IP
IP <- IP+DISPL8(con signo)
Sumario de Jcc:
Estimación de flags:
C
Z
O
S
P
Cc= { N } +
Carry
Zero
Overf
Sign
Parity (PE, PO)
Aritmética con números sin signo (Bellow/Above) CMP X, Y // Jcc dest:
Jcc = Jump if
N Not
+
B Below (X<Y)
+
A Above (X>Y)
E (or) equal
Aritmética con números sin signo (Greater/Less) CMP X,Y // Jcc dest:
Jcc = Jump if
N Not
+
G Greater X>Y
+
L Less
X<Y
E (or) equal
Alias dentro de Jcc:
Sinónimos
JP, JPE
JC, JB, JNAE
JA, JNBE
Antónimos
JNP, JPO
JNC, JNB, JAE
JNA, JBE
Sinónimos
JZ, JE
JG, JNLE
JL, JNGE
Leyenda:
Reg8:
Reg16 :
Seg :
Imm8:
Imm16:
Mem8:
Mem16:
Mem32:
Acc8:
Acc16:
8 bits
16 bits
AH, AL, BH, BL, CH, CL, DH, DL;
AX, BX, CX, DX, SI, DI, BP, SP;
DS, ES, SS, CS
8 bits de data inmediatos
16 bits de data inmediatos
direccionamiento general de un BYTE.
direccionamiento general de un WORD.
direccionamiento general de un DWORD.
AL
AX
Acc
Acc1
Acc2
AX
DX:AX
AL
AX
AH
DX
Antónimos
JNZ, JNE
JNG, JLE
JNL, JGE
Combinaciones validos de direccionamiento y ejemplos:
DEST
EA
DISPL8
DISPL16
MEM16
MEM32
IP+DISPL8 JMP SHORT L1
// JMP L1 // JA L1 // JNGE MYLOOP
IP+DISPL16
JMP NEAR L1
// JMP L2
WORD PTR [EA]
JMP [BX] // JMP NEAR CS:[BX+DI]
DWORD PTR [EA]
JMP DWORD PTR [BX] // JMP DWORD PTR R
Ejemplo
RET y CALL se compilan del ensamblador según la declaración de PROG. Los PROGs declarados como NEAR se
llaman con NEAR y los declarados con FAR como FAR.
A
DE
Ejemplos ASM
I8
I16
DB
DW
EQU
10h
EQU
222h
R DUP (20)
X
Reg8
reg8
ADD
XOR
MOV
BH,AL
BL,BL
BH,AL
Reg8
mem
AND
OR
MOV
MOV
AL, R /
CL,BYTE PTR X
AL, R
CL,BYTE PTR X
Reg8
imm8
ADD
SUB
MOV
MOV
BL, I8
CL, 231
BL, I8
CL, 231
Reg16
reg16
SUB
XOR
MOV
BX,SI
AX,AX
BX,SI
Reg16
mem
TEST
XOR
MOV
MOV
SI, X[BX]
AX, WORD PTR R+3[SI]
SI, X[BX]
BX, WORD PTR R+3[SI+BX]
Reg16
imm16
CMP
TEST
SBB
MOV
MOV
MOV
BX, I16
BX, I8
CX, OFFSET R
BX,I16
BX,I8
CX, OFFSET R
DEs
As
Seg
reg16
reg16
seg
mem16 seg
seg
mem16 MOV
MOV
MOV
MOV
ES,X //
DS,AX
CX,ES
X, ES // MOV WORD PTR R, DS
MOV ES,WORD PTR R[BX+SI]
DATA16 Ejemplo
Reg16
Seg
Mem16 PUSH
Imm16
PUSH
AX
PUSH
ES // PUSH CS // POP DS
X // PUSH WORD PTR R+2
PUSH
234
// 80286 y superiores.
DIR16
reg16
mem16
seg
POP
POP
POP
SI
WORD PTR R+6 // POP X
DS
Referencia completa de Jcc
Comprobación de flags:
Jcc
Descripción
Condición
JC
JNC
JZ
JNZ
JS
JNS
JO
JNO
JP
JPE
JNP
JPO
Jump if carry
Jump if no carry /C
Jump if zero
Jump if not zero /Z
Jump if sign
Jump if no sign
/S
Jump if overflow O
Jump if no Overflow
Jump if parity
Jump if parity even
Jump if no parity /P
Jump if parity odd
C
Z
S
/O
P
P
/P
Jcc instrucciones para números sin signo (CMP A,B // Jcc DEST):
(Below/Above)
Jcc
Descripción
JA
JNBE
JAE
JNB
JE
JNE
JBE
JNA
JB
JNAE
Jump if above
Jump if not below or equal
Jump if above or equal
Jump if not below
Jump if equal
Jump if not equal ()
Jump if below or equal
Jump if not above
Jump if below
Jump if not above or equal
Condición
A>B
A>B
A>=B
A>=B
Flags
/C./Z
/C./Z
/C
/C
A==B
A != B
A<=B
A<=B
Z
/Z
C or Z
C or Z
A<B
A<B
C
C
Jcc instrucciones para números con signo (CMP A, B // Jcc DEST):
(Greater / Less)
Jcc
Descripción
JG
JNLE
JGE
JNL
JE
JNE
JLE
JNG
JL
JNGE
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
if greater
A>B
if not less than or equal
if greater than or equal A>=B
if not less than
if equal
if not equal
A !=B
if less than or equal A<=B
if not greater than
A<=B
if less than
A<B
if not greater or equal
Condición
Flags
/S or Z
A>B
/S or Z
/S
A>=B
A==B
/S
Z
/Z
S O or Z
S O or Z
S.O
A<B
S.O
Descargar