First commit 06/07/1996
This commit is contained in:
61
CDS/EJEMPLO4.ASM
Normal file
61
CDS/EJEMPLO4.ASM
Normal file
@ -0,0 +1,61 @@
|
||||
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<61>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 m<>todo de los desplazamientos
|
||||
shl ax, 1
|
||||
shl ax, 1
|
||||
|
||||
add ax, [bp+6] ; se suma el resultado de la multiplicaci<63>n con el
|
||||
; n<>mero para obtener el producto de <20>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
|
||||
|
Reference in New Issue
Block a user