在32位汇编代码中使用movw时,mov的指令后缀无效

时间:2016-03-01 00:36:37

标签: gcc assembly

当我编译我的汇编文件(下面的代码)时,我得到消息Error:指向我的movw指令行的'mov'的无效指令后缀。现在,我已经谷歌搜索了一下,仍然不明白这一点。我的CPU是64位,但是因为我清楚地告诉gcc生成32位代码不应该成为移动寄存器低16位的有效指令吗?我正在手边的书中逐字逐句地复制这个例子。

remnux @ remnux:〜/ Assembly $ gcc -o zx zx.s -gstabs -m32 zx.s:汇编程序消息: zx.s:10:错误:“mov”

的指令后缀无效
.code32
.section .data
myString:
  .asciz "eax is now %d\n"
.section .text
.globl main
main:
  movl $9999, %ebx
  movl $3, %eax
  movw %ax, %ebx
  pushl %ebx
  pushl %eax
  pushl %ebx
  pushl $myString
  call printf
  add $8, %esp
  popl %eax
  popl %ebx
  movzx %ax, %ebx
  pushl %ebx
  pushl %eax
  pushl %ebx
  pushl $myString
  call printf
  add $8, %esp
  call printf
  call exit

1 个答案:

答案 0 :(得分:0)

克里斯·多德是对的,但发表评论而不是回答。由于每个答案都应该关闭,我回答了我自己的问题。

我使用的是一个带有32位%ebx的16位movw,书中的例子不正确。 movw将使用16位寄存器(如%bx)或movl将32位移入%ebx。