tp2.pdf
TRANSCRIPT
INGENIERÍA EN SISTEMAS DE INFORMACIÓN – 2013
ARQUITECTURA DE COMPUTADORAS
Ing. Juan Carlos Ansaldi
TRABAJO PRACTICO Nº 2 Operaciones - Complemento a la Base
1- Hallar el complemento al módulo a los siguientes números:
a) 099d
b) 056d
c) 999d
d) 900d
e) 0101b
f) 1010b
g) 0100 0000b
h) 0111 1111b
i) 1000 0000b
j) 1111 1111b
k) FFh
l) 01h
m) 7Fh
n) 80h
ñ) 81 h
o) 3Eh
2- a) En un formato de 8 bits (1 byte) cual es el menor y el mayor número que se pueden
representar. Expresarlos en decimal, binario y hexadecimal.
b) En un formato de 8 bit (1 byte) con bit de signo, representar el intervalo de números negativos y
positivos en decimal, binario y hexadecimal.
Menor (-) Mayor(-) 0 Menor (+) Mayor (+)
3- Realizar las siguientes operaciones de suma y resta en complemento a dos en formato binario de
8 bits.
Para cada caso indicar si hay acarreo y/o desbordamiento, y si el resultado es correcto o no, e
interpretar el mismo. En caso de dar resultado negativo, hallar la magnitud del mismo.
a) 19 + 92
b) 19 - 92
c) 127 + 1
d) - 128 -1
e) - 128 + 1
f) -128 - 128
g) -12 - 30
h) +127 - 62
i) -127 + 62
4- Realizar las operaciones del ejercicio anterior en hexadecimal con formato de dos dígitos
hexadecimales.
5- a) En un formato de 16 bits (2 bytes ó una palabra) cual es el menor y el mayor número que se
pueden representar. Expresarlos en decimal, binario y hexadecimal.
b) En un formato de 16 bits (2 bytes ó una palabra) con bit de signo, representar el intervalo de
números negativos y positivos en decimal, binario y hexadecimal.
Menor (-) Mayor(-) 0 Menor (+) Mayor (+)
6) Realizar las siguientes operaciones algebraicas en formato de 16 bits (una palabra) con bit de
signo.
Expresar si hay acarreo, desbordamiento y como se debe interpretar el resultado. En caso de dar
resultado negativo, hallar la magnitud del mismo.
a) FFB4h + 4Ch
b) FFFFh + FFFFh
c) 7FFFh + 0001h
d) 7FFFh + 8000h
e) 8000h + 0001h
f) 8000h +8000h
g) 00A1 + D001
h) 532A + EE01
i) EBC0 + F321
j) 0A13 + 1A03
7) Realizar los ejercicios 3 (tres) y 6 (seis) utilizando el Debug.
INGENIERÍA EN SISTEMAS DE INFORMACIÓN – 2013
ARQUITECTURA DE COMPUTADORAS
Ing. Juan Carlos Ansaldi
Las operaciones de ambos ejercicios se deben tratar como sumas (siempre utilizar la instrucción
ADD). Para el caso del ejercicio 3 (tres) las restas pasarlas a sumas hallando el complemento del
número negativo.
Copiar y pegar los resultados en un procesador de texto como se indica en el siguiente ejemplo:
AX=0013BX=005CCX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=11F5ES=11F5SS=11F5CS=11F5IP=0100 NV UP EI PL ZR NA PE NC
11F5:0100 00D8 ADD AL,BL
-T
AX=006FBX=005CCX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=11F5ES=11F5SS=11F5CS=11F5IP=0102 NV UP EI PL NZ NA PE NC
Utilización del "DEBUG" para Visualizar Operaciones a Nivel del
Microprocesador.
Introducción:
El programa "Debug" del DOS se utiliza para la depuración de programas, pues permite ejecutar
un programa instrucción a instrucción y observar como funciona y que valores toman los distintos
registros del microprocesador.
Registros de la familia del 8086:
El microprocesador 8086 se compone de catorce registros de una palabra (16 bits)
Cuatro registros de datos de almacenamiento temporal:
AX: Acumulador. Registro principal utilizado para instrucciones aritméticas.
BX: Base. Se utiliza para indicar un desplazamiento (offset).
CX: Contador. Se utiliza como contador de bucles y en operaciones de tipo repetitivo.
DX: Dato. Se utiliza también en operaciones aritméticas.
Los registros de almacenamiento temporal del 8086, cuya longitud es de una palabra, se pueden
dividir en dos bytes, conocidos como byte alto y byte bajo, indicandose por medio de la letra H el
byte alto y de la letra L el byte bajo, de esta manera, el acumulador lo podemos representar de la
siguiente manera: AX
AH AL
Lo mismo es válido para los registros: BX, CX y DX.
Cuatro registros de segmentos:
Contienen la dirección de comienzo de ciertos segmentos de memoria.
CS: Registro de segmento de código (Code Segment)
DS: Registro de segmento de datos (Data Segment)
SS: Registro de segmento de pila (Stack Segment)
ES: Registro de segmento extra (Extra Segment)
Dos registros punteros de pila:
SP: Puntero de la pila (Stack Pointer)
BP: Puntero base (Base Pointer)
Dos registros índice:
INGENIERÍA EN SISTEMAS DE INFORMACIÓN – 2013
ARQUITECTURA DE COMPUTADORAS
Ing. Juan Carlos Ansaldi
SI: Indice fuente (Source Index)
DI: Indice destino (Destination Index)
Un registro puntero de instrucciones:
IP: Puntero de instrucción o contador del programa (Instruction Pointer)
Este registro contiene el desplazamiento de la siguiente instrucción a ejecutar respecto al segmento
de código del programa en ejecución.
En conjunción con el registro CS, indica la dirección completa de la siguiente instrucción a
ejecutar, CS:IP.
Un registro de estado o banderas (Flags)
Cada flags es un bit y se utiliza para registrar la información de estado y de control de las
operaciones del microprocesador. Hay nueve (9) Flags, los restantes siete (7) bits no se usan.
Seis flags de estado:
CF (Carry Flag): Bandera de acarreo.
OF (Overflow Flag): Bandera de desbordamiento.
ZF (Zero Flag) : Bandera de resultado cero.
SF (Sign Flag): Bandera de signo.
PF (Parity Flag): Bandera de paridad.
AF (Aauxiliar Flag): Bandera auxiliar.
Tres flags de control:
DF (Direcction Flag) : Bandera de dirección.
IF (Interrup Flag): Bandera de interrupciones.
TF (Trag Flag): Bandera de atrape o modo de ejecución paso a paso.
Segmentos, registros asociados, direcciones
El direccionamiento de memoria se realiza por una dirección "segmentada" en la que se utilizan
dos registros:
Segmento Desplazamiento (Offset)
De manera que una dirección completa será: Segmento:Desplazamiento.
Un programa cuenta de cuatro tipo de segmentos:
Segmento de código: Cada instrucción se direcciona mediante:
Registro de Segmento: CS
Registro de Desplazamiento: IP
Segmento de datos: Los datos se direccionan mediante:
Registro de Segmento: DS
Registro de Desplazamiento: BX, SI o DI
Segmento de pila: La pila se direcciona mediante:
Registro de Segmento: SS
Registro de Desplazamiento: SP o BP
Segmento extra: Igual al de datos, sustituyendo DS por Es:
Registro de Segmento: ES
Registro de Desplazamiento: BX, SI o DI
INGENIERÍA EN SISTEMAS DE INFORMACIÓN – 2013
ARQUITECTURA DE COMPUTADORAS
Ing. Juan Carlos Ansaldi
CÁLCULOS UTILIZANDO "DEBUG"
Utilizaremos los registros del microprocesador como variables y realizaremos con ellos distintas
operaciones, observando los resultados y el registro de estado. Se debe tener en cuenta que la
representación de los cálculos binarios del 8086 son expresados por "debug" como números
hexadecimales. Al ejecutar el programa DEBUG este nos presentar su indicador: -
Escribiendo el comando R (Register) Registro, nos mostrará el contenido de todos los registros.
a) Binarios de 8 bit, un byte (dos dígitos hexadecimales)
Para realizar la aritmética de 8 bits utilizando el debug, se debe recordar que los registros
temporales o de uso general AX, BX, CX y DX se pueden dividir en dos bytes, de esta manera,
quedan: AX= AH:AL, BX=BH:BL; CX=CH:CL; DX=DH;DL.
Suma de dos bytes
Si queremos sumar dos bytes, podemos ingresarlos en AL y BL, y luego el resultado se guardará
en AL. Los pasos a seguir son:
1. Introducimos el primero en AL por medio del comando R AX, teniendo en cuenta que el primer
byte (los dos primeros dígitos hexadecimales) se deben poner en cero.
2. Introducimos el segundo en BL por medio del comando R BX, con la misma consideración que
en el caso anterior.
3. Introducimos la instrucción de suma ADD AL, BL (código Hexa: 00 D8) en la dirección
0100h por medio del comando E 0100 (escribir en posición XXXXh).
4. Ejecutamos el código por medio del comando T (Trace) Ejecutar.
5. El resultado de la operación se observa en el registro AL.
Ejemplo 1)
Sumar los siguientes bytes y observar que pasa con el registro de estado.
3Ah + 09Ah FFh + 03h
70h + 3Ah FFh + 01h
Practicar con distintos pares de bytes.
Resta de dos bytes
La instrucción de resta es SUB AL, BL (Código Hexa: 28 D8). Los pasos a seguir son similares al
punto anterior, modificando el código de la operación.
Ejemplo 2)
Restar los siguientes bytes y observar que pasa con el registro de estado.
3Ah - 9Ah 00h - 01h FFh - FFh
70h - 80h FFh - 02h
Practicar con distintos pares de números.
b) Binarios de 16 bit, una palabra (cuatro dígitos hexadecimales)
Suma de dos números:
1. Introducimos el primero en AX por medio del comando R AX
2. Introducimos el segundo en BX por medio del comando R BX
3. Introducimos la instrucción de suma ADD AX, BX (código Hexa: 01 D8) en la dirección
0100h por medio del comando E 0100 (escribir en posición XXXXh).
4. Ejecutamos el código por medio del comando T (Trace) Ejecutar.
5. El resultado de la operación se observa en el registro AX.
Ejemplo 3)
Sumar los siguientes números y observar que pasa con el registro de estado.
INGENIERÍA EN SISTEMAS DE INFORMACIÓN – 2013
ARQUITECTURA DE COMPUTADORAS
Ing. Juan Carlos Ansaldi
03A7h + 092Ah FFFFh + 0002h
7000h + 6000h FFFFh + 0001h
Practicar con distintos pares de números.
Resta de dos números:
La instrucción de resta es SUB AX, BX (Código Hexa: 29 D8). La instrucción de resta es SUB
AL, BL (Código Hexa: 28 D8). Los pasos a seguir son similares al punto anterior, modificando el
código de la operación.
Ejemplo 4)
Restar los siguientes números y observar que pasa con el registro de estado.
03A7h - 092Ah 0000h - 0001h FFFFh - FFFFh
7000h - 8000h FFFFh - 0002h
Practicar con distintos pares de números.
Multiplicación de dos números:
La instrucción de multiplicación es MUL BX (Código Hexa: F7 E3)
El resultado se guarda en el par de registros DX: AX
Ejemplo 5)
Multiplicar los siguientes números y observar que pasa con el registro de estado.
7C4Bh * 0100h 0002h * 0000h
7000h * 8000h 1FFFh * EFFFh
FFFFh * FFFFh Practicar con distintos pares de números.
División de dos números:
La instrucción de división es DIV BX (Código Hexa: F7 F3)
El dividendo se guarda en el par de registros DX:AX
El resultado se guarda en el registro AX y el resto en DX
Ejemplo 6)
Dividir los siguientes números:
7C4B12 / 100 FFFFFFFF / 100
E400/ 10 Practicar con distintos pares de números.
Visualización de los Flags utilizando el Debug
El Debug muestra 8 flags por medio de un código de dos letras, el cual indica la condición en que
el mismo se encuentra. Para visualizar los flags, se debe escribir: RF
A continuación se detalla por medio de una tabla, los estados que pueden asumir las banderas.
Flags ( Banderas) Set Clear
OF Overflow (Si/No) OV NV
DF Direcction (Decrem/Increm) DN UP
IF Interrup (Hab/Desab) EI DI
SF Sign (Negat./Posit) NG PL
ZF Zero (Si/No) ZR NZ
AF Auxiliar (Si/No) AC NA
PF Parity (Even/Odd) PE PO
CF Carry (Si/No) CY NC
INGENIERÍA EN SISTEMAS DE INFORMACIÓN – 2013
ARQUITECTURA DE COMPUTADORAS
Ing. Juan Carlos Ansaldi
Sintaxis de Debug
DEBUG [[unidad:][ruta]archivo [archivoprueba-parámetros]]
[unidad:][ruta]archivo Especifica el archivo que desea comprobar.
archivoprueba-parámetros Especifica la información de línea de comandos
requerida por el archivo a comprobar.
Comandos de Debug
Comando Sintaxis
ensamblar A [dirección]
comparar C intervalo de direcciones
volcar D [intervalo]
introducir E dirección [lista]
llenar F lista de rango
ir G [=dirección] [direcciones]
hexadecimal H valor1 valor2
info/entrada I puerto
cargar L [dirección] [unidad] [primersector] [número]
mover M intervalo de direcciones
nombre N [ruta\nombre] [arglist]
info/salida O byte de puerto
continuar P [=dirección] [número]
salir Q (cierra la sesión sin guardar en archivo)
registro R [registro]
buscar S lista de rango
seguir T [=dirección] [valor]
desensamblar U [intervalo] (Separado por coma)
escribir W [dirección] [unidad] [primersector] [número]
asignar-memoria expandida XA [#páginas]
desasignar-memoria expandida XD [identificador]
trazar páginas-memoria expandida XM [Lpágina] [Ppágina] [identificador]
mostrar estado-memoria expandida XS