标题:这个加法还是有问题的,怎么能解决呢?
只看楼主
youyong407
Rank: 1
等 级:新手上路
帖 子:62
专家分:3
注 册:2008-9-22
结帖率:100%
 问题点数:0 回复次数:0 
这个加法还是有问题的,怎么能解决呢?
根据这个,我写了个小程序,如下:

;名称:add32
;功能:两个32位数字相加
;参数:ds:si指向第一个数字的起始位置,
;                         ds:di指向第二个数字的起始位置
;返回:将计算结果存入第一个数的起始位置

assume cs:code, ds:data

          data segment
                 
                dw 0aaaah,0aaaah
                dw 0aaaah,0aaaah
                 
          data ends

          code segment

          start:         mov ax, data
                         mov ds, ax
                          
                         mov si, 0
                         mov di, 4
                         call add32
                          
                         mov ax, 4c00h
                         int 21h
                          
          add32:         push ax
                         push cx
                         push si
                         push di
                          
                         sub ax, ax
                         mov cx, 2
                s:       mov ax, [si]
                         adc ax, [di]
                         mov [si], ax
                         inc si
                         inc si
                         inc di
                         inc di
                         loop s
                          
                         pop di
                         pop si
                         pop cx
                         pop ax
                         ret
                          
code ends

end start

计算的结果应该是"15554h",由于ax为16位寄存器,所以发生进位结果变成“5554h"。也就是说这个算法不能解决高位加法再次进位的现象,不知道有没有办法解决这个问题。
搜索更多相关主题的帖子: 加法 
2009-12-24 16:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294242-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014154 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved