扩展的asm:" mov'无效的指令后缀

时间:2014-10-07 14:15:27

标签: c gcc assembly

使用i686-elf-gcc和i686-elf-ld进行编译和链接。

/tmp/ccyjfCee.s:25: Error: invalid instruction suffix for 'mov' makefile:21: recipe for target 'Release/boot.o' failed

当我尝试将movw %0, %%dx修改为movw $0x1, %%dx时。它成功编译和链接。所以我想知道为什么线路有问题。根据{{​​1}},pStr的偏移地址应为16位,适合.code16寄存器。它有什么问题?

dx

1 个答案:

答案 0 :(得分:2)

从技术上讲,您可以使用.code16gcc指令生成16位代码,并使用%w0替换来强制使用字大小的寄存器。

请注意,上面只允许您创建一个程序,该程序将在DOS下以16位实模式运行(经过一些后处理以使其达到正确的格式)。如果这不是你想要的,你将需要使用适当的OS系统调用而不是int 0x21,而不是写16位代码。