2

我现在正在尝试使用 gcc 和 codeblock 编译以下代码:

#include <stdio.h>

int main()
{

  char alphabet = 'X';
  printf ("Type letter = ");
    asm{                                //line 8
       mov ah, 02
       mov dl, [alphabet]               // line 9
       int 21h
     }

 printf ("\n");
 return (0);
}

我得到的错误信息如下:

  error: expected '(' before '{' token  line 8
  error: 'mov' was not declared in this scope line9 

我正在为 x86 计算机编译,想知道如何成功编译上述代码。谢谢!

4

1 回答 1

3

不幸的是 gcc 不支持这样的简单语法:

asm {
    mov ah, 02
    mov dl, [alphabet]
    int 21h
}

您可以通过 DCoder 评论的链接找到有关 gcc-inline-assembler 的更多信息:单击我
解释一切对于答案来说太过分了,所以我只是为 gcc 编写代码,它应该可以为您完成工作:

__asm__(
    "movb $2, %%ah;"
    "movb %0, %%dl;"
    "int $0x21;"
    :
    : "r"(alphabet)
    : "%ah", "%dl"
);

请注意,您也可以使用关键字asm代替__asm__.

于 2012-12-26T11:56:42.077 回答