[英]"movl" instruction in assembly
我正在學習匯編並閱讀“計算機系統:程序員的觀點”。 在練習題 3.3 中,它說movl %eax,%rdx
會產生錯誤。 答案鍵說movl %eax,%dx Destination operand incorrect size
。 我不確定這是否是錯字,但我的問題是: movl %eax,%rdx
是合法指令嗎? 我認為它將%eax
中的 32 位以零擴展名移動到%rdx
,因為它不會生成為movzql
以寄存器為目標生成 4 字節值的指令將用零填充高 4 字節(來自書中)。
我嘗試編寫一些 C 代碼來生成它,但我總是得到movslq %eax, %rdx
(GCC 4.8.5 -Og)。 我完全糊塗了。
GNU 匯編器不接受movl %eax,%rdx
。 它對編碼也沒有意義,因為mov
必須具有單個操作數大小(如果需要,使用前綴字節),而不是兩個不同大小的操作數。
您想要的效果是通過movl %eax, %edx
實現的,因為寫入 32 位寄存器總是零擴展到相應的 64 位寄存器。 請參閱為什么 32 位寄存器上的 x86-64 指令會將完整 64 位寄存器的上部歸零? .
movzlq %eax, %rdx
可能合乎邏輯,但它不受支持,因為它是多余的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.