x86汇编哪些寄存器涉及乘法和除法

时间:2012-05-22 03:46:53

标签: assembly x86 masm masm32

这是我的代码:

.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.我确切地将in1in2与哪个寄存器相乘? 2.“”分开他们? 3.其余部分存储在一个部门中?

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

注意: 有些人可能会说这篇帖子是x86 assembly - masm32: absolute breakdown of multiplication and division的重复,但是(如果我错了,请纠正我)更多尊重论坛社区发表新帖子,而不是给旧帖子添加评论并制作它无关。

1 个答案:

答案 0 :(得分:1)

如果您正在编写程序集,那么您永远不会离the reference spec

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

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

修改

您的问题没有/格式不正确,您的问题在同一条线上。

分部为DIV

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

说真的:阅读手册。