2012-05-22 37 views
-4

這裏x86彙編是我的代碼:哪些寄存器參與乘法和除法

.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的重複,但(糾正我,如果我錯了)它更尊重論壇社區,使一個新的職位,而不是添加註釋到老並使其脫離話題。

+2

對此的正確答案與鏈接問題[RTFM]的答案相同(http://www.intel.com/content/www/us/en/processors/architectures-software-developer- manuals.html)... – DCoder

回答

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 

認真:閱讀手冊。

+0

怎麼樣的語法? – Progrmr

+1

@Progrmr這一切都在文檔中。如果您熟悉x86,我發佈的摘錄就是您所需要的。如果你沒有,你需要做一些研究,閱讀和學習之前張貼在SO上。 –

+0

問題在於程序因乘法和除法而不斷關閉。我已經完成了研究和測試,我已經閱讀了關於'mul'和'div'的手冊部分,如果我能做到這一點,並且如果我沒有完成閱讀,研究和測試,我將不會發布。 – Progrmr