AT&T x86 asm语法
2009-10-12 09:36:39 来源:WEB开发网我们让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
这是一个好的纯粹的汇编代码框架。
- ››AT&T更改数据资费标准:增加iPhone共享上网
- ››AT&T采购宏达电Android手机摆脱苹果独大
- ››AT&T将不再为新iPhone用户提供无限流量套餐
- ››AT2440EVB_II+WINCE5.0板上跑QT程序
- ››AT&T:今年iPhone销售量40%来自企业用户
- ››AT&T一季度净利31.3亿美元 iPhone 激活达270万
- ››AT&T限制员工六月休假 全力备战 iPhone 新版
- ››AT&T升级网络解决 iPhone 信号问题
- ››Atmail 6.1.6 发布
- ››AT&T 将以 iPhone 模式运营 Android
- ››AT&T 在 Android 新机上用 Yahoo 替换 Google 搜索...
- ››AT&T x86 asm语法
更多精彩
赞助商链接