desktop

Multiplicar en asm. alguien me ?

Hola a todos! ando haciendo un programita y la verdad apenas se imprimir algo en asm, este programa no me multiplica el numero que entra desde el teclado, a ver si alguien me ayuda, aqui esta :

; --- EXE file format
.model small
.stack 100h
.data

data2 db 10,"Introduzca el texto.", 10, 13, '$'
data3 db "Al terminar, presione Enter.", 10, 13, '$'

;--------- Insert Data and Equates HERE

;--------- Declare other variables with DB, DW, etc. here


.code
start:
mov ax, @data
mov ds, ax ;set segment register
mov es, ax ;set segment register
and sp, not 3 ;align stack to avoid AC fault

lea dx, data2
mov ah, 09
int 21h

lea dx, data3
mov ah, 09
int 21h

print1:
mov ah, 01
int 21h

cmp al, 0dh
je divx
jne print1

divx:
mov cx, 0
mov cl, al

mov al, cl
mov bl, 4
mul bl

mov dx, ax
mov ah, 9
int 21h

exit:
mov ax, 4c00h ; terminate program
int 21h
end start

mil gracias de antemano!
 
dimmer dijo:
Hola a todos! ando haciendo un programita y la verdad apenas se imprimir algo en asm, este programa no me multiplica el numero que entra desde el teclado
No te multiplica porque:
- Al digito que vas leyendo tel teclado no lo guardas en ningun lado.
- Termina el bucle y lo unico que tenes en AL es 0Dh (Enter).
- Despues de multiplicar AL*4 llamas a la int21h sin haber convertido el numero a ASCII.


Para que eso ande tenes que pasar el string de entrada a binario --> multiplicar --> convertir de bin a asc --> llamar la int21h

O bien, si no queres convertir de binario<-->ascii , hacer un bucle de multiplicacion bcd usando aam.

Tambien podrias usar instrucciones del 8087, pasas el string de entrada a bcd (restarle 30h), usas fbld y fbst y lo convertis a ascii (sumas 30h).
 
Atrás
Arriba