当我编译我的汇编文件(下面的代码)时,我得到消息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
答案 0 :(得分:0)
克里斯·多德是对的,但发表评论而不是回答。由于每个答案都应该关闭,我回答了我自己的问题。
我使用的是一个带有32位%ebx的16位movw,书中的例子不正确。 movw将使用16位寄存器(如%bx)或movl将32位移入%ebx。