您好我是汇编语言的初学者,任何人都可以帮助我理解如何处理汇编语言x86中的数字。
当我处理与数字相关的任务时遇到困难,我无法执行shl
,shr
,mul
,div
这样的程序,如果有任何人可以解释那么两位数的加法或分享以下代码我将非常感谢
喜欢:
Mov Al 2
Mov Bx 2
mul bx
mov dx,bx
mov ah,2
int 21h
但如果我通过减去30h
来转换它,即使不能显示正确的答案,它也无法显示正确的输出。
答案 0 :(得分:1)
我无法执行
shl
,shr
,mul
,div
等程序
shl
,shr
,mul
,div
是说明。请不要将它们称为程序。
......我通过减去30小时来隐蔽......
请参阅下面的代码,转换要求您添加 30小时而不是减去30小时。
Mov Al 2 Mov Bx 2 mul bx mov dx,bx mov ah,2 int 21h
您可以更正此计划,该计划将2个单位数字相乘。
错误1:选择正确的尺寸乘法。使用mul bx
,您已经计算了DX:AX = AX * BX
,在这种情况下这是过度的。此外,由于你忘了归零AH
,你得到随机结果!
mov al, 2
mov bl, 2
mul bl ; -> AX = AL * BL
错误2:将数字 4 (2 * 2)的结果转换为字符" 4"。
另请注意,mul
注册中找不到BX
指令的结果,就像您的代码正在思考(mov dx, bx
)。
mul bl
将结果保留为AX
,由于该值太小,我们只需使用AL
(AX
的低半部分)
add al, "0" ;"0" = 30h
mov dl, al
mov ah, 02h
int 21h
重要的是要看到这种显示结果的简单方法只适用于0到9之间的结果。
要显示超出此[0,9]范围的数字,请查看Displaying numbers with DOS。本文详细解释了如何将任何数字转换为文本表示并将其输出到屏幕。