Assembly 如何创建只使用寄存器表示标识符的汇编语言?

Assembly 如何创建只使用寄存器表示标识符的汇编语言?,assembly,x86,masm,Assembly,X86,Masm,为了澄清,问题是: 工资=正常工作时间*3+加班时间*2-福利*3 它不能使用变量(.data) 这是我迄今为止创造的: mov eax,3 mov ebx,2 mul ebx call dumpRegs mov ecx,2 mov ebx,2 mul ebx call dumpRegs mov edx,3 mov ebx,5 mul ebx call dumpRegs 好的,以上两条指令计算是

为了澄清,问题是:

工资=正常工作时间*3+加班时间*2-福利*3

它不能使用变量(
.data

这是我迄今为止创造的:

    mov eax,3
    mov ebx,2
    mul ebx
    call dumpRegs

    mov ecx,2
    mov ebx,2
    mul ebx
    call dumpRegs

    mov edx,3
    mov ebx,5
    mul ebx
    call dumpRegs
好的,以上两条指令计算是否正确,由edx寄存器继续为零


我的问题是,如何计算包含reg+reg-reg和一个reg的总和的工资?

步骤1:在进入步骤2时,按照有意义的顺序执行三个更高优先级的操作:

benifit * 3        // question: why would you do this calculation first?
reghours * 3
overtimehours * 2
在每次计算之后,将中间结果推送到堆栈上

步骤2:完成所有三个计算后,从堆栈中弹出三个中间结果,开始计算最终结果

瞧:不,数据空间被占用了。这个家庭作业练习可能是为了让你理解和使用堆栈。顺便说一下,你没有检查家庭作业标签


您也可以通过在寄存器中保存中间结果来解决此问题,但这有点困难:即。,它要求您仔细考虑要保存的中间结果以及计算和保存它们的时间。

步骤1:按顺序执行三个更高优先级的操作,以便在进入步骤2时有意义:

benifit * 3        // question: why would you do this calculation first?
reghours * 3
overtimehours * 2
在每次计算之后,将中间结果推送到堆栈上

步骤2:完成所有三个计算后,从堆栈中弹出三个中间结果,开始计算最终结果

瞧:不,数据空间被占用了。这个家庭作业练习可能是为了让你理解和使用堆栈。顺便说一下,你没有检查家庭作业标签

您也可以通过将中间结果保存在寄存器中来解决此问题,但这有点困难:即,它要求您仔细考虑要保存哪些中间结果以及何时计算和保存它们。

参考我们可以看到,您使用的
mul
指令是:

F7 /4 MUL r/m32    Unsigned multiply (EDX:EAX ← EAX ∗ r/m32).
换句话说,
eax
乘以给定的操作数(
ebx
,在这种情况下),得到存储在
edx:eax
中的64位结果,即最高32位存储在
edx
中,最低32位存储在
eax

因此:

edx:eax
设置为
6=00000000:00000006
,这就是
edx
被清除的原因

保存寄存器的标准方法是将它们压入堆栈(
push-edx
),然后恢复它们(
pop-edx
)。由于您的程序中没有那么多变量,您也可以使用其中一条有符号乘法指令,该指令不要求操作数和结果在
edx
eax

e、 g

这允许您执行
imul eax,eax,3
eax
乘以3

将其与实际计算值相结合。

参考我们看到,您使用的
mul
指令是:

F7 /4 MUL r/m32    Unsigned multiply (EDX:EAX ← EAX ∗ r/m32).
换句话说,
eax
乘以给定的操作数(
ebx
,在这种情况下),得到存储在
edx:eax
中的64位结果,即最高32位存储在
edx
中,最低32位存储在
eax

因此:

edx:eax
设置为
6=00000000:00000006
,这就是
edx
被清除的原因

保存寄存器的标准方法是将它们压入堆栈(
push-edx
),然后恢复它们(
pop-edx
)。由于您的程序中没有那么多变量,您也可以使用其中一条有符号乘法指令,该指令不要求操作数和结果在
edx
eax

e、 g

这允许您执行
imul eax,eax,3
eax
乘以3


将此与实际计算值相结合。

好的,但我只是个新手。我是这门课的学生,但老师没有检查过。第1章和第3章…我们怎么知道第1章和第3章涵盖了什么,或者它是为了一项作业?好吧,但我只是个新手。我是这门课的学生,但老师没有检查过。第1章和第3章…我们怎么知道第1章和第3章涵盖了什么,或者它是为了一项作业?