-4

这是我的代码:

.data
        ans1 db 0
        ans2 db 0
.data? 
        in1 db 100 dup(?) ; first input value
        in2 db 100 dup(?) ; second input value
.code
start:
        ; here I have code for input 
        ; I get 2 nums, and I want to multiply and divide them
        ; here is what I already have to mul/div them:
        lea eax, in1
        lea edx, in2
        imul eax ; multiply in1 and in2
        mov ans1, eax ; move result to ans1
        xor eax, eax ; clear register
        xor edx, edx ; " "
        lea eax, in1
        lea edx, in2
        idiv eax ; divide in1 by in2
        mov ans2, eax ; move result to ans2
        lea eax, ans1
        push eax
        call StdOut ; print ans1 (I have include instructions at the start)
        lea ebx, ans2
        push ebx  
        call StdOut ; print ans2 ("")

我的问题: 1. 我到底应该放哪个寄存器并将in1它们in2相乘?2.“”来划分它们?3. 余数在除法中存储在哪里?

不要担心一般性的陈述,你能告诉我哪些寄存器肯定(尽可能接近)在乘法和除法中工作。

注意:有些人可能会说这篇文章是x86 汇编的重复 - masm32:乘法和除法的绝对崩溃,但是(如果我错了,请纠正我)发新帖子而不是添加更尊重论坛社区对旧的评论并使其脱离主题。

4

1 回答 1

1

如果您正在编写程序集,则永远不要离参考规范太远:

Unsigned multiply (AX ← AL ∗ r/m8).

告诉你你需要知道的一切。结果将放在AX. 源是 AL 和任何 8 位寄存器或内存位置。

编辑

您的问题的格式不正确/格式不正确,您的问题在同一行。

划分是DIV

Unsigned divide AX by r/m8, with result stored in AL ← Quotient, AH ← Remainder

认真:阅读手册。

于 2012-05-22T04:18:22.103 回答