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