att汇编语法格式:操作数顺序指令 源 目标 寄存器引用要在寄存器号前加% 例如:mov %eax,%ebx 立即数前加$,例如:mov $4,%ebx变量前加$则表示该变量数值对应的地址 操作数长度...
att汇编语法格式:
操作数顺序
指令 源 目标
寄存器引用要在寄存器号前加% 例如:
mov %eax,%ebx
立即数前加$,例如:
mov $4,%ebx
变量前加$则表示该变量数值对应的地址
操作数长度,参数放在指令后面
b=byte(8bit) w=word(16bit) l=long(32bit) 例如movb
绝对转移和调用指令钱要加*
远转移和调用为ljmp/lcall
寻址方式:
disp(base,index,scale)=
base +index*scale+disp
C语言中的嵌入汇编:
_asm_(_有么有都可以)("asm statements" :=outputs:inputs:registers-modified); ""中的内容可以有多行,之间用;分开。
outputs为输出寄存器输出到的变量
inputs为输入寄存器,将变量输入到该寄存器
register-modified:要改变的寄存器
如果要用%则需要加2个%%,例如:
例如movw %1,%%eax;
%1则表示outputs:inputs:registers-modified中的第二个参数
"=a(b1)";"b"(a1);"%eax"则表示输出寄存器eax中的值赋给b1,输入则是把a1中的值赋给ebx 改变的是eax中的值
"a","b","c","d"分别表示eax ebx ecx edx
"S" "D"表示esi,edi "r"任何寄存器
AT&T汇编
1.在寄存器前面加上%
2.指令 source destination
3.立即数前面加$,否则认为是内存地址
4.操作数长度由加在指令的符号表示
b(byte)、w(word)、l(long)
5.在jmp/call要加上*
前面加l表示长跳转
7.返回指令
长跳转前加l
8.寻址
section:disp(base,index,scale)
计算方法
section:base+index*scale+disp
9.C嵌入汇编
_asm_("asm statements":outputs:inputs:regsters_modified);
调用寄存器时,前面需要加两个%
更多详细情况,参见《深入分析linux内核源代码》,50页
学员评论
wonderzy2015-02-12
Nothing_what2014-08-21
cocobar2014-05-02
sjyf2013-09-25
money_2162013-09-16
zzl7552013-07-27
2608461372013-06-07
轻步而来2013-03-13
商声主西方之音2013-03-10
Lisp2012-09-17
zstone2012-07-14
你感兴趣的课程
扫一扫 关注好知微信