2010-09-08 3 views
5

Кто-нибудь знает хороший способ сделать это?GCC C++ и встроенный код сборки?

Это не выглядит слишком дружелюбно:

__asm("command 1" 
     "command 2" 
     "command 3"); 
  1. ли я на самом деле должны поставить двойные кавычки вокруг каждой строки?
  2. Я единственный, кто думает, что это ГЛАВНАЯ partypooper?

Также ... поскольку многострочные литералы строки не работают в GCC, я тоже не мог обманывать это.

Благодарим за внимание. Имейте славный день.

ответ

8

Я всегда нахожу примеры в Интернете, которые парень вручную вставляет вкладку и новую строку вместо \ t и \ n, однако это не работает для меня. Не очень уверен, что, если ваш пример даже компилировать .. но это, как я делаю:

очень некрасивый способ:

asm("xor %eax,%eax"); 
asm("mov $0x7c802446, %ebx"); 
asm("mov $500, %ax"); 
asm("push %eax"); 
asm("call *%ebx"); 

Или это менее уродливым один:

asm("xor %eax,%eax   \t\n\ 
    mov $0x7c802446, %ebx \t\n\ 
    mov $1000, %ax   \t\n\ 
    push %eax    \t\n\ 
    call *%ebx    \t\n\ 
    "); 
+0

Благодаря спариванию, это более или меньше того, что я видел в примерах, однако, он по-прежнему остается «менее уродливым»! Убирает мою мотивацию от написания ас. –

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