Question

Here is my code:

.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 ("")

My question: 1. Exactly which register do I put in1 and in2 to multiply them? 2. " " to divide them? 3. Where is the remainder stored in a division?

And don't worry about a general statement, could you just tell me which registers will definitely (as close as possible) work in multiplication and division.

NOTE: Some may say that this post is a repetition of x86 assembly - masm32: absolute breakdown of multiplication and division , but (correct me if I am wrong) it is more respectful of the forum community to make a new post, rather than add comments to the old one and make it off topic.

Was it helpful?

Solution

If you're writing assembly, you should never be too far away from the reference spec:

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

Tells you everything you need to know. The result will be placed in AX. The sources are AL and any 8 bit register or memory location.

EDIT

Your question isn't/wasn't formatted correctly, your questions were on the same line.

Division is DIV:

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

Seriously: read the manual.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top