當前位置:首頁 » 操作系統 » 演算法匯編

演算法匯編

發布時間: 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 08:01:32 瀏覽:349
問道安卓哪個服人最多 發布:2025-03-03 07:53:43 瀏覽:324
編譯nm 發布:2025-03-03 07:39:47 瀏覽:779
android藍牙斷開 發布:2025-03-03 07:39:47 瀏覽:805
devc沒有編譯按鈕 發布:2025-03-03 07:09:56 瀏覽:747
24核32g配置怎麼樣 發布:2025-03-03 07:06:54 瀏覽:553
和平精英哪裡顯示自己的賬號密碼 發布:2025-03-03 06:56:16 瀏覽:584
我的世界伺服器成就 發布:2025-03-03 06:50:59 瀏覽:340
java壓力測試 發布:2025-03-03 06:45:18 瀏覽:491
淘寶源碼編輯 發布:2025-03-03 06:43:37 瀏覽:1001