La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Clase 7 Assembly - Simulador MSX88.

Presentaciones similares


Presentación del tema: "Clase 7 Assembly - Simulador MSX88."— Transcripción de la presentación:

1 Clase 7 Assembly - Simulador MSX88

2 Instrucciones Escribir el prog que implemente F = [(A+B)/C]-D usando máq de 1, 2 ó 3 dir. nombre tamaño valor A: 1 byte 6 B: 1 byte 4 C: 1 byte 2 D: 1 byte 1 F: 1 byte ? Maq. de 1 dirección load A add B div C sub D store F Maq. de 2 direcciones mov F, A add F, B div F, C sub F, D Maq. de 3 direcciones add F, A, B div F, F, C sub F, F, D

3 Instrucciones Maq. de 1 dirección load A add B div C sub D store F Maq. de 2 direcciones mov F, A add F, B div F, C sub F, D Maq. de 3 direcciones add F, A, B div F, F, C sub F, F, D Suponiendo que cada cód de operación ocupa 6 bits y las dir son de 10 bits. Tam del prog en mem (cod.operación + op) Cant de accesos a mem (instrucciones + op) M. de 1 dirección (6*5) + (10*5) = = 80 bits = 10 bytes (5 + 5) = 10 accesos M. de 2 direcciones (6*4) + ((10+10)*4) = = 104 bits = 13 bytes [4+( )] = 15 acc M. de 3 direcciones (6*3) + (( )*3) = = 108 bits = 13,5 bytes [3+(3+3+3)] = 12 acc

4 (Lenguaje de ensamble) Assembler (Ensamblador)
Lenguaje Assembly Assembly (Lenguaje de ensamble) Otro lenguaje que, en principio, es un mapeo directo de esos códigos a instrucciones comprensibles por un humano. Lenguaje de máquina Conjunto de instrucciones codificadas. Es el único lenguaje que una computadora entiende. Assembler (Ensamblador) Programa encargado de tomar programas escritos en Assembly y generar los códigos que la computadora entenderá.

5 Assembly Datos Variables Registros
Los datos en assembly pueden estar en memoria (variables) o en registros Variables Nombre DB valor_inicial Nombre DW valor_inicial Registros AX (AH - AL) BX (BH - BL) CX (CH - CL) DX (DH - DL) DB (Byte) = 8 bits DW (Word) = 16 bits Ejemplos var1 DB 10 var2 DW ? tabla DB 1, 2, 3, 4, 5 string DB “Esto es un string” (ASCII) var3 DW 0ABCDH var4 DB B Hexadecimal Binario

6 Indirecto por registro
Assembly Modos de direccionamiento Inmediato Directo Por registro Indirecto por registro Cod_op Operando1 operando2

7 No requiere acceso extra a memoria
Assembly Direccionamiento Inmediato No requiere acceso extra a memoria Cod_op valor

8 Accede al operando que se encuentra en la memoria en la celda indicada
Assembly Direccionamiento Directo 1 acceso extra a memoria Accede al operando que se encuentra en la memoria en la celda indicada Cod_op Dirección_operando Memoria operando

9 Assembly Direccionamiento Por registro No requiere accesos a memoria
El valor del operando se encuentra en el registro indicado Cod_op registro Registros AX BX operando

10 Requiere un acceso extra a memoria
Assembly Direccionamiento indirecto por registro Requiere un acceso extra a memoria El registro contiene la dirección de la celda donde se encuentra el valor. Cod_op registro Memoria operando Registros AX BX dir_operando

11 Assembly Transferencia Ejemplo MOV destino, origen ORG 1000h
Para todas las operaciones los operandos deben ser: Reg / Reg Reg / Mem Reg / op. inm Mem / Reg Mem / op. inm Transferencia MOV destino, origen Mem / Mem Ejemplo ORG 1000h var1 DB 20h var2 DB ? ORG 2000h MOV AL, var1 //Copia el valor de var1 en AL MOV var2, AL //Copia el valor de AL en var2 La directiva del ensamblador ORG indica a partir de qué posición de memoria deben ubicarse las instrucciones que van a continuación var1 estará en la pos 1000H y var2 en 1001H Si var1 fuera dw, donde estaría var2

