提一个比较初级的问题

skyhunterxie 2008-10-23 08:56:57
由于刚刚开始学汇编,所以很多地方不是很懂,希望大家讲解的时候详细点,谢谢
就是我输入一个2进制的除数和被除数,对他们进行除法并输出商和余数,除法是通过移位来进行的,不使用DIV,请问大家我应该如何做,由于刚刚学,没什么头绪!
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyhunterxie 2008-10-24
  • 打赏
  • 举报
回复
那如果是分别输入2个有符号的数,对他们进行除法,我该如何处理,要求运用2进制的除法来做,谢谢了
skyhunterxie 2008-10-24
  • 打赏
  • 举报
回复
那如果是分别输入2个有符号的数,对他们进行除法,我该如何处理,要求运用2进制的除法来做,谢谢了
cnzdgs 2008-10-24
  • 打赏
  • 举报
回复
可以先判断两个数的符号,确定结果的符号,再转成正数运算。
cnzdgs 2008-10-23
  • 打赏
  • 举报
回复
先用一个循环,循环中先比较被除数和除数的大小,如果除数大于被除数则跳出循环,否则把除数左移动一位,记录总共循环的次数。再做一个循环,先把商初始化为0,循环中先把商左移一位,把除数右移一位,然后比较被除数和除数的大小,如果被除数大,则用被除数减去除数,并把商加1,循环次数与前一个循环次数相同。
skyhunterxie 2008-10-23
  • 打赏
  • 举报
回复
恩,我去试试看,谢谢了!
zuo53664640 2008-10-23
  • 打赏
  • 举报
回复
xor eax,eax ;eax 值 0
mov ebx,divisor ;ebx除数
mov edx,dividend ;edx被除数
mov ecx,20H ;循环32次 等于 32位寄存器
s1:
shld eax,edx,1 ;将被除数高位移到eax , 1位
cmp eax,ebx ;eax 与除数比较
jl s2 ;小于 继续移位
sub eax,ebx ;大于减去 ebx
inc edx ;edx 加 1
s2:
loop s1
next:

结果 eax 为余数 edx 为商!!
将就看下吧!!
zuo53664640 2008-10-23
  • 打赏
  • 举报
回复
xor eax,eax ;eax 值 0
mov ebx,divisor ;ebx除数
mov edx,dividend ;edx被除数
mov ecx,20H ;循环32次 等于 32位寄存器
s1:
shld eax,edx,1 ;将被除数高位移到eax , 1位
cmp eax,ebx ;eax 与除数比较
jl s2 ;小于 继续移位
sub eax,ebx ;大于减去 ebx
inc edx ;edx 加 1
s2:
loop s1
next:

结果 eax 为余数 edx 为商!!
将就看下吧!!

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