注册 登录
编程论坛 汇编论坛

这个加法还是有问题的,怎么能解决呢?

youyong407 发布于 2009-12-24 16:34, 613 次点击
根据这个,我写了个小程序,如下:

;名称: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"。也就是说这个算法不能解决高位加法再次进位的现象,不知道有没有办法解决这个问题。
0 回复
1