Problema: escriba un programa en lenguaje ensamblador en un microprocesador 8086 para dividir un número de 16 bits por un número de 8 bits.
Ejemplo –
Algoritmo –
- Asignar valor 500 en SI y 600 en DI
- Mueva el contenido de [SI] en BL e incremente SI en 1
- Mover el contenido de [SI] y [SI + 1] en AX
- Use la instrucción DIV para dividir AX por BL
- Mueva el contenido de AX en [DI].
- Detener el programa.
Suposición: el valor inicial de cada registro de segmento es 00000.
Cálculo de la dirección de la memoria física –
Dirección de la memoria = Registro de segmento * 10(H) + desplazamiento,
donde el Registro de segmento y el desplazamiento se deciden sobre la base de la siguiente tabla.
OPERACIONES | REGISTRO DE SEGMENTOS | COMPENSAR |
---|---|---|
Obtención de instrucciones | Segmento de código | Puntero de instrucciones |
operación de datos | Segmento de datos | Registro base [BX], Desplazamiento [DISP] |
operación de pila | Segmento de pila | Puntero de pila (SP), Puntero base (BP) |
String como fuente | Segmento de datos | Fuente indexada (SI) |
String como destino | Segmento adicional | Destino indexado (DI) |
Programa –
DIRECCIÓN DE MEMORIA | MNEMOTÉCNICA | COMENTARIO |
---|---|---|
0400 | MOV SI, 500 | SI <- 500 |
0403 | MOV DI, 600 | ED <- 600 |
0406 | MOV BL, [SI] | BL <- [SI] |
0408 | INC SI | SI <- SI + 1 |
0409 | EJE MOV, [SI] | AX <- [SI] |
040B | DIV BL | AX <- AX / BL |
040D | MOV [ED], AX | [DI] <-AX |
040F | HLT | fin de programa |
Explicación – Registros utilizados AX, BL, SI, DI
- MOV SI, 500 asigna 500 a SI
- MOV DI, 600 asigna 600 a DI
- MOV BL, [SI] mueve el contenido de [SI] al registro BL, es decir, el valor del divisor se almacenará en BL
- INC SI incrementa el contenido de SI en 1
- MOV AX, [SI] mueve el contenido de [SI] y [SI + 1] al registro AX, es decir, el valor del dividendo se almacenará en AX
- DIV BL divide el contenido de AX por BL, después de la ejecución de esta instrucción, el cociente se almacena en AL y el resto en AH
- MOV [DI], AX mueve el contenido de AX a [DI]
- HLT deja de ejecutar el programa y detiene cualquier ejecución adicional
Publicación traducida automáticamente
Artículo escrito por AmishTandon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA