在 8086 中使用 16 位寄存器操作 32 位数字
我正在尝试编写一个程序,获取两个 6 位十进制数并显示它们的相加,但是是 16 位 8086 我将数字定义为双字,并将 LO 放入字 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
Im trying to write a program which get two 6-digit decimal numbers and show the addition of them, but in 16 bit 8086
i defined numbers as double word and put LO in WORD 1 and HO in word 2. similar to below code
but i dont have any idea to do next, can any body suggest me algorithm for next operations?
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
in this program
di is a place to storing the number made through the loop
when user enter a number
di will multiple to 10 and the new digit will add to di
like:
proccess of getting 28
di=0*10+2=2
di=2*10*+8=28
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我将提供一个独立的示例,而不是遵循未注释的代码。
假设 DX:AX 中有 1 个 32 位数字,CX:BX 中有 1 个 32 位数字(这种表示法意味着高 16 位存储在 DX 中,低 16 位存储在 AX 中)。要添加这些值并将结果保留在 DX:AX 中,您可以:
add
指令将两个值相加,并将 C(进位)位设置为 1 或 0,具体取决于关于是否有进位。adc
指令将两个值加上进位位的值相加(然后再次设置进位位)。通过这种方式,您可以通过继续执行更多adc
指令来添加任意大小的值。Rather than follow your uncommented code, I'll present an independent example.
Suppose you have one 32-bit number in DX:AX and one 32-bit number in CX:BX (this notation means that the high 16 bites are stored in DX for example, and the low 16 bits in AX). To add these values and leave the result in DX:AX, you would:
The
add
instruction adds the two values and sets the C (carry) bit to 1 or 0 depending on whether there was a carry or not. Theadc
instruction adds the two values plus the value of the carry bit (and then sets the carry bit again). In this way, you can add values of any size by continuing with moreadc
instructions.