在8086中用16位寄存器操作32位数

时间:2011-12-02 06:47:13

标签: assembly x86-16 16-bit

我试着写一个程序,它得到两个6位十进制数并显示它们的加法,但在16位8086 我将数字定义为双字,并将LO放在WORD 1中,将HO放在字2中。类似于下面的代码 但我接下来没有任何想法,任何机构都能建议我进行下一步操作的算法吗? 日Thnx

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的过程 二= 0 * 10 + 2 = 2 二= 2 * 10 * + 8 = 28

1 个答案:

答案 0 :(得分:9)

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

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

    add ax,bx
    adc dx,cx

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