2013-12-19 5 views
1

У меня есть эта инструкция:Встроенный ассемблер не разбирается правильно

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

По какой-то причине компилятор говорит junk at end of line, first recognized character is 'e'. Я попытался заменить .byte на db в соответствии с другими примерами в Интернете. Тогда выход был no such instruction: 'db 72ello, World!440x0A' (обратите внимание на цифры вместо апострофа). Мне кажется, что что-то не так с разбором '.

Что я могу сделать?

ответ

2
  1. .byte работает только для одного байта, например 0xFA, или 'F'.
  2. db - синтаксис intel, встроенная сборка использует синтаксис GNU.

  3. Как упоминалось выше, .byte работает только для одного байта. Чтобы использовать строки, используйте либо .ascii, либо .asciz. Первый - это простой массив байтов, а последний - с нулевым завершением.

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

+0

Это сработало, спасибо! У вас есть ссылка, где я могу читать об этом? –

+0

Общим руководством будет GNU в качестве руководства (человек как?). Кроме того, посетите страницу wsdev wiki на встроенной сборке. – zhiayang

Смежные вопросы