ARQUITECTURA DE COMPUTADORAS INSTRUCCIONES Y LENGUAJES Prof Juan

  • Slides: 29
Download presentation
ARQUITECTURA DE COMPUTADORAS INSTRUCCIONES Y LENGUAJES Prof. Juan Álvarez

ARQUITECTURA DE COMPUTADORAS INSTRUCCIONES Y LENGUAJES Prof. Juan Álvarez

CONTENIDO SEXTA SEMANA Debug. Descripción, uso y aplicaciones. Descripción de instrucciones del microprocesador genérico.

CONTENIDO SEXTA SEMANA Debug. Descripción, uso y aplicaciones. Descripción de instrucciones del microprocesador genérico. Lenguaje de máquina y estructura del lenguaje ensamblador. Instrucciones: MOV, ADD, SUB, AND, OR, XOR, CMP. Laboratorio 2: Reconocimiento de hardware de la tarjeta madre. Peter, Abel. Lenguaje Ensamblador y Programación para IBM PC Compatibles. 3 ra. Edición. Editorial Prentice Hall. Hispanoamericana. (Capítulo 3)

DEBUG El DEBUG es un depurador que permite ejecutar programas paso a paso. Está

DEBUG El DEBUG es un depurador que permite ejecutar programas paso a paso. Está presente en todo sistema operativo. Permite crear archivos con extensión. COM lo que hace que los programas alcancen un tamaño de 64 KB, pero también se puede utilizar el DEBUG para ejecutar programas tipo. EXE. El debug se utiliza para ejecutar un programa en lenguaje de máquina o en lenguaje ensamblador paso a paso, es decir se ejecuta una instrucción y el programa se detiene esperando nuevas órdenes. En lo que sigue se va a programar una secuencia de instrucciones y se va a ejecutar mostrando los detalles de la ejecución.

INSTRUCCIONES Para ello se va a utilizar instrucciones como MOV, ADD, SUB, AND, OR,

INSTRUCCIONES Para ello se va a utilizar instrucciones como MOV, ADD, SUB, AND, OR, XOR, CMP, PUSH y POP. Cada una de estas instrucciones tiene el siguiente formato en lenguaje ensamblador y se agrega su acción: MOV destino, fuente Lo que está en la fuente se copia en el destino ADD destino, fuente Se suma (destino + fuente) y el resultado se copia en el destino SUB destino, fuente Se resta (destino – fuente) y el resultado se copia en el destino AND destino, fuente Se realiza un AND bit a bit del (destino. AND. fuente) y el resultado se copia en el destino

