PARTE #1 : Repaso de:
Transcription
PARTE #1 : Repaso de:
ENSAMBLADOR EJERCICIOS PARA QUIENES TIENEN ANOTADO EN SU PRIMER EXÁMEN: “CONDICIONADO” PARTE #1 : Repaso de: a) Operaciones aritméticas: ADD, SUB, MUL, DIV b) Modos de direccionamiento: Nota: Recuerda que pueden moverse bytes o words entre memoria RAM y los registros. y que el tamaño del registro determinará, si movemos un byte o una Word, ejemplo: MOV AX, [0356] Como el registro AX es de una palabra (word), entonces se moverá a AX dos celdas de memoria. ( recuerda que se invierte el orden) c) Operaciones lógicas: AND, OR, XOR d) Operaciones de corrimiento y rotación: ROR, ROL, SHR, SHL I.- Realiza en tu libreta las pruebas de escritorio de los ejercicios de la pregunta 1 a la pregunta 3. Y en las preguntas 4 a 8 también realizarás las pruebas de escritorio después de escribir las instrucciones en ensamblador que se piden. Revisión: Lunes 6 de abril. 1.- MOV MOV XOR ADD SUB MOV ROR ROL AND ADD MOV SHR OR SHL DX, BA67 BX, 4DB6 BX, DX DX, 295E; en base 16 DX, 3EFF; en base 16 CL, 2 BL, CL BH, CL DH, 7A DX, 1 CL, 4 DX, CL BL, CL DH, CL 2.- Considera en la memoria RAM: 0350 56 1B 76 EE AB 89 10 EF 3E 41 77 MOV AX, [ 0356] MOV BX, 0350 MOV DX, [BX] ADD AX, DX; en base 16 ADD BX,1 MOV DI, BX MOV CX, BX MOV DL, [DI + 4] SUB AX, CX; en complemento a 2 MOV [ DI + 2], AX MUL DH AX BX CX DX 3.- Considera en la memoria RAM: 061B MOV MOV MOV SUB MOV MOV MOV MOV DIV MOV MUL MOV MOV DIV MOV 4.- AD FF 13 22 93 12 82 14 E5 SI, 061B CX, 061B AX, [ SI ] CX, AX; en complemento a 1 [ SI + 4 ], AH BX, SI [ SI ], BX BH, [ SI + 6 ] BH [ SI ], AX BL AX, EFA3 BL, 63 BL [ SI + 7 ], AH Escribe las instrucciones en ensamblador para intercambiar el contenido de las celdas 0300, 0301, 0302, 0303, 0304, con las celdas 0500, 0501, 0502, 0503, 0504 respectivamente. NOTA: Recuerda que no están permitidos los movimientos y operaciones de tipo: memoria, memoria Un ejemplo de un movimiento memoria, memoria puede ser: MOV [DI], [SI] Hay que usar de auxiliar a un registro para poder hacer dicho movimiento. 0300 0500 34 1B 72 31 F6 45 21 FF BA 80 a) Usando modo de direccionamiento indexado b) Usando modo de direccionamiento indirecto La memoria debe de quedar: 0300 0500 45 21 FF BA 80 34 1B 72 31 F6 5.- Realiza la siguiente resta (usando Complemento a 2 ) del byte de la celda 0200 con el byte de la celda 0201. El resultado almacénalo en la celda 0202. 0200 67 14 a) Usando modo de direccionamiento INDIRECTO 6.- Copiar una cadena de 4 caracteres que inicia en la dirección 0599 a la dirección 0B00 a) Usando modo de direccionamiento INDIRECTO b) Usando modo de direccionamiento BASE 7.- Considera los siguientes bytes 0300 02 0A 0310 12 0B 0320 00 00 Realiza la multiplicación byte a byte. El byte de la celda 0300 multiplicarlo con el byte de la celda 0310 y el resultado almacenarlo en la celda 0320. De manera análoga realizar lo mismo con el resto de los bytes. En total son dos multiplicaciones. a) Implementar usando modo de direccionamiento DIRECTO b) Implementar usando modo de direccionamiento INDIRECTO 8.- Considera los siguientes registros DX = 0436, CX= 0399 (los valores están en hexadecimal). Escribe las instrucciones en ENSAMBLADOR para dividir cada parte BAJA del registro entre su parte ALTA, osea: DL/DH y CL/CH. Almacena en la memoria RAM el cociente de las tres divisiones. a) Usando modo de direccionamiento INDEXADO PARTE #2 : 1.- Repasa tus apuntes de comandos del DEBUG. 2.- Comprueba tus pruebas de escritorio de las preguntas 1, 2, y 3 de la Parte #1 usando DEBUG. Pasos para usar DEBUG: a.- Introducir las instrucciones en la dirección 0100 con el comando: A 0100 b.-Verificar que el IP inicie en la dirección 0100, si no la tiene, inicializarlo con R ip : 0100 c.- Dar R para visualizar los registros y ver cual es la próxima instrucción a ejecutarse. d.- Ejecutar paso a paso usando el comando T, y también ir verificando el contenido de la memoria cuando ejecutes instrucciones que hacen movimientos u operaciones que guardan resultados en memoria. ( usar comando D) PARTE #3 : Escribe un programa completo en ensamblador en cada pregunta usando la plantilla. Esto es, en el programa se definirán los segmentos, de pila, de datos y de código. Entregar los códigos impresos el dia 8 de abril. 1.- Implementa el programa de la pregunta 4 de la PARTE #1 a.- Definirás las variables TABLA1 DB 34H, 1BH, 72H, 31H, 0F6H y TABLA2 DB 45H, 21H, 0FFH, BAH, 80H b.- Usarás modo de direccionamiento INDIRECTO (ejemplo SI apunta a TABLA1 y DI apunta a TABLA2). c.- Ensamblar con MASM y enlazar con el LINK. d.- Ejecutar en debug el archivo .exe e. Verificar tu respuesta en el segmento de datos con el comando: D DS:0000 2.- Implementa el mismo programa de la pregunta 4 de la PARTE #1 a.- Pero ahora definirás las variables: CADENA1 DB ‘HOLA’,’$’ CADENA2 DB ‘1234’,’$’ 3.- Implementa el mismo programa de la pregunta 4 de la PARTE #1 a.- Pero ahora definirás las variables: CADENA1 DB ‘abcdefghijklmnopqrstuvwxyzzyxwvuts’,’$’ CADENA2 DB ‘ABCDEFGHIJKLMNOPQRSTUVWXYZZYXWVUTS’,’$’ b.- Usar modo de direccionamiento indirecto y LOOP 4.- Implementa un programa que sustituya todas las vocales minúsculas por vocales mayúsculas en una cadena de 10 caracteres. La cadena terminará con el símbolo de fin de cadena ‘$’. En este ejercicio usarás instrucciones de salto y NO usarás LOOP. Esto es, la búsqueda de vocales en La cadena, finalizará cuando se llega a fin de cadena. 5.- .- Implementa un programa que cada n caracteres inserte el carácter ‘*’ (asterisco) en una cadena de de 15 caracteres. Contar cuantas sustituciones se hicieron y guardarlo en la variable CONTAR. Ejemplo: Si n=4 y la cadena es “98abcde45wqAhBW” La cadena quedará como: 98a*cde*5wq*hBW aquí hubo 3 sustituciones Si n=3 entonces la cadena quedará como: 98*bc*e4*wq*hB* aquí hubo 5 sustituciones. Definir n, la variable CONTAR y la cadena en el segmento de datos. Investiga el comando G de DEBUG.