Sei sulla pagina 1di 15

Modos de direccionamiento e instrucciones aritméticas, introducción

a los microprocesadores 1

UNIVERSIDAD FRANCISCO GAVIDIA

FACULTAD DE INGENIERIA Y SISTEMAS

INTRODUCCION A LOS MICROPROCESADORES

FECHA DE LA PRACTICA: jueves 20 de septiembre de 2018

INTEGRANTES: Cesar David Domínguez Valladares DV100314

David Amílcar Peraza Flores PF100713

MESA: 03

GRUPO: 02
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 2

Modos de direccionamiento e instrucciones


aritmé ticas.

Marco teórico.

Los modos de direccionamiento básicamente se suelen utilizar en el manipuleo de datos ya sea de


naturaleza binaria, decimal y hexadecimal. Los modos de direccionamiento se auxilian de los registros
de 8,16 y 32 bits asociados a la CPU que se utilizara para programar un código en ensamblador. Esto
nos hace recordar que para ciertos microprocesadores solo tendremos acceso a ciertos registros en
función del emulador. En el caso del emulador EMU8086 solo tenemos disponibles registros de 16 bits
así que eso restringe el tipo de datos a manipular.

Objetivo general:

Conocer las distintas directivas de programación para los distintos modos de direccionamiento
disponibles para los microprocesadores Intel.

Objetivos específicos:

Conocer cómo opera el direccionamiento por registros y como afecta el bit de bandera Carry
en una operación aritmética de tipo suma o adición.
Identificar las sentencias de programación que correspondan a un direccionamiento directo y
las banderas que se afecten en una operación aritmética de tipo resta o sustracción.
Combinar el direccionamiento indirecto por registro y el direccionamiento directo por datos
para la lectura de datos en memoria y efectuar la operación aritmética multiplicación.
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 3

DIRECCIONAMIENTO POR REGISTROS.

Este modo de direccionamiento es el más común para direccionar datos, además de ser el más fácil
de aplicar cuando ya se tienen claros los registros disponibles según el microprocesador a utilizar.
Digite el siguiente código seleccionando la opción nuevo archivo de tipo .COM y que el código inicie
desde la posición de memoria 100H.

a) antes de ejecutar el código anterior rellene la siguiente tabla donde se muestran los estados
iniciales de los bits de bandera:
CF ZF SF OF PF AF IF DF
0 0 0 0 0 0 1 0

b) luego de ejecutar el código y llegar hasta la sentencia “ret” vuelva a rellenar la tabla de los
bits de bandera:
CF ZF SF OF PF AF IF DF
1 1 0 0 1 1 0 0
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 4

c) investigue como opera la directiva de programación “ADD”, luego explique


cuales bits de bandera se activan después de ejecutar el programa anterior y detalle
porque quedan activados.

La instrucción ADD realiza la suma de dos operandos, respectivamente, y guarda el resultado en


el primero de ellos. Admite todos los tipos de direccionamiento (excepto que ambos operando
estén en memoria).

Su sintaxis puede ser:


ADD reg, reg
ADD mem, reg
ADD reg, mem
ADD reg, inmediato
ADD mem, inmediato

Al ejecutar el programa anterior, se activaron las siguientes banderas:

“Carry Flag” (CF, Bit de acarreo):


Durante la instrucción ADD AX, BX, se efectúa la suma entre FFFEh y 0002h, cuyo su resultado es
10000h y el cual se almacena en el registro AX. Sin embargo, esta operación implica un acarreo
de 1 para obtener el número resultante, lo cual es reflejado al activarse esta bandera.

“Zero Flag” (ZF, Indicador de cero):


Esta bandera se activa debido a que, al final de la operación de suma, hubo dígitos del registro AX
que se cambiaron a 0 (Cambio de FFFEh a 10000h, surgiendo 4 ceros en el resultado guardado en
AX).

“Parity Flag” (PF, Indicador de paridad):


Esta bandera se activa debido a que, al final de la operación de suma, si bien es cierto el resultado
fue 10000h, en el registro AX únicamente se guardaron los últimos 4 dígitos significativos del valor
hexadecimal (0000h, un valor de cero), lo cual el microprocesador incluye también como un
número “par” de bits en 1.

“Auxiliary Flag” (AF, Acarreo Auxiliar):


Esta bandera se activa debido a que el resultado de la operación de suma implicó un acarreo de
1 en el bit 3.
(FFFEh, cuyo valor menos significativo es Eh = 1110b. Al sumar Eh +2h = 10h, en binario es 10000b,
implicando un acarreo en el bit 3)
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 5

DIRECCIONAMIENTO POR REGISTROS.


