Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
ITT-327-T
Microprocesadores
Lenguaje de Programación
Ensamblador.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Set de Instrucciones del 8088/8086.
El set de instrucciones de un microprocesador define las
operaciones básicas que el programador puede hacer
realizar al dispositivo. El 8088 y el 8086 tienen el mismo
conjunto de instrucciones, que consiste en un total de
117. El conjunto de instrucciones puede ser dividido en
varios grupos de acuerdo al tipo de funcionalidad:
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Transferencia de Datos.
Este grupo de instrucciones sirven para mover datos ya sea entreregistros internos o entre un registro interno y una localidad dememoria. Este grupo está compuesto por las siguientesinstrucciones:
� MOV (Move Byte or Word). Esta instrucción es usada paratransferir un byte o una palabra desde una fuente a un destino.Tanto la fuente como el destino pueden ser registros internos del8088/8086 o localidades de memoria.
MOV Mover MOV D,S
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Transferencia de Datos.
Destino Fuente Ejemplo
Memoria Acumulador MOV [DATO],AX
Acumulador Memoria MOV AL,[VAR1]
Registro Registro MOV BX,DX
Registro Memoria MOV CX,[VAR2]
Memoria Registro MOV [VAR3],BX
Registro Inmediato MOV CH,8C
Memoria Inmediato MOV [VAR4],F2B5
Registro de Segmento Registro 16 MOV DS,AX
Registro de Segmento Memoria 16 MOV ES,[VAR5]
Registro 16 Registro de Segmento MOV DX,CS
Memoria Registro de Segmento MOV [VAR5],SS
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Transferencia de Datos.
� XCHG (Exchange Byte or Word). Esta instrucción se
usa para intercambiar el contenido de 2 registros.
XCHG Intercambiar XCHG D,S
Nemónico Significado Formato
Destino Fuente
Acumulador Registro 16 Bits
Memoria Registro
Registro Registro
Registro Memoria
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Transferencia de Datos.
� XLAT (Translate Byte). Cuando es usada esta
instrucción, el registro BX representa la posición relativa
del inicio de la tabla de dirección del segmento de datos
corriente. También, AL representa la posición relativa en
la tabla del dato que va a ser accesado.
Al ser ejecutada la instrucción, el contenido de AL es
reemplazado por el contenido del espacio en memoria
dado por (BX) + (AL).
XLAT Traducir XLAT
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Transferencia de Datos.
� LEA (Load Effective Address). Se usa para cargar un
registro específico con una dirección relativa de 16 bits.
LEA SI, EA
� LDS (Load Data Segment). Es similar a LEA, excepto
que carga el registro además del DS.
� LES (Load Extra Segment). Es similar a LEA, excepto
que carga el registro además del ES.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Transferencia de Datos.
LEA Cargar Dirección Relativa LEA Reg16, EALDS Cargar Registro y DS LDS Reg16, EA
LES Cargar Registro y ES LES Reg16, EA
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas.
Este grupo de instrucciones sirven para realizar
operaciones aritméticas en una variedad de formatos
como bytes o palabras con o sin signo, BCD, números
ASCII, etc. Este grupo está a su vez dividido en 4 grupos:
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 1. Instrucciones de suma.
� ADD (Add Byte or Word). Es usada para sumar el unoperando con el contenido del acumulador, algún otro registro,o una variable en memoria. El contenido de la fuente se sumaal destino, y el resultado es llevado al destino. El carryresultante de la operación en el bit más significativo deldestino se refleja en el carry flag, sin embargo, no es tomadoen cuenta en la operación aritmética.
� ADC (Add Byte or Word with Carry). Trabaja de manerasimilar a la instrucción ADD, pero en este caso, se sumatambién el contenido del flag del carry.
�
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 1. Instrucciones de suma.
� INC (Increment Byte or Word by 1). Su ejecución suma un 1al operando específico. Puede usarse con un registro de 8 bitsó de 16 bits.
� AAA (ASCII Adjust for Addition). Es necesaria en el casodonde se realice una operación de suma de númerosexpresados en código ASCII. Cuando se hace esto, se deberealizar un ajuste en el resultado en binario para convertirlo asu número decimal equivalente. Por esta razón debe serusada inmediatamente después de la instrucción ADD quesumó datos en código ASCII.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 1. Instrucciones de suma.
� DAA (Decimal Adjust for Addition). Esta instrucción se usapara realizar una operación de ajuste similar a la ejecutadapor la instrucción AAA, pero para la suma de dos númerosBCD.
ADD Suma ADD D,SADC Suma con carry ADC D,SINC Incrementar en 1 INC DAAA Ajuste ASCII para suma AAA
DAA Ajuste Decimal para suma DAA
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 2. Instrucciones de resta.
� SUB (Subtract Byte or Word). Se usa para restar el valor deun operando fuente del valor de un operando destino. El“llevo” que ocurre en la operación de resta del bit mássignificativo se refleja en el carry flag, pero no se toma encuenta en la operación.
� SBB (Subtract Byte or Word with Borrow). Trabaja demanera similar a la instrucción SUB, pero en este caso, setoma en cuenta el contenido del flag del carry.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 2. Instrucciones de resta.
� DEC (Decrement Byte or Word by 1). Su ejecución resta un1 al operando específico. Puede usarse con un registro de 8bits ó de 16 bits.
� AAS (ASCII Adjust for Subtraction). Es necesaria en el casodonde se realice una operación de resta de númerosexpresados en código ASCII. Cuando se hace esto, se deberealizar un ajuste en el resultado en binario para convertirlo asu número decimal equivalente. Por esta razón debe serusada inmediatamente después de la instrucción que restódatos en código ASCII.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 2. Instrucciones de resta.
� DAS (Decimal Adjust for Subtraction). Esta instrucción seusa para realizar una operación de ajuste similar a laejecutada por la instrucción AAS, pero para la resta de dosnúmeros BCD.
� NEG (Negate Byte or Word). Causa que el operandoinvolucrado sea reemplazado por su valor negado. Laoperación se hace via el complemento a 2.
SUB Resta SUB D,SSBB Resta con "llevo" SBB D,SDEC Decrementar en 1 DEC DDAS Ajuste ASCII para Resta DASAAS Ajuste Decimal para resta AAS
NEG Negación NEG D
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 3. Instrucciones de multiplicación.
� MUL (Multiply Byte or Word Unsigned). Es una instrucciónbásica de multiplicación para números sin signo. Elmultiplicador fuente puede ser un byte o un word. Elmultiplicando destino será AL para una multiplicación de 8bits, o AX para una multiplicación de 16 bits.
(AX) � (AL) x (Multiplicador 8 bits)
Para multiplicaciones de 16 bits, el resultado está dado por:
(DX,AX) � (AX) x (Multiplicador 16 bits)
Donde AX contiene los 16 bits menos significativos, y DX los 16 bits
más significativos.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 3. Instrucciones de multiplicación.
� IMUL (Integer Multiply Byte or Word). Es la instrucción demultiplicación para números con signo. Opera de manerasimilar a la instrucción MUL.
� AAM (Adjust AX for Multiply). Esta Es una instrucción queprovee un ajuste para una multiplicación en BCD. Esta asumeque la instrucción anterior multiplicó 2 números BCD,produciendo un resultado en el registro AL.
MUL Multiplicar MUL SIMUL Multiplicar tomando en cuenta signo IMUL S
AAM Ajustar AX para multiplicación AAM
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 4. Instrucciones de división.
� DIV (Divide Byte or Word Unsigned). Es una instrucciónbásica de división para números sin signo. Solo se especificael operando fuente, ya que el dividendo es el registro AX paraoperaciones de 16 bits, o el contenido de DX y AX paraoperaciones de 32 bits.
(AH, AL) � (AX) / (Divisor 8 bits)
Donde AH contiene el residuo, y AL el cociente.
(DX),(AX) � (DX, AX) / (Divisor 16 bits)
Donde DX contiene el residuo, y AX el cociente.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 4. Instrucciones de división.
� IDIV (Integer Divide Byte or Word). Es la instrucción dedivisión para números con signo. Opera de manera similar a lainstrucción DIV.
� AAD (Adjust AX for Division). Esta Es una instrucción queprovee un ajuste para una división en BCD. Esta asume quelos registros AH y AL contienen números BCD.
� CBW (Convert Byte to Word). Cuando se hace una divisiónde 8 bits a través del registro AL, se debe extender el signodel dividendo llenando los bits del registro AH. Si el número espositivo, AH se llena de 0’s, mientras que si es negativo, AHse llena de 1’s. En la ejecución de la instrucción CBW, serealiza esta conversión de manera automática.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Aritméticas. 4. Instrucciones de división.
� CWD (Convert Word to Double Word). De manera similar,cuando se realiza una division del registro AX entre un divisorde16 bits, se debe extender el signo de AX en los 16 bits delregistro DX.
DIV División DIV SIDIV División tomando en cuenta signo IDIV SAAD Ajustar AX para división AADCBW Convertir byte a word CBW
CWD Convertir word a double word CWD
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Lógicas.
Este grupo de instrucciones sirven para realizar sus
respectivas operaciones lógicas bit a bit en los operandos
específicos de fuente y destino. El resultado siempre es
colocado en el operando destino.
� AND. Realiza la operación lógica AND.
� OR. Realiza la operación lógica OR.
� XOR. Realiza la operación lógica XOR.
� NOT. Realiza la negación lógica.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones Lógicas.
AND AND Lógica AND D,S
OR OR Lógica OR D, S
XOR XOR Lógica XOR D,S
NOT NOT Lógica NOT D
Nemónico Significado Formato
Registro Registro
Registro Memoria
Memoria Registro
Registro Número
Memoria Número
Acumulador Número
Destino Fuente
Para las Instrucciones
AND, OR, XOR
Registro
Memoria
Destino
Para la Instrucción
NOT
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Desplazamiento.
Existen 4 instrucciones de desplazamiento que pueden
ejecutar dos tipos básicos de operaciones:
� Desplazamiento Aritmético.
� Desplazamiento Lógico.
Estos dos tipos de desplazamiento pueden ser hacia la
derecha o hacia la izquierda.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Desplazamiento.
� SHL (Shift Logical Left). Esta causa el desplazamiento delregistro destino hacia la izquierda en el número de posicionesespecificadas. Los espacios de bits menos significativos sonreemplazados con 0’s, mientras que se guarda en el carry flagel último bit desplazado. Si el desplazamiento es 1 posición,se puede colocar el número 1 directamente. Si es más, elnúmero de posiciones se especifica con el registro CL.
� SAL (Shift Arithmetic Left). Esta causa el desplazamientodel registro destino hacia la izquierda en el número deposiciones especificadas. Los espacios de bits menossignificativos son reemplazados con 0’s.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Desplazamiento.
� SHR (Shift Logical Right). Esta causa el desplazamiento delregistro destino hacia la derecha en el número de posicionesespecificadas. Los espacios de bits más significativos sonreemplazados con 0’s, mientras que se guarda en el carry flagel último bit desplazado. Si el desplazamiento es 1 posición,se puede colocar el número 1 directamente. Si es más, elnúmero de posiciones se especifica con el registro CL.
� SAR (Shift Arithmetic Right). Esta causa el desplazamientodel registro destino hacia la derecha en el número deposiciones especificadas. Los espacios de bits mássignificativos se mantienen con sus valores originales.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Desplazamiento.
SHL Desplazamiento Lógico hacia la izquierda SHL D,#
SAL Desplazamiento Aritmético hacia la izquierda SAL D,#
SHR Desplazamiento Lógico hacia la derecha SHR D,#
SAR Desplazamiento Aritmético hacia la derecha SAR D,#
Nemónico Significado Formato
Registro 1
Registro CL
Memoria 1
Memoria CL
Destino #
Instrucciones de
Desplazamiento
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Rotación.
Este grupo de instrucciones es similar a las de
desplazamiento. Su diferencia radica en el hecho de que
los bits desplazados no se pierden, sino que pasan a
rellenar los espacios creados al momento de la rotación.
La rotación puede ser hacia la derecha o hacia la
izquierda.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Rotación.
� ROL (Rotate Left). Esta causa la rotación del destino hacia laizquierda en el número de posiciones especificadas. Cada bitmás significativo en la extrema izquierda desplazado pasa allenar el espacio disponible del bit menos significativo a laextrema derecha.
� ROR (Rotate Right). Esta causa la rotación del destino haciala derecha en el número de posiciones especificadas. Cada bitmenos significativo en la extrema derecha desplazado pasa allenar el espacio disponible del bit más significativo a laextrema izquierda.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Rotación.
� RCL (Rotate Left through Carry). Trabaja de manera igual ala instrucción ROL, excepto que la rotación se haceincluyendo el carry flag.
� RCR (Rotate Right through Carry). Trabaja de manera iguala la instrucción ROR, excepto que la rotación se haceincluyendo el carry flag.
ROL Rotación hacia la izquierda ROL D,#
ROR Rotación hacia la derecha ROR D,#
RCL Rotación hacia la izquierda a través del carry RCL D,#
RCR Rotación hacia la derecha a través del carry RCR D,#
Nemónico Significado Formato
Registro, Memoria 1
Registro, Memoria CL
Destino #
Instrucciones de Rotación
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Control de Flag.
� LAHF (Load AH from flags). Se usa para leer los flags yenviar el resultado al registro AH.
� SAHF (Store AH into flags). Se usa para cambiar los flagscon el valor establecido en el registro AH.
� CLC (Clear Carry Flag). Manda un 0 lógico al flag del carry.
� STC (Set Carry Flag). Manda un 1 lógico al flag del carry.
� CMC (Complement Carry Flag). Complementa el valor delflag del carry.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Control de Flag.
� CLI (Clear Interrupt Flag). Manda un 0 lógico al flag deinterrupciones. Esto inhabilita la generación de interrupciones.
� STI (Set Interrupt Flag). Manda un 1 lógico al flag deinterrupciones. Esto permite al procesador aceptarinterrupciones que se generen.
LAHF Cargar AH con los flags. LAHF
SAHF Escribir en los flags desde AH. SAHF
CLC Limpiar el flag del carry. CLC
STC Setear el flag del carry. STC
CMC Complementar el flag del carry. CMC
CLI Limpiar el flag de interrupciones. CLI
STI Setear el flag de interrupciones. STI
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucción de Comparación.
La instrucción de comparación permite determinar la relacionentre dos números, para saber si son iguales, si uno es mayor omenor al otro, etc.
� CMP (Compare). Compara el valor de dos números quepueden ser de 8 bits o de 16 bits.
CMP Comparar CMP D,S
Nemónico Significado Formato
Registro Registro
Registro Memoria
Memoria Registro
Registro Inmediato
Memoria Inmediato
Acumulador Inmediato
Destino Fuente
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Salto.
Existen dos tipos de instrucciones de salto:
� Las de salto incondicional: el salto ocurreindependientemente de las condiciones existentes. Estosignifica que la instrucción se ejecuta y el salto es llevado acabo, cambiando la secuencia del programa.
� Las de salto condicional: las condiciones existentesdeterminan si el salto debe o no debe ocurrir. Si se cumplenlas condiciones establecidas, el salto es llevado a cabo; de locontrario, la ejecución del programa continúa con la próximainstrucción en la secuencia del programa.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Salto.1. Salto Incondicional.
Hay dos tipos de básicos de salto incondicional. El primero es elIntrasegment Jump, que se limita a direcciones comprendidasdentro del Segmento de Código actual. El segundo es elIntersegment Jump, que permite el salto desde un Segmentode Código a otro.
� JMP (Jump). Cuando se ejecuta, se carga el IP con un valorque combinado con el CS determina la dirección de la próximainstrucción que debe ejecutarse.
JMP Salto Incondicional JMP Operando
Nemónico Significado Formato
Label
Mem 16
Reg 16
Mem 32
Operando
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Salto.2. Salto Condicional.
Estas son las instrucciones de salto condicional:
Jcc Salto Condicional Jcc Operando
Nemónico Significado Formato
JA Por encima de
JAE Por encima o igual a
JB Por debajo de
JBE Por debajo o igual a
JC Carry
JCXZ El Registro CX es cero
JE Igual
JG Mayor
JGE Mayor o Igual
JL Menor
JLE Menor o Igual
JNA No por encima de
JNAE No por encima ni igual a
JNB No por debajo de
JNBE No por debajo ni igual a
JNC No Carry
Nemónico Significado
JNE No Igual
JNG No Mayor
JNGE No Mayor ni Igual
JNL No Menor
JNLE No Menor ni Igual
JNO No Overflow
JNP No Paridad
JNS No Signo
JNZ No Cero
JO Overflow
JP Paridad
JPE Paridad Par
JPO Paridad Impar
JS Signo
JZ Cero
Nemónico Significado
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Manejo de Subrutinas.
Una subrutina es un segmento especial de programa que puedeser invocado para su ejecución desde cualquier punto delprograma principal.
Para el manejo de subrutinas se tienen las siguientesinstrucciones:
� CALL (Subroutine Call). Es usada para invocar la ejecuciónde la subrutina especificada en el operando.
� RET (Return). Es necesaria para retornar el control de vueltahacia el programa principal luego de la ejecución de lasubrutina.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Manejo de Subrutinas.
CALL Llamado de Subrutina CALL Operando
La ejecución del programa
continúa en la dirección de la
subrutina especificada en el
operando. Debe guardarse
cierta información del
programa principal, como el
IP y en algunos casos el CS.
RET Retorno desde Subrutina RET
Retorna al programa
principal restaurando el IP y
el CS en caso de ser
necesario.
Nemónico Significado OperaciónFormato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones PUSH y POP.
Al invocar la ejecución de una subrutina, es necesario salvar elcontenido de algunos registros o parámetros del programaprincipal. Esto puede lograrse cargándolos en el Stack Segment.
Para esto se tienen las siguientes instrucciones:
� PUSH (Push into the Stack). Es usada para salvarparámetros en el Stack.
� POP (Pop from the Stack). Es usada para recuperarparámetros desde el Stack.
PUSH Salvar Word en el Stack PUSH S
POP Recuperar Word desde el Stack POP D
PUSHF Salvar flags en el Stack PUSHF
POPF Recuperar flags desde el Stack POPF
Nemónico Significado Formato
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Manejo de Loops.
Existen 3 instrucciones dedicadas a la implementación de loops:
� LOOP (Loop). Trabaja tomando en cuenta el registro CX, elcual debe contener el número de veces que debe repetirse elloop. Cada vez que se ejecuta la instrucción, el contenido deCX se decrementa en uno (1) y se revisa para determinar si suvalor es cero (0). Cuando CX es cero se completa el loop y seejecuta la instrucción que sigue de manera secuencial a esta.Mientras CX no es cero, el programa ejecuta la instrucciónque contiene el label especificado en la instrucción LOOP.
� LOOPE/LOOPZ (Loop while equal / Loop while zero). Seejecuta de manera similar a la instrucción LOOP, pero revisaademás otra condición: el flag de cero (ZF). El loop terminarácuando CX sea cero ó ZF sea cero.
ITT-327. Unidad III: Lenguaje de Programación
Ensamblador. Profesor Julio Ferreira.
Instrucciones de Manejo de Loops.
� LOOPNE/LOOPNZ (Loop while not equal / Loop while notzero). Se ejecuta de manera similar a la instrucciónLOOPE/LOOPZ. El loop terminará cuando CX sea cero (0) óZF sea uno (1).
LOOP Loop LOOP Label
LOOPE/LOOPZ Loop mientras hasta que sea igual o sea cero LOOPE/LOOPZ Label
LOOPNE/LOOPNZ Loop mientras sea igual o sea cero LOOPNE/LOOPNZ Label
Nemónico Significado Formato