linux0.11内核学习笔记
嵌入汇编的用法举例:
选自traps.c:
#define get_set_byte(seg,addr) ({\ register char __res; \ __asm__("push %%fs; \ mov %%ax,%%fx; \ //用seg设置fs,嵌入汇编寄存器前需有两个% movb %%fs:%2,%%al; \ //取seg:addr处1字节内容到al寄存器 pop %%fs" \ :"=a" (__res) \ //输出寄存器列表,=表示输出寄存器 :"0" (seg), "m" (*(addr))); \ //输入寄存器列表,0表示使用与上面相同位置相同的寄存器 __res;}) //最后一行表示函数输出 __res (eax中的值在上面已经赋给__res)
|
常用寄存器加载代码说明:
a eax
b ebx
c ecx
d edx
S esi
D edi
q 动态分配字节可寻址寄存器 (eax ebx ecx 或 edx)
r 使用任意动态分配的寄存器
m 内存地址
阅读(654) | 评论(0) | 转发(0) |