繁体   English   中英

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

[英]How to insert literal into register using asm function in .c file

我在当前代码中遇到了分段错误错误。 我尝试了许多不同的更改[edx] / edx /%[edx] / [%edx]的变化,但均未成功。 我想将edx寄存器的内容设置为null。 这是使用gcc的.c文件。 Linux上的Intel处理器。

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

我认为您正在将AT&T语法(在gcc中使用)与Intel语法混合在一起,其中第一个寄存器是目的地。 看看这个页面:

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 |
+------------------------------+------------------------------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM