汇编除法原理 汇编32位除法

汇编除法原理2010-03-24 17:26
多字节二进制除法算法2009-3-278:17:00

二进制的除法本质是通过重复减法运算实现

即通过重复”从被除数的高位依次取出每一位,被取出的数据加上上次的减法结果*2,

然后减去除数”的处理, 求出除法结果

假设:16位除以16位
被除数 R0R1(占用2字节)
除数R2R3 (占用2字节)
商R0R1(占用2字节)******************* 这里需要说明, 此程序执行
结束以后, 商的结果保存在被除数中 ************
余数R4R5 (占用2字节)
移位次数 R6(占用1字节)******************* 这里需要说明, 其数值根据
被除数的位数定义,这里为32*************


操作流程如下:
a) 余数清零
b) 判断除数是否为0, 如果为0, 是错误, 不再往下执行.
c) 设定移位次数
d) 被除数左移1位, 溢出的最高位保存在进位标志C中, 再把余数左移1位, 把C(被除数溢出的最高位)放入余数的最低位
e) 余数与除数比较大小(余数减去除数):
余数 ≧ 除数(减法结果为正)时, 被除数的最低位, 赋值 1
余数 < 除数(减法结果为负时, 恢复到减法前的余数) 被除数的最低位, 赋值 0
f) 定移位次数递减
g) 直到移位次数为0, 否则重复d) ~ f)

假设32位除以16位

被除数R3R2R1R0

除数R5R4

余数R7R6

商也在R3R2R1R0中

计算开始的时候R7R6R3R2R1R0整体左移一位

然后余数R7R6与除数比较 如果大于除数 则r0最低位置一

依次循环32次

其他的多位除法类似但是余数位数和除数位数要一致

; (r3r2r1r0) / (r5r4),余数(r7r6)

div_4b: mov r7,#0
mov r6,#0
push cnt
mov cnt,#32
clr c


div_32_loop: mova,r0

rlc a
mov r0,a
mov a,r1
rlc a
mov r1,a
mov a,r2
rlc a
mov r2,a
mov a,r3
汇编除法原理 汇编32位除法
rlc a
mov r3,a
mov a,r6
rlc a
mov r6,a
mov a,r7
rlc a
mov r7,a
clr c
mov a,r6
subb a,r4
mov b,a
mov a,r7
subb a,r5
jc div_4b_1
mov r6,b
mov r7,a
div_32: cpl c


djnz count,div_32_loop
mov a,r0
rlc a
mov r0,a
mov a,r1
rlc a
mov r1,a
mov a,r2
rlc a
mov r2,a
mov a,r3
rlc a
mov r3,a
pop cnt
ret

汇编语言的16位除法子程序2009-12-12 14:34

应邀写个汇编语言的除法子程序。

编写除法子程序,有两种算法,移位相减的方法和循环相减的方法。

移位相减的方法是仿照人们做除法的竖式编写,执行速度较快,但是计算的原理,一般人不好理解,难以让大家推广到更多的字节。故此下面采用循环相减的思路来编写程序。

设计思路:所谓除法,就是要求出在被除数中,含有多少个除数。那么就用被除数连续的减去除数,直到不够减为止,够减的次数,就是商,不够减的数值,就是余数。

比如:8/3,就是

第1次:8-3=5

第2次:5-3=2

2不够减3了,故8/3=2余2

下列程序,对数值范围的要求很宽松,被除数、除数和商,都可以是16位数,这比网上常见的16位除8位的除法程序,适用面要广得多。

注意,除数为0的问题,应该在主程序中进行检测。

;-------------------------------------

;16位/16位的子程序

;被除数:R2R3、除数:R4R5;商:DPTR、余数:R2R3。

;占用:A、B。

;-------------------------------------

R23DIVR45:

MOV DPTR, #0

D_LOOP:

CLR C

MOV A, R3

SUBB A,R5

MOV B, A

MOV A, R2

SUBB A,R4;R2R3-R4R5

JC DIV_E;有借位转移

INC DPTR

MOV R3, B

MOV R2, A

SJMPD_LOOP

DIV_E:

RET;不够减就结束

;-------------------------------------

;完

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/147051.html

更多阅读

解决32位win7不支持4G内存的方法 win7 32位内存补丁

解决32位win7不支持4G内存的方法——简介有网友反映说他的32位win 7不能用4G的内存。其实32位的win7和vista都是不允许用4G内存的,那有没有让32位的win7/vista也用上4G的内存呢? 答案是可以,但是这样做的话很可能会破坏系统的稳定性。

解决32位windows xp 无法使用4g内存问题 windowsxp纯净版32位

解决32位windows xp 无法使用4g内存问题——简介很多朋友由于各种原因还是在使用xp 系统,并且64位xp的硬件驱动非常少,所以xp用户大部分安装的都是32位的。解决32位windows xp 无法使用4g内存问题——方法/步骤解决32位windows xp

声明:《汇编除法原理 汇编32位除法》为网友学渣超级进化分享!如侵犯到您的合法权益请联系我们删除