我知道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) –