12 Assembly ¿ Podría hacer ADD dato1, dato2 ?? Ejemplo
Operaciones aritméticas ADD OP1, OP2 SUB OP1, OP2 OP1 = OP1 + OP2 OP1 = OP1 - OP2 Ejemplo ORG 1000h dato1 DW 10 dato2 DW 20 res DW ? ORG 2000h MOV AX, dato1 ADD AX, dato2 MOV res, AX END ¿ Podría hacer ADD dato1, dato2 ??

13 Assembly Operaciones aritméticas 2 ADC OP1, OP2 SBB OP1, OP2 INC OP
DEC OP OP1 = OP1 + OP2 + C OP1 = OP1 - OP2 - C OP = OP + 1 OP = OP – 1

14 Las operaciones lógicas y aritméticas setean flags
Assembly Operaciones lógicas AND OP1, OP2 OR OP1, OP2 XOR OP1, OP2 NOT OP NEG OP OP1 = OP1 and OP2 OP1 = OP1 or OP2 OP1 = OP1 xor OP2 OP = ~ OP (Ca1) OP = ~ OP (Ca2) Las operaciones lógicas y aritméticas setean flags

15 Solo setea flags (no guarda el resultado)
Assembly Comparación CMP OP1, OP2 OP1 - OP2 Solo setea flags (no guarda el resultado)

16 Ejercicio 1 Num0 Num1 Num2 Num3 Num4 ORG 1000H NUM0 DB 0CAH NUM1 DB 0
1002H 1003H 1004H CD 1005H AB 1006H 1007H 2000H CA 34H ORG 1000H NUM0 DB 0CAH NUM1 DB 0 NUM2 DW ? NUM3 DW 0ABCDH NUM4 DW ? ORG 2000H MOV BL, NUM0 MOV BH, 0FFH MOV CH, BL MOV AX, BX MOV NUM1, AL MOV NUM2, 1234H MOV BX, OFFSET NUM3 MOV DL, [BX] MOV AX, [BX] MOV BX, 1006H MOV WORD PTR [BX], 1006H HLT END 12H 06H 10H AB CD AX FF CA AX Copia en BL num0 Copia en BH FF Copia en CH BL Copia BX en AX Copia AL en num1 Copia 1234H en num2 BX 10 06H 10 04 BX FF CA BX CA CX CD DL Copia en BX la dir de num3 Copia en DL, el contenido de la celda apuntada por BX Copia en AX, el contenido de la celda apuntada por BX Copia 1006H en BX Copia en 1006H a partir de la dir de BX (copia 2 bytes) Indica a la CPU que ya no hay mas inst para leer Indica al ensamblador que no hay mas inst para traducir Se usa ri (buffer de direcciones) guarda temporalmente la dir de BX - id (buffer de datos) para guardar temporalmente el 1006H Por la indirección [BX] se usa ri (buffer de direcciones) para guarda temporalmente la dir de BX

17 Ejercicio 2 ORG 1000H NUM0 DB 80H NUM1 DB 200 NUM2 DB -1
BYTE0 BYTE1 1000H 80H = 1001H C8H = 1002H FFH = 1003H 7FH = 1004H AAH = 2000H ORG 1000H NUM0 DB 80H NUM1 DB 200 NUM2 DB -1 BYTE0 DB B BYTE1 DB B ORG 2000H MOV AL, NUM0 ADD AL, AL INC NUM1 MOV BH, NUM1 MOV BL, BH DEC BL SUB BL, BH MOV CH, BYTE1 AND CH, BYTE0 NOT BYTE0 OR CH, BYTE0 XOR CH, B HLT END 80 = 200 decimal = C8H -1 en Ca2 = FFH = 7FH = AAH AL = num0 AL = AL + AL  AL = 00H= FLAGS: O:1 Z:1 C:1 S:0 NUM1 = NUM1 + 1  NUM1 = C9h = FLAGS: O: 0 Z:0 C:0 S:0 BH = NUM1  BH = C9h = BL = BH  BL = C9h BL = BL-1  BL = C8H FLAGS: O: 0 Z:0 C:0 S:0 BL = BL – BH  BL = FFh = FLAGS: O: 0 Z:0 C:1 S:1 CH = BYTE1  CH = AAh = CH = CH and BYTE0  CH = BYTE0 = ~BYTE0 (ca1) BYTE0 = = 80h CH = CH or BYTE0  CH = = AAh CH = CH xor FFh  CH = and Or xor

