当前位置:首页 » 操作系统 » 算法汇编

算法汇编

发布时间: 2023-08-29 03:47:36

⑴ 汇编如何通过移位和减法实现32位除法,求具体算法

;2进制完成除法运算就是移位和相减,比如1011011除以1110顺序如下:
; 1 - 1110 不够减, 结果添0, 1左移一位再加上原来1后的0,为10
; 10 - 1110 不够减, 结果添0, 10左移一位再加上原来10后的1,为101
; 101 - 1110 不够减, 结果添0, 101左移一位再加上原来101后的1,为1011
; 1011 - 1110 不够减, 结果添0, 1011左移一位再加上原来1011后的0,为10110
;10110 - 1110 = 1000 结果添1,同上左移加原来10110后的1得 10001
;10001 - 1110 = 11 结果添1,同上左移加原来101101后的1得 111
; 111 - 1101 不够减,结果添0,此时1011011所有位都已移完,运算完毕
;即 1011011 = 1110 * 0110 + 111
;也即 91 = 14 * 6 + 7
bcs0 dw ? ;被除数
bcs1 dw ? ;被除数
cs0 dw ? ;除数
cs1 dw ? ;除数
shang0 dw ? ;商
shang1 dw ? ;商
ys0 dw ? ;余数
ys1 dw ? ;余数
;此程序可实现32BIT/32BIT,也可实现32BIT/16BIT,无溢出错误,除16位是CS1要送0
; call DIV_32_32BIT ;in cs:[bcs0,1],cs:[cs0,1],get cs:[shang0,1],dw
DIV_32_32BIT Proc Near
push cx
mov ax,0
mov cs:[shang0],ax
mov cs:[shang1],ax
mov cs:[ys0],ax
mov cs:[ys0],ax ;商和余数清零
mov cx,32 ;循环次数
NEXT_BIT:
mov ax,cs:[bcs0]
rcl ax,1
mov cs:[bcs0],ax
mov ax,cs:[bcs1]
rcl ax,1
mov cs:[bcs1],ax ;被除数左移一位,最高位送CF

mov ax,cs:[ys0]
rcl ax,1
mov cs:[ys0],ax
mov ax,cs:[ys1]
rcl ax,1
mov cs:[ys1],ax ;被除数最高位经CF移入余数

mov ax,cs:[ys1]
cmp ax,cs:[cs1]
jb GET_SHANG_0
je CMP_LOW_BYTE
GET_SHANG_1:
mov ax,cs:[ys0]
sub ax,cs:[cs0]
mov cs:[ys0],ax
mov ax,cs:[ys1]
sbb ax,cs:[cs1] ;带借位减法
mov cs:[ys1],ax
stc
jmp CF_IN_SHANG
GET_SHANG_0:
clc
CF_IN_SHANG:
mov ax,cs:[shang0]
rcl ax,1
mov cs:[shang0],ax
mov ax,cs:[shang1]
rcl ax,1
mov cs:[shang1],ax
loop NEXT_BIT
pop cx
ret
CMP_LOW_BYTE:
mov ax,cs:[ys0]
cmp ax,cs:[cs0]
jb GET_SHANG_0
jmp GET_SHANG_1
DIV_32_32BIT endp

热点内容
原神如何在电脑端切换服务器 发布:2025-03-03 20:22:53 浏览:243
数据库提取数据 发布:2025-03-03 20:22:49 浏览:228
ftp设置只能上传 发布:2025-03-03 20:22:43 浏览:635
如何显示本机连接的wifi密码 发布:2025-03-03 20:21:50 浏览:64
如何检查linux服务器被防火墙挡住 发布:2025-03-03 20:19:28 浏览:331
丹姿水密码上的日期是什么 发布:2025-03-03 20:12:36 浏览:439
linuxroot给用户权限 发布:2025-03-03 19:50:34 浏览:679
android社招 发布:2025-03-03 19:42:01 浏览:917
打印mybatissql 发布:2025-03-03 19:33:51 浏览:7
c语言中的浮点数 发布:2025-03-03 19:28:25 浏览:780