MUL和XOR装配说明

时间:2015-06-25 22:51:43

标签: assembly

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:
}

1 个答案:

答案 0 :(得分:2)

  

MUL

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

xor_8:
    cmp ebx, 0x08;
    jne fac_9;
    xor edx, edx; //Clear edx
    mov edx, op1;
    mov eax, op2;
    xor eax, edx;
    jmp done;

P.S。自从我真正编写asm以来已经过了几十年了,所以这可能不是最好的解决方案,但是你要求的是简单的

  

编辑:修复MUL以使用有符号整数