请教一个关于任意大小的数的带进位加法问题

yuexicheng 2013-04-11 09:25:14
我理解的是理论上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
唔 这段代码是错误的 各位别介啊 不过想想还是不删它了 这确实也是个想法不过却行不通,问题依旧还望各位不吝赐教
...全文
229 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuexicheng 2013-04-14
  • 打赏
  • 举报
回复
哦 原来还有配置cf位的指令啊看来的找个汇编指令大全好好看一下,谢谢啊
ad6673706 2013-04-14
  • 打赏
  • 举报
回复
结贴给分吧 亲!!!
yuexicheng 2013-04-13
  • 打赏
  • 举报
回复
哈哈 你让我想到了一个办法嗯是这样的
  
             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指向第二个数的个位
                   mov cx,128
             s:  mov al,[si]
                 add [di],al;用ds:[di]存储两数相加的结果
                 cmp [di],10;两数相加结果与10比较,>=10则向下一个内存单元即ds:[di+1]加上1
                 jnb carry;相当于低位向高位的进位1,嗯,这是个没有adc指令的带进位加法
            s1:  inc si
                 inc di
                 loop s
         carry:  add byte ptr [di+1],1
                 jmp short s1
ad6673706 2013-04-13
  • 打赏
  • 举报
回复
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
yuexicheng 2013-04-13
  • 打赏
  • 举报
回复
哦 对哦 谢谢啊嗯 carry段代码 carry:sub byte ptr [di],10 add byte ptr [di+1],1 jmp short s1 不过还是想看看在保证输入的情况下用adc指令的实现方法
ad6673706 2013-04-13
  • 打赏
  • 举报
回复
这个办法的效率很高,不过CARRY里忘了减10。
ad6673706 2013-04-12
  • 打赏
  • 举报
回复
那用减法吧,如果大于10就减,这个应该会快些。
yuexicheng 2013-04-12
  • 打赏
  • 举报
回复
用上除法这个数要是小还是可以如果数太大了速度没有保证啊
ad6673706 2013-04-11
  • 打赏
  • 举报
回复
进位的时候代码改一下,除以10商为进位。跟大数阶乘的思路一样。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