Tabla de Código de Assembler

Anuncio
Intel Assembler 80186 y superior
Tabla de Códigos 1/2
© 1996-2003 por Roger Jegerlehner, Suiza
V 2.3ES Traducido por Lucas Violini, Argentina
TRANSFERENCIA
Nombre Comentario
MOV
Mover (copiar)
XCHG
Intercambiar
Código
MOV Dest,Fuente
XCHG Op1,Op2
Operación
Dest:=Fuente
Op1:=Op2 , Op2:=Op1
STC
CLC
CMC
STD
CLD
STI
CLI
Set the carry (Carry = 1)
Clear Carry (Carry = 0)
Complementar Carry
Setear dirección
Limpiar dirección
Flag de Interrupción en 1
Flag de Interrupción en 0
STC
CLC
CMC
STD
CLD
STI
CLI
CF:=1
CF:=0
CF:= ¬ CF
DF:=1 (interpreta strings de arriba hacia abajo)
DF:=0 (interpreta strings de abajo hacia arriba)
IF:=1
IF:=0
PUSH
PUSHF
PUSHA
POP
POPF
POPA
Apilar en la pila
Apila los flags
Apila los registros generales
Desapila de la pila
Desapila a los flags
Desapila a los reg. general.
PUSH Fuente
PUSHF
PUSHA
POP Dest
POPF
POPA
DEC SP, [SP]:=Fuente
O, D, I, T, S, Z, A, P, C 286+: También NT, IOPL
AX, CX, DX, BX, SP, BP, SI, DI
Destino:=[SP], INC SP
O, D, I, T, S, Z, A, P, C 286+: También NT, IOPL
DI, SI, BP, SP, BX, DX, CX, AX
CBW
CWD
CWDE
Convertir Byte a Word
Convertir Word a Doble
Conv. Word a Doble Exten.
CBW
CWD
CWDE
AX:=AL (con signo)
DX:AX:=AX (con signo)
EAX:=AX (con signo)
386
O D
I
Flags
T S Z A P C
1
0
±
1
0
1
0
±
±
±
±
±
±
±
±
±
±
±
±
±
±
±
IN
i Entrada
IN Dest,Puerto
OUT i Salida
OUT Puerto,Fuente
i para más información ver especificaciones de la intrucción
ARITMÉTICOS
Nombre Comentario
Código
ADD
Suma
ADD Dest,Fuente
ADC
Suma con acarreo
ADC Dest,Fuente
SUB
Resta
SUB Dest,Fuente
SBB
Resta con acarreo
SBB Dest,Fuente
DIV
División (sin signo)
DIV Op
DIV
División (sin signo)
DIV Op
DIV 386 División (sin signo)
DIV Op
IDIV
División entera con signo
IDIV Op
IDIV
División entera con signo
IDIV Op
IDIV 386 División entera con signo
IDIV Op
MUL
Multiplicación (sin signo)
MUL Op
MUL
Multiplicación (sin signo)
MUL Op
MUL 386 Multiplicación (sin signo)
MUL Op
IMUL i Multiplic. entera con signo
IMUL Op
IMUL
Multiplic. entera con signo
IMUL Op
IMUL 386 Multiplic. entera con signo
IMUL Op
INC
Incrementar
INC Op
DEC
Decrementar
DEC Op
AL/AX/EAX := byte/word/double del puerto especifi.
Byte/word/double del puerto especifi. := AL/AX/EAX
Flags: ±=Afectado por esta instrucción ?=Indefinido luego de esta instrucción
Flags
Operación
O D I T S Z A P
Dest:=Dest+ Fuente
±
± ± ± ±
Dest:=Dest+ Fuente +CF
±
± ± ± ±
Dest:=Dest- Fuente
±
± ± ± ±
Dest:=Dest-(Fuente +CF)
±
± ± ± ±
Op=byte: AL:=AX / Op
AH:=Resto ?
? ? ? ?
Op=word: AX:=DX:AX / Op
DX:=Resto ?
? ? ? ?
Op=doublew.: EAX:=EDX:EAX / Op EDX:=Resto ?
? ? ? ?
Op=byte: AL:=AX / Op
AH:=Resto ?
? ? ? ?
Op=word: AX:=DX:AX / Op
DX:=Resto ?
? ? ? ?
Op=doublew.: EAX:=EDX:EAX / Op EDX:=Resto ?
? ? ? ?
Op=byte: AX:=AL*Op
si AH=0 ♦ ±
? ? ? ?
Op=word: DX:AX:=AX*Op
si DX=0 ♦ ±
? ? ? ?
Op=double: EDX:EAX:=EAX*Op
si EDX=0 ♦ ±
? ? ? ?
Op=byte: AX:=AL*Op
si AL es suficiente ♦ ±
? ? ? ?
Op=word: DX:AX:=AX*Op
si AX es suficiente ♦ ±
? ? ? ?
Op=double: EDX:EAX:=EAX*Op si EAX es sufi. ♦ ±
? ? ? ?
Op:=Op+1 (El Carry no resulta afectado !)
±
± ± ± ±
Op:=Op-1 (El Carry no resulta afectado !)
±
± ± ± ±
CMP
Op1-Op2
Comparar
CMP Op1,Op2
SAL
Desplazam. aritm. a la izq.
SAL Op,Cantidad
SAR
Desplazam. aritm. a la der. SAR Op,Cantidad
RCL
Rotar a la izq. c/acarreo
RCL Op,Cantidad
RCR
Rotar a la derecha c/acarreo RCR Op,Cantidad
ROL
Rotar a la izquierda
ROL Op,Cantidad
ROR
Rotar a la derecha
ROR Op,Cantidad
i para más información ver especificaciones de la intrucción
LÓGICOS
Nombre Comentario
Código
NEG
Negación (complemento a 2) NEG Op
NOT
Invertir cada bit
NOT Op
AND
'Y' (And) lógico
AND Dest,Fuente
OR
'O' (Or) lógico
OR Dest,Fuente
XOR
'O' (Or) exclusivo
XOR Dest,Fuente
SHL
SHR
Desplazam. lógico a la izq.
Desplazam. lógico a la der.
SHL Op,Cantidad
SHR Op,Cantidad
C
±
±
±
±
?
?
?
?
?
?
±
±
±
±
±
±
±
±
±
±
±
±
i
i
i
i
i
i
±
±
±
±
?
?
±
±
±
±
±
±
±
±
♦ entonces CF:=0, OF:=0 sino CF:=1, OF:=1
Operación
Op:=0-Op
si Op=0 entonces CF:=0 sino CF:=1
Op:=¬ Op (invierte cada bit)
Dest:=Dest∧ Fuente
Dest:=Dest∨Fuente
Dest:=Dest (xor) Fuente
O D
±
I
Flags
T S Z A P C
± ± ± ± ±
0
0
0
±
±
±
±
±
±
?
?
?
±
±
±
0
0
0
i
i
±
±
±
±
?
?
±
±
±
±
Consiga la última versión gratuita de jegerlehner.ch/intel Esta página puede ser libremente distribuída sin costo alguno si no es modificada. Todos los derechos reservados
Intel Assembler 80186 y superior
Tabla de Códigos 2/2
© 1996-2003 por Roger Jegerlehner, Suiza
V 2.3ES Traducido por Lucas Violini, Argentina
MISCELÁNEOS
Nombre Comentario
NOP
Hacer nada
Código
NOP
Operación
No hace operación alguna
LEA
Cargar direciión Efectiva
LEA Dest,Fuente
Dest := dirección fuente
INT
Interrupción
INT Num
Interrumpe el progr. actual, corre la subrutina de int.
SALTOS (generales)
Nombre Comentario
CALL
Llamado a subrutina
Código
CALL Proc
JMP
Saltar
JMP Dest
JE
JZ
JCXZ
JP
JPE
Saltar si es igual
Saltar si es cero
Saltar si CX es cero
Saltar si hay paridad
Saltar si hay paridad par
SALTOS Sin Signo (Cardinal)
JA
Saltar si es superior
JAE
Saltar si es superior o igual
JB
Saltar si es inferior
JBE
Saltar si es inferior o igual
JNA
Saltar si no es superior
JNAE
Saltar si no es super. o igual
JNB
Saltar si no es inferior
JNBE
Saltar si no es infer. o igual
JC
Saltar si hay carry
JNC
Saltar si no hay carry
Operación
JE Dest
JZ Dest
JCXZ Dest
JP Dest
JPE Dest
(≡ JZ)
(≡ JE)
JNE
JNZ
JECXZ
JNP
JPO
Saltar si no es igual
Saltar si no es cero
Saltar si ECX es cero
Saltar si no hay paridad
Saltar si hay paridad impar
JNE Dest
JNZ Dest
JECXZ Dest
JNP Dest
JPO Dest
(≡ JNZ)
(≡ JNE)
JA Dest
JAE Dest
JB Dest
JBE Dest
JNA Dest
JNAE Dest
JNB Dest
JNBE Dest
JC Dest
JNC Dest
(≡ JNBE)
(≡ JNB ≡ JNC)
(≡ JNAE ≡ JC)
(≡ JNA)
(≡ JBE)
(≡ JB ≡ JC)
(≡ JAE ≡ JNC)
(≡ JA)
JG Dest
JGE Dest
JL Dest
JLE Dest
JNG Dest
JNGE Dest
JNL Dest
JNLE Dest
JO Dest
JNO Dest
JS Dest
JNS Dest
(≡ JNLE)
(≡ JNL)
(≡ JNGE)
(≡ JNG)
(≡ JLE)
(≡ JL)
(≡ JGE)
(≡ JG)
(≡ JPE)
(≡ JP)
AL
87
0
EDX 386
DX
DH
DL
Data mul, div, IO
31
24 23
16 15
87
0
ECX 386
CX
CH
CL
Count loop, shift
31
24 23
16 15
87
0
EBX 386
BX
BH
BL
BaseX data ptr
31
Flags:
24 23
16 15
87
- - - - OD I T S
0
Código
RET
Acumulador
16 15
0
Comentario
Retorno de subrutina
AX
24 23
Flags
T S Z A P C
Name
RET
EAX 386
31
I
Operación
Registros Generales:
AH
O D
0
-A- P-C
Flags de Control (cómo se manejan las instrucciones):
D: Dirección 1=Los op's String se procesan de arriba hacia abajo
I: Interrupción Indica si pueden ocurrir interrupciones o no.
T: Trampa
Paso por paso para debugging
SALTOS Con Signo (Integer)
JG
Saltar si es mayor
JGE
Saltar si es mayor o igual
JL
Saltar si es menor
JLE
Saltar si es menor o igual
JNG
Saltar si no es mayor
JNGE
Saltar si no es mayor o igual
JNL
Saltar si no es inferior
JNLE
Saltar si no es menor o igual
JO
Saltar si hay Overflow
JNO
Saltar si no hay Overflow
JS
Saltar si hay signo (=negativo)
JNS
Saltar si no hay signo (=posit.)
Ejemplo:
.DOSSEG
.MODEL SMALL
.STACK 1024
Two
EQU 2
.DATA
VarB
DB ?
VarW
DW 1010b
VarW2 DW 257
VarD
DD 0AFFFFh
S
DB "Hello !",0
.CODE
main:
MOV AX,DGROUP
MOV DS,AX
MOV [VarB],42
MOV [VarD],-7
MOV BX,Offset[S]
MOV AX,[VarW]
ADD AX,[VarW2]
MOV [VarW2],AX
MOV AX,4C00h
INT 21h
END main
386
(≡ JPO)
(≡ JNP)
; Programa de demostración
; Constante
; define un Byte, cualquier valor
; define un Word, en binario
; define un Word, en decimal
; define un DoubleWord, en hexa
; define un String
; resuelto por el linker
; inicializa el reg. de segmento de datos
; inicializa VarB
; setea VarD
; dirección de "H" de "Hello !"
; poner el valor en el acumulador
; suma VarW2 a AX
; almacena AX en VarW2
; regresa al sistema
Flags de Estado (resultado de las operaciones):
C: Carry
resultado de operac. sin signo es muy grande o inferior a cero
O: Overflow resultado de operac. sin signo es muy grande o pequeño.
S: Signo
Signo del resultado. Razonable sólo para enteros. 1=neg. 0=pos.
Z: Cero
Resultado de la operación es cero. 1=Cero
A: Carru Aux. Similar al Carry, pero restringido para el nibble bajo únicamente
P: Paridad
1=el resultado tiene cantidad par de bits en uno
Consiga la última versión gratuita de jegerlehner.ch/intel Esta página puede ser libremente distribuída sin costo alguno si no es modificada. Todos los derechos reservados
Descargar