【发布时间】:2017-08-19 03:09:23
【问题描述】:
我需要显示问题,用户将回答 Y 或 N。我总共有 5 个问题,1 个问题有 20 分。我需要 5 * 20=100 之类的东西。
当用户回答 Y 时,countY db 0 将增加 20
我已经成功计算了分数,但是如何显示分数是两位数(例如 80),也可能是三位数(例如 100)。
Q1:
mov ah, 09h
lea dx, msgq1
int 21h
mov ah, 01h
int 21h
mov myInput, al
cmp myInput, 59h
JE I1
jmp Q2
I1:
mov dl, countY
add dl,20
mov countY, dl
;calculation
Cal:
mov ah,02h
mov dl, countY
add dl, 30h ; display countY=80;
mov countY, dl
int 21h
;NOT WORKING, ERROR CODE
mov bl,10
mov al, countY
cbw
div bl
mov q, al
mov r, ah
mov ah, 02h
mov q, al
int 21h
【问题讨论】:
-
不加1,不如
add dl,20? -
但是我还能使用
countY db 0吗?因为是两位数? -
使用
db表示这是Data,即1Btye 长。一个字节可以保存从 0 到 255 的值,因此 countY 可以保存“100”。但是,数字0和字符串'0'之间存在差异。数字用于计算,字符串用于显示。 IOW,要显示一个数字,你必须把它变成一个字符串。这就是您的add dl, 30h代码所做的(30h == '0'、31h = '1' 等)。但是这个技巧不适用于超过 9 的数字(30h + 10 = ':')。您需要使用不同的方法来显示大于 9 的数字。 -
cbw将 AL 符号扩展为 AX,但您使用的是 unsigneddiv而不是已签名的idiv。只要您知道您的输入已知小于 128,这并不重要,我猜。 -
你得到什么错误代码?详细描述“不工作”的含义。