[英]MUL and XOR Assembly Instructions
inb4:是的,我之前看到过类似的问题,但分配的任务相同,但是我的略有不同。 好的,这是编码任务,创建一个基本的计算器。 除了两个:MUL和XOR,我已经完成了大多数功能。 实现了MUL,但是要获得全部信用,我们需要在不使用实际MUL操作的情况下实现它。 环? 对于XOR函数,我只是略微降低了输出。 寄存器未清除? 这是我第二周在intel汇编中进行编程,所以到此为止我几乎一无所知。 不知道如何实现循环,因此一些可靠的帮助将非常有用。 谢谢这是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:
}
UL
mul_3:
cmp ebx, 0x03;
jne div_4;
mov edx, op1;
mov eax, 0;
mov ecx, op2;
test ecx, ecx;
jz done;
jns mul_add;
neg ecx;
neg edx;
mul_add:
add eax, edx;
loop mul_add;
jmp done;
异或
xor_8:
cmp ebx, 0x08;
jne fac_9;
xor edx, edx; //Clear edx
mov edx, op1;
mov eax, op2;
xor eax, edx;
jmp done;
PS自从我真正编写了asm以来已经过去了几十年,所以这可能不是最好的解决方案,但是您要求的是一些简单的方法
编辑:固定MUL与带符号的整数一起使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.