鱼C论坛

 找回密码
 立即注册
查看: 2051|回复: 2

11章 名称add 128实验

[复制链接]
发表于 2012-3-31 00:05:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
;对功能子程序的测试和验证
assume cs:code,ds:data
data segment
        db 88h,88h,88h,88h,88h,88h,88h,88h,88h,88h,88h,88h,88h,88h,88h,88h
        db 11h,11h,11h,11h,11h,11h,11h,11h,11h,11h,11h,11h,11h,11h,11h,11h
data ends

code segment
start : mov ax,data
        mov ds,ax
        mov si,0
        mov di,16
        mov cx,8;
        call add128
        mov ax,4c00h
int 21h
;编写一个子程序,对两个128位数据进行相加。
;名称:add128
;功能:两个128位数据进行相加
;参数:
;   ds:si指向存储第一个数的内存空间,因数据为128位,所以需要8个字单元,由低地址单元到高地址单元依次存
;   放128位数据由低到高的各个字。运算结果存储在第一个数的存储空间中。
;   ds:di指向存储第二个数的内存空间
add128: push ax
        push cx
        push si
        push di
        sub ax,ax ;将CF设置为0
      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
整个代码主要针对字想加不会产生溢出, 8888+1111  此时为9999 16位没有溢出, 如果是 FFFF +FFFF,此时16位装不下 也有128位 相加 我们该怎么办?



                               
登录/注册后可看大图
该贴已经同步到 空手套小白狼的微博
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-31 09:08:07 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-31 13:43 编辑

进位保存在标志寄存器   寄存器保存加法以后的值  应该是这样吧 ffff+ffff =1fffe 进位最多进1 保存在标志寄存器中 结果是fffe 而且位数也相同!~
                       ffff ffff ffff
                   + ffff ffff ffff
           CF   1   1   1
                   ---+--+-------
                     fffe fffe fffe  
      =  CF 1   ffff  ffff  fffe   
  这样就出结果了 寄存器里保存数据ffff  ffff  fffe     CF保存进位 1      


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-31 12:01:05 | 显示全部楼层
加减法只关心CF标志位,进不进位,借不借位.计算过程跟溢出没关系.
如果第1字单元相加进位了,就把下第二个字单元值+1.
直到最后一个字单元相加再进位,就放不下了,这时候进的1就只保存在CF中,最后得数就相当于少了一个最高位的1.
这时,如果想要得数保持准确就多根据数的位数多申请一个空字单元,里面就相当于0+0+1.
      如果没有多申请内存空间,那这个答案显然是错的.这个得数就是因为超过了存储范围,溢出后的结果.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 10:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表