我知道imul是帶符號的乘法,文檔似乎暗示三個操作數的語法是imulq dest, source1, source2
。因此該行將讀爲:將存儲在%rbx中的地址的內容與%rax中的值相乘,然後將其存儲在內存位置44中,但這肯定不正確?
0
A
回答
2
您使用的是imul
指令,該指令在指令集的參考定義爲IMUL r64, r/m64, imm8
,並指「imm8
正片r/m64
內容和存儲的三操作數變異導致r64
「。這個指令還有另一個變種,它需要一個32位立即數,但在這種情況下,不可能知道彙編器實際發出哪個變體。
現在,您的彙編程序似乎正在使用x86彙編的AT & T語法。它由GNU彙編程序默認使用。已知以相反的順序指定指令的操作數。因此,imulq $44, (%rbx), %rax
將把存儲在%rbx
中的地址的存儲器的內容乘以44
,並將結果存儲在%rax
中。
0
我在閱讀操作數的順序與文檔描述方式有所不同。
它讀作:「獲取存儲在寄存器rbx的內存地址中的帶符號整數值,乘以44,並將結果放入寄存器rax。」
或者乾脆: imulq multiplier1, multiplier2, destination
+1
它實際上是'imulq multiplier2,multiplier1,destination'。 AT&T語法中的參數全部顛倒過來。當你看看英特爾的文檔時,你需要改變他們的說法。 (當然,在這種情況下它並不重要,因爲乘法是可交換的。) –
相關問題
- 1. R在RAX,RBX,RCX,RDX,RSI,RDI,RBP,RSP中代表什麼?
- 2. 「mov offset(%rip),%rax」是做什麼的?
- 3. 「nop dword ptr [rax + rax]」x64彙編指令是做什麼的?
- 4. 溢出時,%rbx,%rsi會做什麼?
- 5. 這個大會x86線做什麼?
- 6. rbx-2.0.0-rc1和rbx-2.0.0-dev有什麼區別?
- 7. PYTHON 3中float(44 * 2.2)和(float)(44 * 2.2)的區別是什麼?
- 8. RAX註冊名稱是什麼?
- 9. 我們是否也將寄存器RAX,RBX等稱爲R1,R2等?
- 10. JS在Assembly x86中做什麼?
- 11. 「mov(%rax),%eax」和「mov%rax,%eax」有什麼區別?
- 12. -pie是做什麼的?
- 13. 這條Javascript線是做什麼用的?
- 14. C,這條線是做什麼的?
- 15. java「VM線程」是做什麼的?
- 16. 這條線是做什麼的?
- 17. c:這條線是做什麼的?
- 18. 「.align」x86彙編程序指令是做什麼的?
- 19. x86是什麼意思?
- 20. 是什麼x86和x64
- 21. 在x86彙編語言中CLD和STD是什麼? DF做什麼?
- 22. std :: thread.join()是做什麼的?
- 23. 什麼是x86 cr0 WP位的目的?
- 24. adodb:createparameter是做什麼的?
- 25. myVar = {}是做什麼的?
- 26. 什麼「?」做?什麼是__FILE__?
- 27. 什麼是setDetailItem:做什麼?
- 28. atg.servlet.pipeline.CanonicalSessionHostnameServlet是做什麼的?
- 29. 爲什麼x86是小端的?
- 30. OSX x86 GAS .macros的語法是什麼?
您在英特爾語法和AT&T語法之間混淆不清。 –
[AT&T語法與英語語法相比,源操作數的順序是什麼?](http://stackoverflow.com/questions/7548509/what-is-the-order-of-source-operands-in- att-syntax-comparison-to-intel-syntax) –