社区
汇编语言
帖子详情
请问谁有8位/8位的除法汇编代码呢?
eeb
2007-05-18 11:11:47
请问谁有8位/8位的除法汇编代码呢?不需要求余数的。
...全文
680
16
打赏
收藏
请问谁有8位/8位的除法汇编代码呢?
请问谁有8位/8位的除法汇编代码呢?不需要求余数的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ahjoe
2007-05-28
打赏
举报
回复
难道现在的CPU都不支持 div ?
Jerry3385
2007-05-24
打赏
举报
回复
mark
paullbm
2007-05-22
打赏
举报
回复
謝謝liangbch(宝宝)兄的賜教!!!
liangbch
2007-05-21
打赏
举报
回复
若 n1是一个8bit的数,n2也是一个8bit的数且n2不等于0,则n1/n2的商至多是一个8bit的数,我们定义n1/n2=c,则 n1=n2 * c+ r (r<n2,r是余数)
c的2进制表示为 "b7 b6 b5 b4 b3 b2 b1 b0", b0到b7为0或者1 则 c= 2^7 *b7 + 2^6 *b6 + 2^5 * b5 +.. 2^1 *b1 + 2^0 *b0
所以:n1= n2 * 2^7 *b7 + n2 * 2^6 *b6 + n2 *2^5*b5 + ...n2* 2^1 *b1 + n2* 2^0 *b0
在我的程序中,
cl: 当前商(初值为2^7,以后逐次除以2),
ch: 商
bx:除数乘以当前商的积(部分积),等于 n2* cl,初值等于 n2 *2^7,以后逐次除以2。
在循环过程中,依次将 被除数(余数)与 部分积(n2 * cl) 比较,如被除数(余数)大于部分积,则将商加上部分商 并将 余数减去部分积,直到余数小于除数为止。
paullbm
2007-05-20
打赏
举报
回复
把liangbch(宝宝)的代码转换一下就是:
=====================================
data segment
n1 db 34
n2 db 7
n3 db ? ;存放n1/n2的商
data ends
code segment
assume cs:code,ds:data
main:
mov ax,data
mov ds,ax
mov ax,0
mov bx,0
mov cx,0
mov al,n1
mov bl,n2
mov cl,7
shl bx,cl
mov cl,80h
loop1:
cmp ax,bx
jb next
sub ax,bx
add ch,cl
next:
shr bx,1
shr cl,1
cmp al,n2
jae loop1
mov n3,ch
mov ah,4ch
int 21h
code ends
end main
===============================
liangbch(宝宝)果然厉害。在下想问一下,请问这个算法是根据什么规律或公式而实现的呢?
liangbch
2007-05-20
打赏
举报
回复
当时写完后就发现这个bug了,将这段代码修改一下就好了。
原来的代码
or ax,ax
jnz loop1
修改为:
cmp al,n2
jae loop1
mengshijie_1981
2007-05-20
打赏
举报
回复
8bit/8bit除法,下面的方法就可以了,AL中存放被除数,BL中存放除数,商放在AL中。(余数在AH中,你可以不理会它)
无符号除法:
MOVZX AX,AL
DIV BL
有符号除法:
MOVSX AX,AL
IDIV BL
paullbm
2007-05-20
打赏
举报
回复
liangbch(宝宝)
我下面的代码则最多只需要8次循环(8bit需要8次循环,如果是16bit需要16次循环),没有汇编环境,写一个vc++程序,请自行修改为汇编程序。
=========================================
int div8(unsigned char n1,unsigned char n2)
{
_asm
{
mov ax,0
mov bx,0
mov cx,0
mov al,n1
mov bl,n2
shl bx,7
mov cl,80h
loop1:
cmp ax,bx
jb next
sub ax,bx
add ch,cl
next:
shr bx,1
shr cl,1
or ax,ax
jnz loop1
thisExit:
mov al,ch
}
}
int main(int argc, char* argv[])
{
unsigned char n1,n2,n3;
n1=35;
n2=7;
n3=div8(n1,n2);
printf("%d/%d=%d\n",n1,n2,n3);
return 0;
}
============================
经检验,发现当n1/n2的余数只比n2小于1时,程序会出现异常!!!
比如:
n1=34,n2=5时
商为6,余数为4
这时就会出现问题!!
eeb
2007-05-18
打赏
举报
回复
不能使用DIV指令的
paullbm
2007-05-18
打赏
举报
回复
但是據在下所知,
DIV指令要麼是16/8位的
要麼是32/16位的
這都涉及到商和余數了。。
當然,有沒有余數取決於除數和被除數的關系!!!
16/8位的完全可以把分子的高8位設為0,這樣就相當於是8/8位的了!!
eeb
2007-05-18
打赏
举报
回复
paullbm:我是初学汇编的,想要最简单的除法代码。只要8位/8位的,而且不用求余数。你能帮我写一下吗?
paullbm
2007-05-18
打赏
举报
回复
16位/8位的難道達不到你的要求嗎??
大熊猫侯佩
2007-05-18
打赏
举报
回复
循环减或我blog上由关于大整数四则运算的算法推出的算法
liangbch
2007-05-18
打赏
举报
回复
楼上的虽然算法简单,但是太慢了,如果计算 255/1,需要255次循环,我下面的代码则最多只需要8次循环(8bit需要8次循环,如果是16bit需要16次循环)
没有汇编环境,写一个vc++程序,请自行修改为汇编程序。
int div8(unsigned char n1,unsigned char n2)
{
_asm
{
mov ax,0
mov bx,0
mov cx,0
mov al,n1
mov bl,n2
shl bx,7
mov cl,80h
loop1:
cmp ax,bx
jb next
sub ax,bx
add ch,cl
next:
shr bx,1
shr cl,1
or ax,ax
jnz loop1
thisExit:
mov al,ch
}
}
int main(int argc, char* argv[])
{
unsigned char n1,n2,n3;
n1=35;
n2=7;
n3=div8(n1,n2);
printf("%d/%d=%d\n",n1,n2,n3);
return 0;
}
paullbm
2007-05-18
打赏
举报
回复
不能使用div指令?那就用循環減法!
比如 十進數100/5
100每次減去一個5,然后計數器(初始為零,也可以是商)加1,得到的差再與5比較,如果相比一直比5大,則一直循環。直到得到的差小於5或等于0則跳出循環!!
最後得到的計數器的值其實就是100/5的商(即為20)!!!
rockefeller8
2007-05-18
打赏
举报
回复
不需要余数就是整除了,用比较大小就可以了,注意中间的累加问题!其实整除完成,余数自然就知道了
汇编
语言课程设计一完整
代码
及详细解析
本文详细介绍了一门
汇编
语言课程的设计案例,包括
代码
实现与解析。课程涉及32/16位和16/
8位
除法
运算,通过具体实例讲解了数据处理和转换方法,适用于初学者深入理解
汇编
语言的底层操作。
汇编
语言:
除法
指令相关学习整理
本文详细介绍了
汇编
语言中
8位
和16位
除法
指令的使用规则,通过实例解析了如何进行
除法
运算。在
8位
除法
中,AX存储商,AH存储余数;而在16位
除法
中,DX:AX组合存储被除数,AX存储商,DX存储余数。并给出了计算100001/100、1001/100和1001/256的具体指令
代码
。
汇编
的div
这篇博客介绍了在
汇编
语言中如何进行
8位
和16位
除法
运算。当除数是
8位
时,被除数为16位,存储在AX寄存器中,AH保存高
8位
,AL保存低
8位
,结果的商在AL,余数在AH。而16位
除法
中,被除数是32位,存储在AX和DX中,DX保存高16位,AX保存低16位,商在AX,余数在DX。通过具体的示例
代码
,如100/10和100001/100,详细阐述了运算过程。
编写无溢出
除法
的
汇编
子程序
本文详细探讨了
汇编
语言中div指令进行
除法
运算时容易发生溢出的问题,并提供了如何编写一个无溢出
除法
的
汇编
子程序。通过将被除数、除数和商统一为32位,避免了溢出,子程序通过巧妙的寄存器操作实现了无溢出的
除法
运算。
64位与32位
汇编
除法
技术实现与应用
本文聚焦64位对32位
除法
技术,探讨其在
汇编
语言中的实现与应用。介绍了64位与32位处理器架构,阐述
汇编
语言基础及
除法
操作,详述
汇编
除法
实现步骤,分析32位寄存器使用与限制,还提及
代码
编写技巧、性能优化策略及在系统开发中的应用。
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章