概述
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;nr” //把ebx中的内容,赋给eax
“movl %%eax, %ecx;”
:”=a”(b1) //把输出寄存器中的内容,赋给b1
:”b”(a1) //把a1当中的内容,付给ebx寄存器
:”%eax”); //会改变的寄存器
printf(“Result: %d, %dn”, a1, b1);
}
最后
以上就是忧心咖啡豆为你收集整理的Linux 内核学习—AT&T汇编语法格式的全部内容,希望文章能够帮你解决Linux 内核学习—AT&T汇编语法格式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复