彙編語言使用加減法實現有符號數除法

老問題了,今天突然想起來實現一下。主要有幾個問題要注意:

(1)同號則做減法,異號則做加法

(2)運算結束:若“被除數-或+除數”爲0結束,或其符號和“被除數”相反則結束,兩種情況還要做不同的處理

 

 

 

;使用加減法實現有符號數除法
;(1)同號則做減法,異號則做加法
;(2)運算結束:若“被除數-或+除數”爲0結束,或其符號和“被除數”相反則結束,兩種情況還要做不同的處理

;Denlee, 2010/01/14

 

;macro--testmacro
;測試2個數的符號位
;調用前將2個有符號數分別送入esi和edi
testsign macro
 mov ecx, 80000000h
 and esi, ecx
 and edi, ecx
 cmp esi, edi
 endm 

;procedure--division
;使用加減法實現有符號數除法
;入口:
; eax--被除數
; ebx--除數
;出口:
; eax--餘數
; edx--商
division proc
 push ecx
 push esi
 push edi
 mov edx, 0 ;商賦初值0
 cmp ebx, edx
 ;除數爲0退出
 jz exit
 ;同號做減法, 異號做加法
 mov esi, eax
 mov edi, ebx
 testsign
 jnz addition
subtraction:
 inc edx
 mov esi, eax
 sub eax, ebx
 cmp eax, 0
 jz exit
 mov edi, eax
 ;符號變反則結束
 testsign
 jnz exitsub
 jmp subtraction
addition:
 dec edx
 mov esi, eax
 add eax, ebx
 cmp eax, 0
 jz exit
 ;符號變反則結束
 mov edi, eax
 testsign
 jnz exitadd
 jmp addition
exitadd:
 ;恢復商
 inc edx
 ;恢復餘數
 sub eax, ebx
 jmp exit
exitsub:
 ;恢復商
 dec edx
 ;恢復餘數
 add eax, ebx
 jmp exit
exit:
 pop edi
 pop esi
 pop ecx
 ret
division endp

 

可能不是最優實現,希望有更好的實現交流。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章