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.