我有这个代码的问题,它意味着收集一个数字并加倍,但它只接受1到9之间的数字,并输出5到9之间所有数字的两个数字的第二个值,可以是完成以允许它输出正确的值
;DOUBLE THIS PROGRAM PROMPTS THE USER TO ENTER A NUMBER
;DOUBLE THE NUMBER,AMD OUTPUT THE RESULT
.model small
.stack
.data
prompt db 0ah,0dh, 'enter the number : $'
msg db 0ah,0dh, 'Double your number is : '
result db 0ah,0dh, '$'
.code
start:
mov ax,@data
mov ds,ax
lea dx,prompt
mov ah, 9 ;dos fn to output string up to $
int 21h
mov ah,1 ;dos fn to input byte into al
int 21h
sub al,30h ;convert from ascii to integer
add al,al ;sum inputted value to itself
aaa
or al,30h
mov result,al ;add the double value of the value to result
lea dx, msg
mov ah, 9
int 21h
mov ah,4ch
int 21h
end start
答案 0 :(得分:2)
你的程序遇到了一些问题:
您没有预留必要的空间来存储字节大小的结果。在db
指令后需要额外的零。
result db 0, 0ah, 0dh, '$'
因为将数字从5加倍到9将不可避免地产生2位数结果,您只需将结果更改为字数。
result db 0, 0, 0ah, 0dh, '$'
您正在使用aaa
指令错误。幸运的是,aam
指令适合您的目的。
AAM将AL除以10并将商存储在AH中,其余部分保留在AL中。
下一个代码将始终显示2位数的结果。如果需要,你可以替换字符" 0"在AL中用" "就在将AX写入结果变量之前。
aam
or ax, 3030h
xchg al, ah
mov result, ax