ASM/CDS/EJEMPLO4.ASM
2021-09-03 17:40:06 +02:00

61 lines
1.8 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

segmento SEGMENT
ASSUME DS:segmento
ORG 100h
principal PROC NEAR
mov ax, Numero
push ax
mov ax, OFFSET Producto
push ax
call Multiplica
mov ah, 4ch
int 21h
principal ENDP
Multiplica PROC NEAR
push bp ; se salva BP
mov bp, sp ; se hace que BP apunte a la zona de par metros
sub sp, 2 ; se crea espacio para una variable local de 2 bytes
push si ; se salva SI
mov si, [bp+4] ; se mueve a SI el desplazamiento del campo resultado
mov ax, [bp+6] ; se mueve a AX el n£mero que va a ser multiplicado por 9,5
shr ax, 1 ; se divide el n£mero entre 2
mov [bp-2], ax ; se guarda el resultado en la variable local
mov ax, [bp+6] ; se mueve a AX de nuevo el n£mero que va a ser multiplicado por 9,5
shl ax, 1 ; se multiplica AX por 8 por el mtodo de los desplazamientos
shl ax, 1
shl ax, 1
add ax, [bp+6] ; se suma el resultado de la multiplicaci¢n con el
; n£mero para obtener el producto de ste por 9
add ax, [bp-2] ; se suma la mitad del n£mero original al resultado de
; multiplicar por 9
mov [si], ax ; se mueve al campo resultado
pop si ; se recupera el valor inicial de SI
mov sp, bp ; se elimina la variable local
pop bp ; se recupera el valor inicial de BP
ret 4 ; finaliza el proceso restaurando la pila
Multiplica ENDP
Numero WORD 1000h
Producto WORD ?
segmento ENDS
END principal