18 Saltos Flujo Normal de ejecución Para alterar el flujo: Saltos …
instruccion1 etiqueta: instruccion2 instruccion3 instruccion4 JMP etiqueta

19 Saltos Saltos: JMP etiq  Salto incondicional
JS etiq  Salto si S == 1 JNS etiq  Salto si ~ S (S == 0) JZ etiq  Salto si Z == 1 JNZ etiq  Salto si ~ Z (Z == 0) JC etiq  Salto si C == 1 JNC etiq  Salto si ~ C (C == 0)

20 Ejercicio 3 … ORG 1000H INI DB 0 FIN DB 15 010= 0000 0000 = 00h
0FH = 2000H Ejercicio 3 ORG 1000H INI DB 0 FIN DB 15 ORG 2000H MOV AL, INI MOV AH, FIN SUMA: INC AL CMP AL, AH JNZ SUMA HLT END 010= = 00h 1510 = = 0Fh AL = INI  AL= 00h AH = FIN  AH = 0Fh = AL = AL + 1  AL = 01h = FLAGS: O:0 Z:0 C:0 S:0 AL - AH  FLAGS: O: 0 Z:0 C:1 S:1 Si ~Z salta a SUMA

21 … Ejercicio 5 BX  BX  BX  BX  AX AX 2 AX 00 6 AX 00 12 BX 10 03 BX
tabla 1000H 2 1001H 4 1002H 6 1003H 8 1004H 10 1005H 12 1006H 14 1007H 16 1008H 18 1009H 20 100AH ? 100BH 100CH 13 BX  Duplica la tabla la cant de veces indicada adelante. (1 en este caso) BX  BX  ORG 1000H TABLA DB 1 DUP(2,4,6,8,10,12,14,16,18,20) FIN DB ? TOTAL DB ? MAX DB 13 ORG 2000H MOV AL, 0 MOV CL, OFFSET FIN-OFFSET TABLA MOV BX, OFFSET TABLA SUMA: ADD AL, [BX] INC BX DEC CL JNZ SUMA HLT END FIN TOTAL MAX AX AX 2 AX 00 6 AX 00 12 BX 10 03 BX 10 01 BX 10 00 CX 09H BX 10 02 ¿Qué deberá agregar si quisiera almacenar el resultado de la suma en TOTAL? CX 07H CX 0AH CX 08H

22 El Simulador – MSX88 Simula una CPU basada en un versión simplificada del procesador 8086 de Intel, denominadaSX88.

23 MSX88 - Memoria 16 bits 8 bits Dirección Dato

24 MSX88 - Registros AH AL BH BL CH CL DH DL 8 bits 8 bits 16 bits H High
Low

25 MSX88 - Uso Editar el programa, escrito en el lenguaje Assembly de MSX88 en un editor de texto. (La última línea del programa debe tener un Enter, si no dará error al ensamblarlo). El programa fuente generado se deberá guardar con extensión ‘.asm’ (Ejemplo: prueba.asm). Ensamblar: ASM88 archivo_asm (Ejemplo: C:/Simulador> ASM88 prueba.asm ) Linkear: LINK88 archivo_o (Ejemplo: C:/Simulador> LINK88 prueba.o) Ejecutar en el simulador: MSX88 (Ejemplo: C:/Simulador> MSX88) Genera dos archivos: archivo_asm.o archivo_asm.lst Genera dos archivos: archivo_asm.eje

26 MSX88 - Uso Instrucciones: L prueba  Carga el programa prueba.eje
G  Ejecuta F6  avanza instrucción a instrucción F7  avanza ciclo a ciclo R IP 2000  Carga en el registro ip el 2000


Descargar ppt "Clase 7 Assembly - Simulador MSX88."

Presentaciones similares


Anuncios Google