El dia de hoy veremos ejemplos simples de multiplicación en ensamblador 8086 haciendo uso de subrutinas.
Codigo:
org 100h mov ax,80 mov BX,10 mul bx ret
Resultado:
Primeramente iniciamos asignando los valores de 80 y 10 a los registros ax y bx correspondientemente, recordemos que se asignan en formato decimal
Al hacer la multiplicación obtendremos el numero 320 en hexadecimal en el registro AX, el cual es equivante a 800, siendo este el resultado
Codigo:
.model small .stack .data resultado db 0 mensaje db 10,13,"Resultado de multiplicar: $" .code mov ax,@data mov ds,ax call valores call multiplica call mostrar mov ax,4ch int 21h valores proc mov ax,4d mov bx,2d ret valores endp multiplica proc mul bx call convierte ret multiplica endp convierte proc add ax,30h mov resultado,al ret convierte endp mostrar proc mov ah,09 lea dx,mensaje int 21h mov ah,02 add ax,30h mov ah,02 mov dl,resultado int 21h ret mostrar endp end
Resultado:
Bajo el proceso anterior aplicamos lo mismo y lo ya conocido usado llamadas a subrutinas para organizar nuestro codigo y presentar el resultado en pantalla.
Ahora, es importante saber algo, dentro de lo que conocemos, los registros que empleamos tienen un rango definido para guardar valores, al momento de por ejemplo multiplicar 80 x 10,000 obtendremos 3500 en hexadecimal el equivalente a 13,568 pero deberia dar 800,000, este valor en cierto modo a superado el rango de lo que los registros en emu 8086 son capaces de soportar.
Para almacenar valores mucho mas grandes es necesario ampliar el registro, esto lo logramos en terminos sencillos agregando un nemonico diferente, sin embargo debo recalcar, para poder usarlo el emulador o procesador que estemos usando debe ser compatible con la arquitectura que señala la siguiente tabla, correspondientemente.
Imagen obtenida de: https://es.slideshare.net/erwinmeza/ia32-introduccion |
Comentarios
Publicar un comentario