Problema: escriba un programa en lenguaje ensamblador para encontrar la suma de números impares en una serie dada que contenga números de 8 bits almacenados en una ubicación de memoria continua y almacene el resultado en otra ubicación de memoria.
Ejemplo –
Ejemplo de explicación –
- 500 offset almacena el valor del contador de la serie y los elementos de la serie comienzan desde 501 a 504 offset.
- En este ejemplo, tenemos 4 términos solamente. Sumar los términos impares (que se encuentran en el registro BL) 15+07 en el registro AL y el resultado se almacena (1C) en el registro AL.
- El resultado del registro AL se almacena en 600 compensaciones.
Suposiciones –
- El valor del contador que indica cuántos números hay en la serie se almacena en la ubicación de memoria 500.
- Los elementos de la serie se almacenan en una ubicación de memoria continua a partir de 501.
- El resultado se almacena en una ubicación de memoria 600.
- La dirección inicial del programa es 400.
Prueba –
Syntax: TEST d, s
Realiza la operación AND de destino(d) y fuente(s), pero el resultado no se almacena, solo se modifican los indicadores.
Algoritmo –
- Cargue datos del desplazamiento 500 al registro CL.
- Incrementa el valor de la compensación.
- Cargue 00H en el registro CH.
- Cargue 00H en el registro AL.
- Cargue datos desde el desplazamiento al registro BL.
- Use la instrucción TEST para verificar si los datos en BL son pares o impares, si el indicador cero está configurado significa que los datos son pares, luego vaya al paso 7; de lo contrario, los datos son impares, luego vaya al paso 8.
- Salta a la ubicación de memoria 413H.
- Agregue los datos de los registros AL y BL y almacene el resultado en el registro AL.
- Incrementa el valor de la compensación.
- Vaya a la ubicación de memoria 40AH si el contenido de CX no es igual a cero; de lo contrario, vaya al paso 11.
- Cargue los datos del registro AL en la ubicación de memoria 600.
- Final
Programa –
Dirección | Mnemotécnica | Comentarios |
---|---|---|
400 | MOV SI, 500 | SI<-500 |
403 | CL MOV, [SI] | CL<-[SI] |
405 | INC SI | SI<-SI+1 |
406 | CA MOV, 00 | CH<-00 |
408 | MOV AL, 00 | AL<-00 |
40A | MOV BL, [SI] | BL<-[SI] |
40C | PRUEBA BL, 01 | BL.01 |
40F | JZ 413 | Saltar a la ubicación de memoria 413 si se establece el indicador cero |
411 | AÑADIR AL, BL | AL<-AL+BL |
413 | INC SI | SI<-SI+1 |
414 | BUCLE 40A | saltar a la ubicación de memoria 40A si el contenido de CX no es igual a cero |
416 | MOV [600], AL | [600], AL |
41A | HLT | final |
Explicación –
- MOV SI, 500 carga el valor 500 a SI.
- MOV CL, [SI] carga los datos del desplazamiento SI en el registro CL.
- INC SI aumenta el valor de SI en uno.
- MOV CH, 00 carga el valor 00 en el registro CH.
- MOV AL, 00 carga el valor 00 en el registro AL.
- MOV BL, [SI] carga los datos del desplazamiento SI en el registro BL.
- PRUEBA BL, 01 Y se modifica la operación del contenido de BL y el valor 01 y los registros de bandera.
- JZ 413 salta a la ubicación de memoria 413 si se establece el indicador cero.
- ADD AL, BL agrega el contenido de los registros AL y BL y almacena el resultado en el registro AL.
- INC SI aumenta el valor de SI en uno.
- LOOP 40A salta a la ubicación de memoria 40A si el valor de CX no es igual a cero.
- MOV [600], AL carga el contenido del registro AL en la ubicación de memoria 600.
- HLT detiene la ejecución del programa.
Publicación traducida automáticamente
Artículo escrito por priyankagujral y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA