Я очень плохо знаком с языком ассемблера. Я хочу знать, как я могу умножить 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