【发布时间】:2012-09-20 17:55:30
【问题描述】:
我想编写一个程序,将两个数字相加并以十进制形式显示结果,最初它看起来很简单,但结果却不是!!! 因为十进制只有 0-9 个字符,当我们想要添加任何大于我们必须执行一些数学运算的数字时,
这是我所做的, 我想加两个数字 35 和 39,
35 + 39 = 74
MOV BL,35H
MOV AL,39H
ADD AL,BL
DAA ;Decimal after Addition => the result of it would be 0074H
PUSH AX ;PRESERVE 0074H
; Separating the two numbers
AND AL,00001111B ; AL => 0000 0100
ADD AL,30H ; ; AL => 0004H + 30H = 4 of Decimal
POP AX ;AX = 74H => 01110100
ROR AL,1
ROR AL,1
ROR AL,1
ROR AL,1
AND AL,00001111B ;AL => 0000 0111
ADD Al,30H ;A: => 0007H + 30H = 7 of Decimal
MOV DL,AL
MOV AH,4CH ;Return Control to the DOS
INT 21H
我恢复了两个数字,但现在如何将结果显示为“74”???
另外,这种方法太费时间了,有没有更好更有效的方法呢?
【问题讨论】:
-
1) 您忘记在计算后将第一个数字存储在某处。
-
即使我存储如何最终将两个数字合并为一个结果?
-
这取决于您希望看到的形式:作为保存在内存中的字符串或作为寄存器中的两个字节值。但是您是如何开始为 8086 运行 dos 进行编程的呢?
-
你能告诉我两种方式吗?我在我们学校教授的 Windos 7 64 位中使用 TASM 和 DosBox
-
好吧,在“POP AX”指令之前插入“MOV DH,AL”。然后在指令'MOV DL,AL'之后,您将在DX的上半部分拥有最高有效数字(实际上是它的ASCII表示),在DX的下半部分拥有最低有效数字。另一种方法是将一些内存位置加载到寄存器 DI 中,然后每次在 AL 寄存器中获得下一个数字时使用 stosb 指令。请记住,stos 指令行为受 PSW 中方向位的影响。保重)