簡體   English   中英

匯編中的“movl”指令

[英]"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM