WEB开发网
开发学院软件开发汇编语言 AT&T x86 asm语法 阅读

AT&T x86 asm语法

 2009-10-12 09:36:39 来源:WEB开发网   
核心提示:我们让gcc来保存和存贮eax, 如果必要的话,一个16-bit寄存器名代表了32-, 16-或8-bit寄存器,AT&T x86 asm语法(3), 如果我们要改写内存 (写入一个变量等,), 建议在register-modified字段里面来指定"memroy"修饰符,基本结构如下:.f

我们让gcc来保存和存贮eax, 如果必要的话。一个16-bit寄存器名代表了32-, 16-或8-bit寄存器。 如果我们要改写内存 (写入一个变量等。), 建议在register-modified字段里面来指定"memroy"修饰符。这意味着除了第一个例子我们都应该加上这个修饰符, 但是直到现在我才提出来, 是为了更简单易懂。

在你的内联汇编里面定位标号应该使用b或f来作为终止符, 尤其是向后向前的跳转。(译者注:b代表向后跳转,f代表向前跳转)

For example,
__asm__ __volatile__("
0:\n
...
jmp 0b\n
...
jmp 1f\n
...
1:\n
...
);

这里有个用c代码和内联汇编代码混合写的跳转程序的例子(thanks to Srikanth B.R for this tip).

void MyFunction( int x, int y )
{
__asm__( "Start:" );
__asm__( ...do some comparison... );
__asm__( "jl Label_1" );
CallFunction( &x, &y );
__asm__("jmp Start");
Label_1:
return;
}
External Asm

Blah... Okay fine. Here's a clue: Get some of your C/C++ files, 且用gcc -S file.c来编译。然后查看file.S文件。基本结构如下:

.file "myasm.S"
.data
somedata: .word 0
...
.text
.globl __myasmfunc
__myasmfunc:
...
ret

Macros, macros! 头文件libc/asmdefs.h便于你写asm。 在你的汇编代码最前面包含此头文件然后就可以使用宏了。一个例子: myasm.S:

#include
.file "myasm.S"
.data
.align 2
somedata: .word 0
...
.text
.align 4
FUNC(__MyExternalAsmFunc)
ENTER
movl ARG1, %eax
...
jmp mylabel
...
mylabel:
...
LEAVE

这是一个好的纯粹的汇编代码框架。

上一页  1 2 3 

Tags:AT amp asm

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接