6

我正在尝试编写一个程序来获取两个 6 位十进制数字并显示它们的相加,但是在 16 位 8086 中,我将数字定义为双字并将 LO 放在 WORD 1 中,将 HO 放在字 2 中。类似于下面的代码,但我没有任何下一步要做的想法,任何人都可以建议我下一步操作的算法吗?谢谢

x dd(?)
    next_no:
    mov cl,2
    mov ch,4

two_bit:
getch

sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x+2,di

dec cl
jnz two_bit
fourbit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x,di
dec ch
jnz fourbit

在这个程序中,di 是一个存储通过循环生成的数字的地方,当用户输入一个数字时,di 将倍数为 10,新数字将添加到 di,如:得到 28 的过程 di=0*10+2=2 di= 2*10*+8=28

4

1 回答 1

11

我将提供一个独立的示例,而不是遵循您未注释的代码。

假设您在 DX:AX 中有一个 32 位数字,在 CX:BX 中有一个 32 位数字(例如,这种表示法意味着高 16 位存储在 DX 中,而低 16 位存储在 AX 中)。要添加这些值并将结果保留在 DX:AX 中,您可以:

    add ax,bx
    adc dx,cx

add指令将这两个值相加,并将C(进位)位设置为 1 或 0,具体取决于是否有进位。该adc指令将两个值加上进位位的值相加(然后再次设置进位位)。这样,您可以通过继续执行更多adc指令来添加任意大小的值。

于 2011-12-02T07:08:09.037 回答