AT&T汇编格式

AT&T的语法格式:

1、寄存器的引用:

引用寄存器要在寄存器前加%,如mov %eax%ebx

2、操作数的顺序:

操作数排列时从源(左)到目的(右),如mov %eax(源),%ebx(目的)

3、常数/立即数的格式

a:使用立即数,要在数前面加$, mov $4, %ebx;把4赋值给ebx

b:符号常量直接引用;入mov value%ebx;把value所代表的值传递给ebx

c:引用符号地址在符号前加$,如mov $value%ebx;把value所在的地址付给ebx

4、操作数的长度

操作数的长度用加在指令后的符号表示

bbyte),wword),llong),如movw %ax%bx;表示吧word大小的ax寄存器中的内容放到bx中;如果是字节则用movb...

5、在AT&T汇编格式中,绝对转移和调用指令(jmp/call)的操作数千加上*作为前缀

6、远转移指令和远调用指令的操作码,在AT&T汇编格式中为ljmp/lcall

例如:ljmp $section$offset;长跳转到,section偏移为offset的位置;

      lcall $section$offset;调用,section偏移为offset的东西;

  远程返回:

  lret $stack_adjust

  寻址方式:

  section:disp(base,index,scale)表示,base+index*scale+disp

例如:

movl -4(%ebp),%eax;把ebp中的内容减去4以后放到eax

movl array(,%eax,4), %eax;把长度为longarray+4*eax地址中的数传递给eax

movw array(%ebx,%eax,4), %cx;把长度为wordarray+ebx+4*eax地址中的数传递给cx

movb $4, %fs:(%ebx);把长度为byte的立即数4传递给段位fs偏移为ebx的地址的位置;

嵌入汇编:

__asm__("asm statements":outputs:inputs:registers-modified)

asm statements”:汇编命令;

outputs”:输出参数;

inputs”:输入参数;

registers-modified”:修改的寄存器参数;

outputinput0开始计数,一共可以输入到910个参数;汇编中以0%-9%表示;        

"a","b","c","d"分别表示:eaxebxedx

"S","D" 寄存器:esiedi

'''r' 任何寄存器;

"0" 与前一个相同的寄存器;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值