我需要用简单的汇编语言(而不是汇编语法)编写一个程序来计算两个二进制数16位的除法而没有O(logn)中的提醒,我想知道是否有一个有效的算法来做它
如果在网上找到了一些算法,但所有这些算法都在寻找对数字中特定位的访问权限,而我无法做到这一点。
我所拥有的唯一算术运算是+, - ,向右/向左移动但只有每个操作,&,|,!这显然都是......
谢谢,
Eliav的
答案 0 :(得分:0)
这应该有效。 它对你有帮助吗?
C-风格:
c=1;
// find the maximum n for b*2^n <= a
// c=2^n
while((b << 1) <= a) {
b = b << 1;
c = c << 1;
}
while (c > 0) {
if (a - b >= 0) {
a -= b;
result += c;
}
c = c >> 1;
b = b >> 1;
}
汇编风格:
registers s0,s1,s2,s3, zero
syntax <instr.> <dest>,<src>,<arg>
%result: s0
%a: s1
%b: s2
%c: s3
add, s3, zero, 1
loop_1_start:
left_shift s4,s2,1
jump_if_greater s4,s1,loop_1_end
left_shift s2,s2,1
left_shift s3,s3,1
jump loop_1_start
loop_1_end:
loop_2_start:
jump_if_greate_or_equal s3,zero,loop_2_end
if_start:
sub s4,s1,s2
jump_if_smaller s4, zero, if_end
sub s1,s1,s2
add s0,s0,s3
if_end:
right_shift s2,s2,1
right_shift s3,s3,1
jump loop_2_start
loop_2_end: