Linux 内核学习—AT&T汇编语法格式
AT&T汇编语法格式
-
寄存器引用
引用寄存器要在寄存器号前加%,如:
mov % eax, % ebx -
操作数顺序
操作数排列是从左到右,如:
mov % eat(源), % ebx(目的) -
常数/立即数格式
使用立即数,要在数前面加$,如:
Mov 4,引用符号地址在符号前加4, % ebb 引用符号地址在符号前加4,引用符号地址在符号前加,如:
mov $value, % ebb -
跳转
绝对转移和调用指令(jmp/call)的操作数前要加上“*”做前缀
远转移和远调用指令写作:‘ljmp’, ‘lcall’
ljmp $section, $offset == jmp far section:offset
lcall $section, $offset == call far section:offset
lret $stack_adjust == ret far stack_adjust -
寻址方式
section:[base + index * scale +disp]
section:disp(base, index, scale)
exm:
movl array(, %eax, 4), %eax == mov eax, [eax * 4 + array]
嵌入式格式
Intel —— asm(“asm statements”: outputs : inputs :registers-modified);
Outputs表示在这段代码结束后,输出的寄存器哪个
Inputs 是在本段代码执行之前,这段汇编代码用到的参数
Registers-modified 在本段代码中,会被修改的寄存器
a, b, c, d分别表示寄存器eax, ebx, ecx, edx
Int main()
{
Int a1 = 10, b1 = 0;
asm(“movl %1, %%eax;\n\r” //把ebx中的内容,赋给eax
“movl %%eax, %ecx;”
:”=a”(b1) //把输出寄存器中的内容,赋给b1
:”b”(a1) //把a1当中的内容,付给ebx寄存器
:”%eax”); //会改变的寄存器
printf(“Result: %d, %d\n”, a1, b1);
}
- Linux内核学习笔记-AT&T汇编语法
- Linux下AT&T汇编语法格式简介(Haison整理)
- Linux下AT&T汇编语法格式简介
- 【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)
- AT&T 格式Linux 汇编语法
- Linux下AT&T汇编语法格式简介1
- Linux下AT&T汇编语法格式简介
- linux 0.11 内核学习 -- rs_io.s,串口汇编代码
- Linux 汇编语法格式
- Linux下AT&T汇编语法简介二
- Linux 内核入门学习笔记(一) AT&T汇编基础
- linux 0.11 内核学习 -- rs_io.s,串口汇编代码
- AT&T 格式Linux 汇编语法格式
- Linux下AT&T汇编语法格式简介2
- Linux 汇编语法格式
- [转载]【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)
- Linux下ARM汇编语法(转载学习)
- 【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)
- <学习html>第一天笔记-浏览器内核、web标准、html标准语法格式
- 【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)