【由尚德内核编程学习笔记1】AT&T汇编语法
mov %eax , %ebx 源 目的 寄存器前加%
mov $4,%ebx 立即数前加$
mov VALUE,%ebx 符号常数直接引用
mov $VALUE,%ebx 符号地址在符号前加$
movl , movw , movb 操作数长度(long 32位, word 16位, byte 8位)
*jmp *call 跳转 调用
ljmp lcall lret 远跳转 远调用 远返回
寻址方式:
section:disp(base,index,scale) 计算方法是:
base+index*scale+disp
asm("asm satements" : outputs : inputs:registers-modified);
statement中寄存器前要加%%
输出寄存器,汇编代码输入的参数,汇编代码执行中被修改的寄存器
输入和输出寄存器0——9 排序
a ,b,c,d 表示 eax,ebx,ecx,edx
S D 寄存器esi, edi
r 任何寄存器
0 零,和前面寄存器相同位置
m 内存地址
例:
int a1=10,b1=0;
asm("movl %1,%%eax"
:"=a"(b1)
:"b"(a1)
:"%eax");
执行结果: a1放入ebx,ebx放入eax,eax放入b1,故a1=10,b1=10