作业帮 > 综合 > 作业

汇编语言中如遇到两个dword型的数值相加,指令怎么写 我写了 add dword ptr [bx],ax ,

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/15 23:53:52
汇编语言中如遇到两个dword型的数值相加,指令怎么写 我写了 add dword ptr [bx],ax ,
add dword ptr [bx],[bx+4]
add dword ptr [bx],dword ptr [bx+4] 这样的写法都不行
其实是书本里的一个实验任务,为防止div溢出,给的公式
;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位
; (cx)=余数
;公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
;int():描述型运算符,取商,比如,int(38/10)=3
;rem():描述型运算符,取余数,比如,rem(38/10)=8
我考虑rem(H/N)*65536+L ,rem(H/N)*65536这个值应该是4位dword,而L为原树的低位,为word型,不能直接低位相加,因为可能产生进位.
汇编语言中如遇到两个dword型的数值相加,指令怎么写 我写了 add dword ptr [bx],ax ,
错误在于用了2个存储单元相加
方法1:用32位汇编
mov eax,dword ptr [bx+4]
add dword ptr [bx],eax;通过32位寄存器,不过这样用必须说明用386以上的cpu
方法2:用带进位加
mov ax,word ptr [bx+4]
add word ptr [bx],ax
mov ax,word ptr [bx+6]
adc word ptr [bx+2],ax;加类型说明不知道你是怎么定义
再问: 谢谢井小美 我学的这本书在目前这个章节还没学到adc的指令,而且不一定要进位,有可能进位有可能不进位。带进位的加是不是一定会在所得值上加1? 书本上现在默认用的是8086 cpu,eax暂时不能用。
再答: 有进位就加1,没进位就不加,双字求和如果不用32位加,只能用带进位加,没有其他方法
再问: mov ax,word ptr [bx+4] add word ptr [bx],ax ;第一步 mov ax,word ptr [bx+6] adc word ptr [bx+2],ax ;此处的功能是判断第一步有没有进位?,有进位加1,没进位不加?
再答: 对的
再问: MOV AX,FIRST1 ADD AX,SECONE1 这两句将两数的低位相加 两个低位相加可能进位了,如果 进位就会把标志寄存器的CF(进位标志位)改为1. 下次如果ADC AX,SECOND2 其实是AX,SECOND2,CF三个数相加(ADD仅仅是前两个),所以能实现进位 刚查了下,可能是前一步相加后如果有进位cf=1,没进位cf=0.这样实现进位,我理解的对吗?可是通过debug的r命令都看不到有cf寄存器。