汇编语言中如遇到两个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型,不能直接低位相加,因为可能产生进位.
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型,不能直接低位相加,因为可能产生进位.
错误在于用了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寄存器。
方法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寄存器。
rep stos dword ptr [edi] 在这个汇编指令中rep是什么英文单词的缩写?stos?ptr
汇编语言中,ADD BYTE PTR [BX],BYTE PTR [DI] 这句指令正确吗,如果错了,错在哪?需要怎么改
这段代码的意思是啥004010D0 BB442404 mov eax,dword ptr [esp+04]004010D
汇编语言中 13 AND 65H 我记得 AND 应该这么写 AND AX,BX
Byte bit word dword 的区别
汇编语言中,cmp指令怎么用?比如cmp ax,bx ax大于bx怎么跳转,小于又怎么跳,等于呢?
注册表中“DWORD值”是什么含义?“DWORD”这几个英文字母是什么意思?
数控编程圆弧插补指令中,整圆指令如何写!不是两个半圆相加的!
汇编语言中 ADD AX,BX中AX=14C6 BX=80DC执行完这条语句后,OF怎么变化.怎样判断结果是否溢出和进位
BYTE x;x = dw&0x00000007写这个的人说这是把DWORD转换为int,取前面23位,还是C语言语句.
汇编语言,设ax bx cx中的数都是带符号数,下列程序求AX BX CX中最大值,结果在AX中,请写完整
如题.汇编语言中,按位取反的指令CPL是那个英文单词的缩写?