Как я могу умножить 30 * N сборки 8086 - PullRequest
0 голосов
/ 09 апреля 2020

Я очень плохо знаком с языком ассемблера. Я хочу знать, как я могу умножить 30 * n, n это число, которое вводится с клавиатуры, но когда я ввожу число, результат неправильный, например, когда я ввожу 5 (30 * 5), это должно быть 150, но это будет 1065 instread, пожалуйста, помогите мне. PS Вот мой код, и извините за плохой английский sh и грамматику.

.model small
cr equ 0dh
lf equ 0ah
.stack 100h
.data
m1 db cr,lf,' >>>Vending machine<<<<',lf,'$'
menu1 db cr,lf, "a. Coca - cola $"
menu2 db cr,lf, "b. Pepsi $"
menu3 db cr,lf, "c. Ovaltine $"
menu4 db cr,lf, "d. Milo $"
menu5 db cr,lf, "e. Exit $"
msg db cr,lf, "Choose :$"
msg2 db cr,lf, "Amount :$"
result db cr,lf,"Total : $"
d1 dw 1
d2 db 30
.code
choice proc near
rep :
mov ax,@data
mov ds,ax
mov dx,offset m1
mov ah,09h
int 21h
LEA DX,menu1
MOV AH,09H
INT 21H
LEA DX,menu2
MOV AH,09H
INT 21H
LEA DX,menu3
MOV AH,09H
INT 21H
LEA DX,menu4
MOV AH,09H
INT 21H
LEA DX,menu5
MOV AH,09H
INT 21H
LEA DX,msg
MOV AH,09H
INT 21H
mov ah,01h
int 21h
cmp al,'d'
jz divi
cmp al,'e'
jz xzit
divi : call diviz
jmp rep
xzit :
        mov ah,4ch
        int 21h
choice endp
diviz   proc near
lea dx,result
mov ah,0dh
int 21h
        lea dx,msg2
        mov ah,9
        int 21h
        MOV AH,01H
        INT 21H
        SUB AL,30H
        MOV bl,AL
        MOV AH,D2
        SUB AL,30H
        mov cl,al
        lea dx,result
        mov ah,9
        int 21h
        mov al,cl
        mul bl
CALL PRINT 
ret 
diviz    endp
PRINT PROC            
    mov cx,0 
    mov dx,0 
    label1: 
        cmp ax,0 
        je print1       
        mov bx,10         
        div bx                   
        push dx               
        inc cx               
        xor dx,dx 
        jmp label1 
    print1: 
        cmp cx,0 
        je exit
        pop dx 
        add dx,48  
        mov ah,02h 
        int 21h 
        dec cx 
        jmp print1
exit: 
ret 
PRINT ENDP 
end
...