Este tipo de direccionamiento implica que los datos son direccionados en el mismo
momento en el que se ejecuta el código de operación hexadecimal en la memoria. Hay dos tipos de
datos que se pueden direccionar de manera inmediata: los datos constantes y los datos variables. Los
datos constantes son aquellos que se copian de manera directa en el registro y los datos variables son
aquellos que se transfieren desde un registro a una posición de memoria. Digite el siguiente código
seleccionando la opción nuevo archivo de tipo .COM y que el código inicie desde la posición de
memoria 100H.

a) antes de ejecutar el código anterior rellene la siguiente tabla donde se muestran los estados
iniciales de los bits de bandera:
CF ZF SF OF PF AF IF DF
0 0 0 0 0 0 1 0

b) luego de ejecutar el código y llegar hasta la sentencia “ret” vuelva a rellenar la tabla de los
bits de bandera:
CF ZF SF OF PF AF IF DF
1 0 1 0 1 1 0 0
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 6

c) investigue como opera la directiva de programación “SUB”, luego explique


cuales bits de bandera se activan después de ejecutar el programa anterior y detalle
porque quedan activados.

La instrucción SUB realiza la resta de dos operandos y guarda el resultado en el primero de ellos.
Admite todos los modos de direccionamiento, excepto dos operandos en memoria

Su sintaxis puede ser:


SUB reg, reg
SUB mem, reg
SUB reg, mem
SUB reg, inmediato
SUB mem, inmediato

Al ejecutar el programa anterior, se activaron las siguientes banderas:

“Carry Flag” (CF, Bit de acarreo):


Durante la instrucción SUB AX, DX, se efectúa la resta entre 1A1Bh y 2F2Eh, cuyo resultado se
almacena en el registro AX. Sin embargo, esto implica un acarreo de 1 durante algún punto de la
operación, lo cual es reflejado al activarse esta bandera.

“Sign Flag” (SF, Indicador de signo):


Esta bandera se activa debido a que el resultado de la operación de resta da un número negativo.

“Parity Flag” (PF, Indicador de paridad):


Esta bandera se activa debido a que el resultado de la operación contiene un número par de bits
en su representación como número binario.

Al hacer la resta 1A1Bh – 2F2Eh, su resultado es un número negativo FFFFFFFFFFFFEAEDh (Sus 4


últimos dígitos quedan registrados en AX = EAEDh), sin embargo, este numero se representa con
su complemento a 2, por lo cual al realizar una operación NOT y sumarle 1, este resultado se
puede expresar como 1513h = 1010100010011b, en el cual se puede ver claramente que tiene 6
bits en 1.

“Auxiliary Flag” (AF, Acarreo Auxiliar):


Esta bandera se activa debido a que el resultado de la operación de resta implicó un acarreo de 1
en el bit 3.
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 7

DIRECCIONAMIENTO POR DESPLAZAMIENTO.

Este modo de direccionamiento es bastante similar al direccionamiento directo. La estructura de la


programación de este direccionamiento es la siguiente: “mov CL, DS:[1234H];

En esta instrucción se entiende que se copia en CL el contenido tipo byte de la dirección de memoria
1234H del segmento de datos. En este modo de direccionamiento es usual el uso del DS ya que en
este registro se almacenan datos. Eso no implica que no se pueda utilizar otro registro de tipo
segmento. Digite el siguiente código utilizando la plantilla de programación .COM y partiendo desde
el origen de memoria 100H.

a) antes de ejecutar el código anterior rellene la siguiente tabla donde se muestran los estados
iniciales de los bits de bandera:
CF ZF SF OF PF AF IF DF
0 0 0 0 0 0 1 0
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 8

b) luego de ejecutar el código y llegar hasta la sentencia “ret” vuelva a rellenar la


tabla de los bits de bandera:
CF ZF SF OF PF AF IF DF
1 0 0 1 0 0 0 0

c) investigue como opera la directiva de programación “MUL”, luego explique cuales bits de
bandera se activan después de ejecutar el programa anterior y detalle porque quedan activados.

La instrucción MUL realiza la multiplicación de contenido de AX y del operando indicado,


guardando el resultado en AX, para operaciones de 8 bits y en DX:AX para operaciones de 16 bits.

Su sintaxis puede ser:


MUL reg
MUL mem

Al ejecutar el programa anterior, se activaron las siguientes banderas:

“Carry Flag” (CF, Bit de acarreo):


Durante la instrucción MUL CX, se efectúa la multiplicación entre 9090h y 9090h (valores
previamente establecidos para las direcciones de memoria DS: [BX] y DS: [BX+2]), cuyo resultado
es 51A25100h almacenado en la combinación de registros DX:AX. Sin embargo, esta operación
implica un acarreo para obtener el número resultante, lo cual es reflejado al activarse esta
bandera.

