Laboratorio de Arquitectura de Computadoras Computadoras
TEMA:
INFORME N° 7
PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR PUNTEROS Y TABLAS
OBJETIVO: 1.
Aprender a programar programar el lenguaje lenguaje ensamblador ensamblador para la familia 8086, 8086, de Intel. Intel. Para manejo de tablas.
PROBLEMA N° 1 El siguiente programa calcula la suma de cada elemento de un arreglo con los elementos correspondientes correspondientes de otro arreglo. El resultado se muestra en otro tercer arreglo. Ejecuta el programa paso a paso y anota el resultado de cada instrucción. Cambia los datos por otros números y ejecuta el programa. Para ver los res ultados puedes hacer clic en el botón “vars” .
Solución: cuando corremos paso a paso sucede lo siguiente: Bueno el ORG hace que comienzo nuestro programa desde la dirección 100H JMP hace dar un salto hasta la etiqueta START
LEA está cargando las direcciones de los arreglos a los respectivos registros como se ve en el código. LOOP es un bucle que funciona conjuntamente con MOV CX,4 mientras que va ejecutándose una acción LOOP hace que CX vaya disminuyendo en 1 hasta que llegue CX a 1 y es cuando el programa continua ya no vuelve a repetir.
Acá vemos el código, con los tres arreglos lo cual va a hacer es sumar los dos primeros arreglos y el resultado lo pondrá en el tercer arreglo. name "sumaarre"
mov cx,4
org 100h
sum: mov al,[si] add al,[bx] mov [di],al
jmp start vec1 db 1, 2, 5, 6 vec2 db 3, 5, 6, 1 vec3 db ?, ?, ?, ?
inc si inc bx inc di
start: loop sum lea si,vec1 lea bx,vec2 lea di,vec3
ret
Laboratorio de Arquitectura de Computadoras Computadoras
INFORME N° 7
Acá vemos el resultado, es el VEC3. Dos ejemplos con distintos datos datos
Modificamos el programa para hallar el semiproducto de dos números. name "semipr" semi: org 100h jmp start vec1 db 20, 20, 50, 60 vec2 db 3, 5, 6, 1 vec3 db ?, ?, ?, ? start: lea si,vec1 lea bx,vec2 lea di,vec3 mov cx,4
mov al,[si] mov ah,[bx] mul ah mov cx,2 div cx mov [di],al inc si inc bx inc di loop semi ret
Vemos dos resultados distintos distintos con datos diferentes
Laboratorio de Arquitectura de Computadoras Computadoras
INFORME N° 7
PROBLEMA N° 2 Escriba un programa que halle el número mayor y menor de una lista de números positivos. ORG 100H Solución: TABLA DB Bueno 120,34H,5,100,25H,106,107,33, 120,34H,5,100,25 H,106,107,33,29,57 29,57 MENOR DB ? MAYOR DB ? TABLA1 DB ?
;......................................... ;programa que el encuentra el numero mayor ;......................................... LEA
MAIN PROC FAR ;......................................... ;programa que el encuentra el numero menor ;.........................................
SI,TABLA MOV CX,10 MOV AH,[SI] DEC CX INC SI
;inicio contador ;AH = numero mayor
repite1: LEA MOV MOV DEC INC
SI,TABLA CX,10 AH,[SI] CX SI
MOV CMP JL MOV
AL,[SI] AH,AL SIGUE AH,AL
INC LOOP MOV
SI repite MENOR,AH
;inicio contador ;AH = numero menor
MOV CMP JG MOV
AL,[SI] AH,AL SIGUE1 AH,AL
INC LOOP MOV
SI repite1 MAYOR,AH
;numeros a comparar ;intercambia
SIGUE1:
repite: ;numeros a comparar ;intercambia
;.........................................
SIGUE: AH,4CH
INT ENDP END
21H
;peticion de fin
programa ;se almacena en MENOR MAIN
MOV
Resultados de 2 ejemplos con distintos datos
MAIN
;fin del programa
Laboratorio de Arquitectura de Computadoras Computadoras
PROBLEMA N° 3 Escriba un programa que calcula los números pares de una lista de números.
Solución:
Código del programa ORG 100H JMP INICIO TABLA DB 12,20,31,43,50,66,77,83,92, 12,20,31,43,5 0,66,77,83,92,101 101 PARES DB ?,?,?,?,?,?,?,?,?,? INICIO: ;......................................... ;programa que el encuentra los numeros pares ;......................................... LEA SI,TABLA LEA DI,PARES MOV CX,10 REPITE: MOV AX,[SI] MOV DX,00H MOV BX,2 DIV BX CMP DX,0 JNE SEGUIR MOV dx,[SI] MOV [DI],dl INC SI INC DI LOOP REPITE MOV AH,4CH INT 21H SEGUIR: INC SI LOOP REPITE ;......................................... MOV INT
Resultado
AH,4CH 21H
INFORME N° 7
Laboratorio de Arquitectura de Computadoras Computadoras
INFORME N° 7
PROBLEMA N° 4 Escriba un programa para hallar el promedio de 5 notas de laboratorio, eliminando eliminando la menor nota. Es decir se promedia con 4 notas.
Solución:
Buen
ORG 100H
;......................................... ;programa para que sume todas las notas ;.........................................
JMP INICIO NOTAS DB 12,20,6,14,13 NOTAELIMINADO DB ? PROMEDIO DB ?
LEA
INICIO: ;......................................... ;programa que el encuentra el nota menor ;......................................... LEA MOV MOV DEC INC
SI,NOTAS CX,5 ;inicio contador AH,[SI] ;AH = numero menor CX SI
MOV CMP JL MOV
AL,[SI] AH,AL SIGUE AH,AL
repite: ;numeros a comparar ;intercambia
SIGUE: INC SI LOOP repite MOV DL,AH MOV NOTAELIMINADO,DL NOTAELIMINA DO,DL ;se almacena NOTA A ELIMINAR
Resultado
SI,NOTAS MOV CX,5 MOV AL,[SI] DEC CX INC SI
;inicio contador
repite1: MOV ADD INC SI LOOP
AH,[SI] AL,AH repite1
SUB AL,DL
;AL = suma total - nota a
eliminar MOV AH,00H MOV BL,4 DIV BL MOV PROMEDIO,AL
;......................................... MOV fin programa INT programa
AH,4CH 21H
;peticion de ;fin del