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