INSTRUCCIONES OR destino, fuente Se realiza un OR bit a bit del (destino. OR.

INSTRUCCIONES OR destino, fuente Se realiza un OR bit a bit del (destino. OR. fuente) y el resultado se copia en el destino XOR destino, fuente Se realiza un XOR bit a bit del (destino. XOR. fuente) y el resultado se copia en el destino CMP destino, fuente Se resta (destino – fuente) pero sólo se afectan las banderas El resultado de la resta no se guarda en ninguna parte Todas las instrucciones aritméticas y lógicas afectan las banderas.

INSTRUCCIONES Para entender lo que hace la instrucción CMP se atenderá el siguiente ejemplo:

INSTRUCCIONES Para entender lo que hace la instrucción CMP se atenderá el siguiente ejemplo: CMP AX, BX y se observará cómo se afectan las banderas Zero y Carry. Si Carry Zero AX > BX 0 0 AX = BX 0 1 AX < BX 1 0 Para averiguar el resultado de la comparación basta con analizar las banderas Zero y Carry de acuerdo con este cuadro.

DEBUG Para iniciar el debug basta con colocarse en un directorio y ordenar: C>

DEBUG Para iniciar el debug basta con colocarse en un directorio y ordenar: C> debug Y aparece una raya como inicio y espera de comandos. Para escribir un programa se da el comando “A” de assemble: -a 0 CB 1: 0100 _ Es debug espera que se instroduzca la primera instrucción. Todos los números en el debug se expresan en hexadecimal y no se hace diferencia entre las letras mayúsculas y minúsculas. Los números que están a la izquierda después del comando “A” corresponden en este caso al contenido de los registros CS: IP para indicar posición de memoria.

DEBUG Escribir el siguiente programa: 0 CB 1: 0100 MOV AX, 2233 0 CB

DEBUG Escribir el siguiente programa: 0 CB 1: 0100 MOV AX, 2233 0 CB 1: 0103 MOV BX, 0200 0 CB 1: 0106 MOV SI, 0020 0 CB 1: 0109 MOV DX, 7755 0 CB 1: 010 C ADD AX, DX 0 CB 1: 010 E SUB DX, SI 0 CB 1: 0110 AND AX, 00 FF 0 CB 1: 0113 OR DX, [0200] 0 CB 1: 0117 MOV [BX], DX 0 CB 1: 0119 ADD CX, [BX] 0 CB 1: 011 B XOR AX, [BX+2] 0 CB 1: 011 E CMP DX, [BX+SI] 0 CB 1: 0120 MOV [BX+SI], DX 0 CB 1: 0122 INT 20 0 CB 1: 0124

DEBUG Notar que el programa empieza en la posición 0100 y termina en la

DEBUG Notar que el programa empieza en la posición 0100 y termina en la posición 0124. Para grabar el programa se calcula primero el número de bytes que tiene el programa: - h 0124 0100 0224 0024 El comando “h” ( hex) hace la suma y la resta de los dos números que acompañan al comando. En este caso la resta igual a 0024 corresponde al número de bytes que tiene el programa. Para hacer efectiva la grabación, primero hay que fijar el nombre del archivo con sufijo. com : - n prog 1. com

DEBUG Previamente hay que grabar el número de bytes en el registro CX: -

DEBUG Previamente hay que grabar el número de bytes en el registro CX: - r CX CX 0000 : 0024 Luego se ejecuta el comando de grabación: - W Writing 00024 bytes El archivo prog 1. com quedará grabado en el directorio del debug.

DEBUG Para ver el lenguaje de máquina y el listado en lenguaje ensamblador se

DEBUG Para ver el lenguaje de máquina y el listado en lenguaje ensamblador se aplica el comando U de unassemble: -u 0100 0 CB 1: 0100 B 83322 MOV AX, 2233 0 CB 1: 0103 BB 0002 MOV BX, 0200 0 CB 1: 0106 BE 2000 MOV SI, 0020 0 CB 1: 0109 BA 5577 MOV DX, 7755 0 CB 1: 010 C 01 D 0 ADD AX, DX 0 CB 1: 010 E 29 F 2 SUB DX, SI 0 CB 1: 0110 25 FF 00 AND AX, 00 FF 0 CB 1: 0113 0 B 160002 OR DX, [0200] 0 CB 1: 0117 8917 MOV [BX], DX 0 CB 1: 0119 030 F ADD CX, [BX] 0 CB 1: 011 B 334702 XOR AX, [BX+02] 0 CB 1: 011 E 3 B 10 CMP DX, [BX+SI]

DEBUG 0 CB 1: 0120 8910 0 CB 1: 0122 CD 20 MOV [BX+SI],

DEBUG 0 CB 1: 0120 8910 0 CB 1: 0122 CD 20 MOV [BX+SI], DX INT 20 El lenguaje de máquina de cada instrucción tiene una longitud variable que va desde un byte hasta seis bytes. Para ver el contenido de los registros se utiliza el comando R de register: -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DS=0 CB 1 ES=0 CB 1 SS=0 CB 1 CS=0 CB 1 IP=0100 NV UP EI PL NZ NA PO NC 0 CB 1: 0100 B 83322 MOV AX, 2233 Para cambiar el contenido de un registro de acude al comando R seguido del nombre del registro: -r di DI 0000 : 5678

DEBUG Y el contenido del registro DI se carga con el dato 5678. Para

DEBUG Y el contenido del registro DI se carga con el dato 5678. Para ejecutar paso a paso una instrucción se aplica el comando P de proceed.

DEBUG Notar que las cuatro promeras instrucciones consisten en cargar registros con datos en

DEBUG Notar que las cuatro promeras instrucciones consisten en cargar registros con datos en el modo de direccionamiento inmediato. La instrucción que continúa suma el contenido de los registros AX y DX, y el resultado se escribe en AX. AX = 2233 = 0010 0011 DX = 7755 = 0111 0101 AX = 9988 = 1001 1000 Luego sigue la resta de DX menos SI, el resultado se carga en DX. DX = 7755 = 0111 0101 SI = 0020 = 0000 0010 0000 DX = 7735 = 0111 0011 0101

DEBUG La instrucción que sigue es un AND bit a bit entre el registro

DEBUG La instrucción que sigue es un AND bit a bit entre el registro AX y el dato 00 FF. AX = 9988 = 1001 1000 00 FF = 0000 1111 AX = 0088 = 0000 1000

LENGUAJE DE MÁQUINA El lenguaje de máquina es el código binario que el microprocesador

LENGUAJE DE MÁQUINA El lenguaje de máquina es el código binario que el microprocesador utiliza para identificar instrucciones y controlar su funcionamiento. En los procesadores Intel, la longitud de las instrucciones del lenguaje de máquina puede variar desde 1 hasta 13 bytes. Para los procesadores de 16 bits la estructura de las instrucciones en lenguaje de máquina tiene se ilustra así:

LENGUAJE DE MÁQUINA

LENGUAJE DE MÁQUINA

LENGUAJE DE MÁQUINA El código de operación elige la operación que realiza el microprocesador.

LENGUAJE DE MÁQUINA El código de operación elige la operación que realiza el microprocesador. Generalmente es de un byte y contiene la siguiente información: Código operación D W D=1, el dato fluye de R/M a REG; D=0, el dato fluye de REG a R/M. W=1, el dato es de 16 bits; W=0, el dato es de 8 bits.

LENGUAJE DE MÁQUINA En el byte MOD-REG-R/M el campo MOD especifica el modo de

LENGUAJE DE MÁQUINA En el byte MOD-REG-R/M el campo MOD especifica el modo de direccionamiento de acuerdo a la tabla adjunta. El campo REG especifica el tipo de registro que es utilizado de acuerdo a lo que indica la tabla de registros. El campo R/M especifica el tipo de puntero utilizado en la memoria o en todo caso especifica el otro registro si MOD=00

LENGUAJE DE MÁQUINA TABLA PARA EL CAMPO MOD función 00 Usa memoria sin desplazamiento

LENGUAJE DE MÁQUINA TABLA PARA EL CAMPO MOD función 00 Usa memoria sin desplazamiento 01 Desplazamiento de 8 bits con signo 10 Desplazamiento de 16 bits 11 El campo R/M es un registro

LENGUAJE DE MÁQUINA TABLA PARA EL CAMPO REG Código W=0 W=1 000 AL AX

LENGUAJE DE MÁQUINA TABLA PARA EL CAMPO REG Código W=0 W=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP 101 CH BP 110 DH SI 111 BH DI

LENGUAJE DE MÁQUINA TABLA PARA EL CAMPO DE R/M Código Direccionamiento 000 DS: [BX+SI]

LENGUAJE DE MÁQUINA TABLA PARA EL CAMPO DE R/M Código Direccionamiento 000 DS: [BX+SI] 001 DS: [BX+DI] 010 SS: [BP+SI] 011 SS: [BP+DI] 100 DS: [SI] 101 DS: [DI] 110 SS: [BP] 111 DS: [BX]

LENGUAJE DE MÁQUINA Ejemplo: MOV DL, [DI] Se escribe como: 10001010 = 8 Ah,

LENGUAJE DE MÁQUINA Ejemplo: MOV DL, [DI] Se escribe como: 10001010 = 8 Ah, seguido del byte: 00010101= 15 h. Ejemplo: código: 10001011 = 8 Bh, seguido del byte: 11101100 = ECh. Corresponde a la instrucción MOV BP, SP Ejemplo: MOV DL, [DI+1000 h] Se escribe en lenguaje de máquina cómo 8 Ah, 85 h, 00 h, 01 h.

LENGUAJE DE MÁQUINA Un modo de direccionamiento especial es el modo de direccionamiento directo

LENGUAJE DE MÁQUINA Un modo de direccionamiento especial es el modo de direccionamiento directo para el cual se utiliza para MOD = 00 y para R/M = 110. Esta excepción se explica por el hecho que el uso del registro puntero base BP sólo puede usarse con desplazamiento. Como MOD=00 le impide este desplazamiento, entonces se trata del modo de direccionamiento directo.

LENGUAJE DE MÁQUINA El modo de direccionamiento inmediato posee su propio formato de acuerdo

LENGUAJE DE MÁQUINA El modo de direccionamiento inmediato posee su propio formato de acuerdo y su propio código de operación. En general, las reglas aquí expuestas valen para un buen grupo de instrucciones. Pero existen instrucciones que no se ajustan a estos cánones y se debe acudir a los formatos del fabricante.

PROBLEMAS PROPUESTOS 1. Para el siguiente listado de instrucciones inherentes a los micro- procesadores

PROBLEMAS PROPUESTOS 1. Para el siguiente listado de instrucciones inherentes a los micro- procesadores Intel. MOV BX, 0200 h MOV [BX], AX ADD CH, [0200 h] MOV [BX+2 h], CH MOV DL, [0201 h] MOV DH, [BX+SI] Para resolver el problema considere los siguientes datos, como condición inicial AX = 55 BBh BX = FFDDh CX = 4468 h DX = 2211 h CS = 1000 h DS = 2000 h SS = 4000 h ES = 6000 h IP = 0100 h SP = 01 FFh BP = 0300 h DI = 0600 h SI = 0002 h

PROBLEMAS PROPUESTOS • Determinar el Modo de Direccionamiento de cada una de las instrucciones;

PROBLEMAS PROPUESTOS • Determinar el Modo de Direccionamiento de cada una de las instrucciones; • En el cuadernillo de respuestas ejecutar gráficamente de manera secuencial las instrucciones; • Al finalizar la ejecución mostrar el contenido todos los registros

PROBLEMAS PROPUESTOS 2. Para el siguiente conjunto de instrucciones correspondientes a los procesadores INTEL

PROBLEMAS PROPUESTOS 2. Para el siguiente conjunto de instrucciones correspondientes a los procesadores INTEL se solicita: • Identificar el modo de direccionamiento de cada instrucción • Mostrar gráficamente la ejecución secuencial de cada una de las instrucciones MOV BX, 0200 h MOV [0202 h], AX ADD CL, [BX+SI] SUB [BX+DI+1 H], DL XOR AX, DX

PROBLEMAS PROPUESTOS Condiciones iniciales para los registros: AX = 5544 h CS = 2000

PROBLEMAS PROPUESTOS Condiciones iniciales para los registros: AX = 5544 h CS = 2000 h IP = 0100 h BX = 7788 h DS = 3000 h SP = 0011 h CX = 99 FFh SS = 4000 h BP = 0300 h DX = 2211 h ES = 5000 h DI = 0001 h SI = 0002 h