itt-327-t unidad iiiwebapp.pucmm.edu.do/websise/estudiante/materias... · itt-327. unidad iii:...

40
ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. ITT-327-T Microprocesadores Lenguaje de Programación Ensamblador.

Upload: others

Post on 21-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

ITT-327. Unidad III: Lenguaje de Programación

Ensamblador. Profesor Julio Ferreira.

ITT-327-T

Microprocesadores

Lenguaje de Programación

Ensamblador.

Page 2: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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:

Page 3: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 4: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 5: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 6: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 7: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 8: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 9: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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:

Page 10: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 11: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 12: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 13: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 14: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 15: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 16: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 17: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 18: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 19: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 20: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 21: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 22: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 23: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 24: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 25: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 26: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 27: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 28: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 29: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 30: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 31: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 32: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 33: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 34: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 35: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 36: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 37: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 38: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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

Page 39: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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.

Page 40: ITT-327-T Unidad IIIwebapp.pucmm.edu.do/WebSISE/Estudiante/materias... · ITT-327. Unidad III: Lenguaje de Programación Ensamblador. Profesor Julio Ferreira. Instrucciones de Transferencia

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