“Overflow Flag” (OF, Indicador de desbordamiento):


Esta bandera se activa debido a que el resultado excede los 16 bits (51A25100h, 32 bits de
resultado) para ser almacenados en el registro AX. Es por esto que esta instrucción incluye
también al registro DX en su resultado para el caso que se operen datos de 16 bits.
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 9

Asignaciones.

1. Investigue como colocar a cero los bits de bandera afectados por una operación aritmética.

Con el conjunto de instrucciones PUSH y POPF es posible alterar los valores de los bits relacionados
al registro de estados del microprocesador 8086, el cual contiene todas las banderas indicadoras
que se ven modificadas mediante las operaciones aritméticas / lógicas que se ejecutan en los
programas.

Por ejemplo, con las siguientes líneas de código podemos colocar a cero los bits de las banderas:

MOV AX, 0 ; Pone a cero el registro AX


PUSH AX ; Transfiere el valor de AX (cero) a pila del microprocesador.
POPF ; Transfiere el valor de pila del microprocesador hacia el registro de
; estados. Como el valor “desapilado” es (cero), pone todos los bits de bandera en
; cero.

2. Investigue cómo funcionan las distintas palabras reservadas para realizar operaciones aritméticas
en el ensamblador.

Las instrucciones que realizan operaciones aritméticas en el microprocesador 8086 son: ADD, ADC,
DAA, AAA, SUB, SBB, DAS, AAS, NEG, MUL, IMUL, AAM, DIV, IDIV, AAD, CBW, CWB, INC, DEC.

Anteriormente se explicó como funcionan las instrucciones ADD, SUB y MUL, a continuación, se
describe el funcionamiento del resto de operaciones aritméticas:

 DAA realiza la corrección BCD empaquetado del resultado de una suma en AL.

El 8086/88 realiza las sumas asumiendo que los operados son ambos valores binarios, de
manera que se suman dos valores codificados en BCD empaquetado el resultado puede no ser
un valor válido en este formato:

Esta instrucción si AF = 1 o el valor de los 4 bits menos significativos del AL es mayor que 9,
entonces realiza el primer ajuste BCD. Para ello suma a AL el valor 06h.
Después si CF = 1 o el valor de los 4 bits más significativos de AL es mayor que 9, realizar el
segundo ajuste BCD. Para ello suma a AL el valor 60h
Esta instrucción afecta también a los bits OF, SF, ZF, AF y PF del registro de estado.
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 1
0

 AAA realiza lo mismo que DAA para números BCD desempaquetados.

 DAS realiza la corrección BCD empaquetado del resultado de una resta en AL. Actúan de
manera similar a la instrucción de ajuste de la suma.

 AAS realiza lo mismo que DAS para números BCD desempaquetados.

 NEG realiza la operación aritmética de negado de un operando y guarda el resultado en el


mismo operando. Admite todos los tipos de direccionamiento, excepto inmediato.

NEG reg
NEG mem

La operación que realiza es: 0 – operando.


Afecta a todos lo bits del registro de estado, poniendo el bit AF a 1.

 AAM convierte AL en binario a AH:AL en BCD desempaquetado.

 DIV e IDIV realizan la división y la división con signo, respectivamente. De AX entre el operando
para operaciones de 8 bits, guardando el cociente en AL y el resto en AH; y DX:AX entre el
operando para operaciones de 16 bits guardando el cociente en AX y el resto en DX.

DIV/IDIV reg
DIV/IDIV mem

 AAD convierte AH:AL en BCD desempaquetado a AL en binario.

 CBW y CWD realizan la extensión del bit de signo de byte a WORD y de WORD a DWORD,
actuando sobre AX y DX:AX, respectivamente.

 INC y DEC realizan las operaciones de incremento y decremento, respectivamente, de un


operando, guardando el resultado en el mismo operando. Admiten todos los modos de
direccionamiento excepto el inmediato.

INC/DEC reg
INC/DEV mem

Afectan a todos los bits de estado del registro de estado.


Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 1
1

3. Diseñe un código en ensamblador que realice las cuatro operaciones aritméticas


básicas. Guarde los números en el segmento de datos partiendo desde la posición de
memoria 0x120. Antes de cada operación los registros se deben de colocar a cero. Se deben de
recuperar los datos almacenados en el segmento de datos por medio de direccionamiento
indirecto por registro o por desplazamiento. Registre por medio de tablas como se afectan cada
bit de bandera para cada operación. Antes de cada operación coloque a cero los bits de bandera.

ORG 200h

