乘和除都可以用移位和加减来实现
乘数、被乘数都要先转化为二进制,二进制的乘法远比十进制简单,比如乘数是1011,只需将将被乘数分别左移3位、1位,移动后补入0,并将这三个数(被乘数左移3位的、被乘数左移1位的及未移位的被乘数)在累加器中相加,所得总和就是积,根据需要积可再转化为十进制。
除法与乘法类似,只不过将左移改为右移,加改成减。实际上减也是通过取补码后再加,因此计算机芯片上的累加器是最繁忙的部分。
原理问题,计算机算法
乘法:
被乘数移位加。 =======左移和加法可以实现乘法
模拟 16bits 乘法用 x86 汇编语句描述如下:
xor eax,eax
mov ebx,16bits data
mov edx,16bits data
mov ecx,20H
clc
@@1:
shl eax,1
rol edx,1
jnc @@2
add eax,ebx
@@2:
loop @@1
next:
除法:
被除数移位减。。。
模拟除法用 x86 汇编语句描述如下:
xor eax,eax
mov ebx,divisor
mov edx,dividend
mov ecx,20H
@@1:
shld eax,edx,1
cmp eax,ebx
jl @@2
sub eax,ebx
inc edx
@@2:
loop @@1
next:
; 乘法的被乘数和乘数不需要区分
; 除法的被除数和除数必须区分,这和串连移位所使用的寄存器有关。余数存储在 EAX,商存储在 EDX
方法就是:
一,先把被除数放到一个寄存器中,比如,al中,再把ah赋0即被除数为ax
二,ax左移一位,将ah减去除数,结果为负用加法恢复上面的内容
阅读(7248) | 评论(0) | 转发(0) |