【问题标题】:manipulating 32 bit numbers with 16 bit registers in 8086在 8086 中使用 16 位寄存器操作 32 位数字
【发布时间】:2012-01-11 06:26:38
【问题描述】:

我正在尝试编写一个程序,它可以获取两个 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

【问题讨论】:

    标签: assembly x86-16 bigint 16-bit extended-precision


    【解决方案1】:

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

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

        add ax,bx
        adc dx,cx
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2014-12-15
      相关资源
      最近更新 更多