【发布时间】:2015-06-25 22:51:43
【问题描述】:
inb4:是的,我已经看到过类似的问题,之前发布的任务相同,但是我的略有不同。 好的,这是编码任务,创建一个基本的计算器。我已经完成了大部分功能,除了两个:MUL 和 XOR。 MUL 已实现,但是要获得完整的功劳,我们需要在不使用实际 MUL 操作的情况下实现它。环形? 对于 XOR 函数,我只是稍微偏离了输出。寄存器没有清零? 这是我在英特尔汇编中的第二周编程,所以在这一点上我几乎一无所知。不知道如何实现循环,所以一些可靠的帮助会很棒。 谢谢 这是一个 C 函数中的汇编代码,它接受一个运算符和两个整数。
__asm
{
mov eax, 0; zero out the result
mov ebx, opcode; move opcode to ebx for comparison
cmp ebx, 0x01; check for ADD
jne sub_2;
mov eax, op1;
add eax, op2;
jmp done;
sub_2:
cmp ebx, 0x02;
jne mul_3;
mov eax, op1;
sub eax, op2;
jmp done;
mul_3:
cmp ebx, 0x03;
jne div_4;
mov eax, op1;
mul op2; //NOT supposed to use MUL
jmp done;
div_4:
cmp ebx, 0x04;
jne mod_5;
mov eax, op1;
cdq; //32bit number turns into 64bit for eax
idiv op2;
jmp done;
mod_5:
cmp ebx, 0x05;
jne and_6;
xor edx, edx; //Clear edx;
mov eax, op1;
cdq; //32bit to 64 for eax;
idiv op2;
mov eax, edx;
jmp done;
and_6:
cmp ebx, 0x06;
jne or_7;
xor edx, edx; //Clear edx
mov eax, op1;
and eax, op2;
jmp done;
or_7:
cmp ebx, 0x07;
jne xor_8;
xor edx, edx; //Clear edx
mov eax, op1;
xor eax, op2;
jmp done;
xor_8:
cmp ebx, 0x08;
jne fac_9;
xor edx, edx; //Clear edx
mov edx, op1;
xor eax, op2;
jmp done;
fac_9:
cmp ebx, 0x09;
jne done;
xor edx, edx; zero out the register
mov eax, op1;
cmp eax, 0;
mov ecx, op1;
DEC ecx;
mov ebx, 1;
L1:
mul ebx;
INC ebx;
LOOP L1;
jmp done;
done:
}
【问题讨论】:
-
我投票结束这个问题,因为它似乎是对另一个用户的回复。
-
我不确定您希望我们具体提供哪些帮助。你的问题具体是什么?你试过什么了?到目前为止,您进行了哪些调试?另外,这有C++标签有什么原因吗?
-
问题是:实现MUL而不使用Mul操作符。并且 XOR 函数实现是否正确。
-
自己尝试一下,在不使用乘法的情况下计算出 3 x 3 是什么。我打赌你可以。
-
直到现在我还没有在汇编中编程过。我什至不知道是否存在 for 循环。当然,将 op1 乘以 op2 次。我只是不知道语法。
标签: assembly