MOV BX, 0120h ;Se copia en el registro BX


;la direccion de memoria
;a utilizar para extraer datos
;a operar.

MOV DS:[BX], 1A1Bh ;Se guardan valores en segmento de


MOV DS:[BX+2], 2F2Eh ;datos del microprocesador.
MOV DS:[BX+4], 00h

PUSH DS:[BX+4] ;Se reinician los valores de banderas


POPF

;OPERACION DE SUMA

MOV AX, 0 ;Colocamos a cero registros AX, CX


MOV CX, 0 ;y DX
MOV DX, 0

MOV AX, DS:[BX] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

MOV CX, DS:[BX+2] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

ADD AX, CX ;Se suman los registros AX y CX


;y guarda el resultado en AX.

PUSH DS:[BX+4] ;Se reinician los valores de banderas


POPF
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 1
2

;OPERACION DE RESTA

MOV AX, 0 ;Colocamos a cero registros AX, CX


MOV CX, 0 ;y DX
MOV DX, 0

MOV AX, DS:[BX] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

MOV CX, DS:[BX+2] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

SUB AX, CX ;Se resta el registro CX de AX


;y guarda el resultado en AX.

PUSH DS:[BX+4] ;Se reinician los valores de banderas


POPF

;OPERACION DE MULTIPLICACION

MOV AX, 0 ;Colocamos a cero registros AX, CX


MOV CX, 0 ;y DX
MOV DX, 0

MOV AX, DS:[BX] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

MOV CX, DS:[BX+2] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

MUL CX ;Se multiplican los registros AX y CX


;y guarda el resultado en DX:AX.

PUSH DS:[BX+4] ;Se reinician los valores de banderas


POPF
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 1
3

;OPERACION DE DIVISION

MOV AX, 0 ;Colocamos a cero registros AX, CX


MOV CX, 0 ;y DX
MOV DX, 0

MOV AX, DS:[BX] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

MOV CX, DS:[BX+2] ;Se mueve el valor de memoria


;definido por DS:[BX] hacia el
;registro AX

DIV CX ;Se dividen el registros AX entre CX


;y guarda el resultado en DX:AX.

PUSH DS:[BX+4] ;Se reinician los valores de banderas


POPF

RET

Bits de Bandera después de ejecutar operación de suma


CF ZF SF OF PF AF IF DF
0 0 0 0 0 1 0 0

Bits de Bandera después de ejecutar operación de resta


CF ZF SF OF PF AF IF DF
1 0 1 0 1 1 0 0

Bits de Bandera después de ejecutar operación de multiplicación


CF ZF SF OF PF AF IF DF
1 0 0 1 0 0 0 0

Bits de Bandera después de ejecutar operación de división


CF ZF SF OF PF AF IF DF
0 0 0 0 0 0 0 0

4. Para cada uno de los códigos mostrados en la guía de taller modifique cada código para que
después de realizar cada operación aritmética se coloquen a cero cada bit de bandera.
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 1
4

Programa #1 modificado

org 100h

mov ax, 00H ;colocamos a cero ambos


mov bx, 00H ;registros

mov ax, 0FFFEH ;cargamos los numeros


mov bx, 02H ;para efectuar su suma

add ax, bx ;la instruccion ADD suma


;ambos numeros y deja el
;resultado en AX

mov cx, 00H ;colocamos a cero las banderas


push cx ;de estado.
popf

ret

Programa #2 modificado

org 100h

mov ax, 01A1BH ;direccionamiento inmediato


mov dx, 02F2EH ;cargando ax y bx en la
;operacion de codigo
mov cx, 000H;

add ax, dx ;sumamos ambos numeros

push cx ;colocamos a cero las banderas


popf ;de estado

mov ax, cx ;ponemos a cero ambos registros


mov dx, cx

mov ax, 01A1BH ;direccionamiento inmediato


mov dx, 02F2EH ;cargando ax y bx en la
;operacion de codigo

sub ax, dx ;restamos ambos numeros

push cx ;colocamos a cero las banderas


popf ;de estado

ret
Modos de direccionamiento e instrucciones aritméticas, introducción
a los microprocesadores 1
5

Programa #3 modificado

org 100h

mov bx, 0120H ;se copia en el registro


;bx la posible direccion
;de memoria a utilizar
;para recuperar los datos
;a operar

mov ax, ds:[bx] ;se utiliza direccionamiento por


mov cx, ds:[bx+2] ;desplazamiento combinado con
;registros

mul cx ;efectua la multiplicacion de los


;numeros y el resultado se almacena en
;dx

mov cx, 00H ;colocamos a cero las banderas


push cx ;de estado
popf

ret

Potrebbero piacerti anche