2013-12-19 189 views
1

我有这样的指令:内联汇编不能正确解析

asm("message: .byte 'Hello, World!', 0x0A"); 

出于某种原因,编译器说:junk at end of line, first recognized character is 'e'。根据网络上的其他示例,我试图用db替换.byte。然后输出是no such instruction: 'db 72ello, World!440x0A'(注意数字而不是撇号)。对我来说,这似乎是'解析有问题。

我该怎么办?

回答

2
  1. .byte只适用于单个字节,如0xFA或'F'。
  2. db是intel语法,内联汇编使用GNU语法。

  3. 如上所述,.byte仅适用于一个字节。要使用字符串,请使用.ascii.asciz - 前者是一个简单的字节数组,而后者是空终止的。

即, asm("message: .asciz \"Hello, World!\n\"");

+0

它的工作,谢谢!你有参考,我可以阅读关于这种东西? –

+0

一般指南将GNU as manual(man as?)或者,访问内联汇编中的osdev wiki页面。 – zhiayang