请教一个关于任意大小的数的带进位加法问题
本帖最后由 yuexicheng 于 2013-04-11 21:49:47 编辑 我理解的是理论上adc指令可以实现任意大的数据进行加法运算,但是关键要怎样向内存输入我想要加的这两个数,嗯最简单的就是我要写一段程序使两个128位的十进制数相加那么我应该怎样在程序中将这两个128位的十进制数送入内存中并从低地址单元到高地址单元依次存放128位数据由低到高的各个字好像伪指令db dw这些也不可能定义任意大的数啊
我先前想到个办法就是用db来从个位到最高位一位一位的定义然后用adc一位一位的加过去
即 db 1,2,3,4,5,6,7,8,9···;第一个128位的十进制数
db 2,4,6,8,1,3,5,7,9···;第二个128位的十进制数
;ds:si指向第一个数的个位ds:di指向第二个数的个位
sub al,al;将cf置0
mov cx,128
s: mov al,[si]
adc al,[di]
mov [si],al
inc si
inc di
loop s
唔 这段代码是错误的 各位别介啊 不过想想还是不删它了 这确实也是个想法不过却行不通,问题依旧还望各位不吝赐教
[解决办法]
db 1,2,3,4,5,6,7,8,9···;第一个128位的十进制数
db 2,4,6,8,1,3,5,7,9···;第二个128位的十进制数
;ds:si指向第一个数的个位ds:di指向第二个数的个位
sub al,al;将cf置0
mov cx,128
s: mov al,[si]
adc al,[di]
cmp al,10
jnb carry ;如果小于跳转至CRAAY
clc ;置CF位为0
s1:mov [si],al ;把计算结果放入内存
inc si
inc di
loop s
carry: stc ;置CF位为1
sub al,10 ;如果大于将AL中的值减10
jmp short s1