汇编语言使用加减法实现有符号数除法
2010-01-14 17:34
447 查看
老问题了,今天突然想起来实现一下。主要有几个问题要注意:
(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
可能不是最优实现,希望有更好的实现交流。
(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
可能不是最优实现,希望有更好的实现交流。
相关文章推荐
- 汇编语言中使用有符号数还是无符号数问题
- 汇编语言中使用有符号数还是无符号数问题
- 汇编语言使用转义字符实现简单的“全屏”文本输出
- 8086汇编语言自学经验分享 使用Int21h中断例程中的9号子程序实现hello world
- 汇编语言中使用有符号数还是无符号数问题
- 使用汇编语言解决除法溢出问题
- 汇编语言学习笔记-使用对话框
- 如何在Android中使用汇编语言
- linux 嵌入汇编语言的使用方法
- 使用SWIG实现C/C++与其他语言间的互相调用
- verilog 实现无符号整数除法运算
- 汇编语言学习笔记第十七章 使用BIOS进行键盘输入和磁盘读写
- 多种数制显示的汇编语言编程实现
- 使用socket实现简单的客户端和服务端通信(C#语言)
- 汇编语言笔记17-使用BIOS进行键盘输入和磁盘读写
- 带符号大整数加减法,乘法,除法,模除,指数
- 使用C#和CodeDOM技术实现语言无关的Code Wizard
- C 和 汇编语言的混合编程(实时控制TLC1549的实现)
- 汇编语言--使用BIOS进行键盘输入和磁盘读写
- 汇编语言中常用进制数据输出的程序实现