如何使用.c文件中的asm函数将文字插入寄存器

时间:2014-10-02 00:55:33

标签: c assembly

我使用当前代码收到分段错误错误。我尝试过更改[edx] / edx /%[edx] / [%edx]的许多不同变体但没有成功。我想将edx寄存器内容设置为null。这是一个使用gcc的.c文件。 Linux上的英特尔处理器。

#include <stdio.h>
int main()
{
    asm("mov %edx, /0");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

我认为您正在将AT&amp; T语法(在gcc中使用)与英特尔语法混合,其中第一个寄存器是目标。看看这个页面:

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

+------------------------------+------------------------------------+
|       Intel Code             |      AT&T Code                     |
+------------------------------+------------------------------------+
| mov     eax,1                |  movl    $1,%eax                   |   
| mov     ebx,0ffh             |  movl    $0xff,%ebx                |   
| int     80h                  |  int     $0x80                     |   
| mov     ebx, eax             |  movl    %eax, %ebx                |
| mov     eax,[ecx]            |  movl    (%ecx),%eax               |
| mov     eax,[ebx+3]          |  movl    3(%ebx),%eax              | 
| mov     eax,[ebx+20h]        |  movl    0x20(%ebx),%eax           |
| add     eax,[ebx+ecx*2h]     |  addl    (%ebx,%ecx,0x2),%eax      |
| lea     eax,[ebx+ecx]        |  leal    (%ebx,%ecx),%eax          |
| sub     eax,[ebx+ecx*4h-20h] |  subl    -0x20(%ebx,%ecx,0x4),%eax |
+------------------------------+------------------------------------+