我使用当前代码收到分段错误错误。我尝试过更改[edx] / edx /%[edx] / [%edx]的许多不同变体但没有成功。我想将edx寄存器内容设置为null。这是一个使用gcc的.c文件。 Linux上的英特尔处理器。
#include <stdio.h>
int main()
{
asm("mov %edx, /0");
return 0;
}
答案 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 |
+------------------------------+------------------------------------+