gcc嵌入式汇编2.pdfVIP

  • 3
  • 0
  • 约1.87万字
  • 约 6页
  • 2016-03-12 发布于山西
  • 举报
gcc嵌入式汇编2

内核源码学习:Gcc嵌入式汇编 (二)_Aurola_百度空间 Page 1 of 6 mousehecat | | 退出 Aurola 星际之门亚特兰蒂斯 主页 博客博客 相册 | 个人档案 | 好友 博客博客 查看文章查看文章 查查看文章看文章 内核源内核源码学码学习习:: 嵌入式嵌入式汇编汇编 (二(二)) 内内核源核源码码学学习习::Gcc嵌入式嵌入式汇编汇编 ((二二)) 2008-08-12 01:00 3. Operation Constraint 每一个Input和Output表达式都必须指定自己的操作约束Operation Constraint,我们这里来讨论在80386平台上所可能使用的操作约束。 1、寄存器约束 当你当前的输入或输入需要借助一个寄存器时,你需要为其指定一个寄存器约束。你可以直接指定一个寄存器的名字,比如: __asm__ __volatile__(movl %0, %%cr0::eax (cr0)); 也可以指定一个缩写,比如: __asm__ __volatile__(movl %0, %%cr0::a (cr0)); a GCC C/C++ %eax %ax %al 如果你指定一个缩写,比如字母 ,则 将会根据当前操作表达式中 表达式的宽度决定使用 ,还是 或 。比如: unsigned short __shrt; __asm__ (mov %0 ,%%bx : : a(__shrt)); 由于变量__shrt是16-bit short类型,则编译出来的汇编代码中,则会让此变量使用%ex寄存器。编译结果为: movw -2(%ebp), %ax # %ax = __shrt #APP movl %ax, %bx #NO_APP 无论是Input,还是Output操作表达式约束,都可以使用寄存器约束。 下表中列出了常用的寄存器约束的缩写。 约束约束 意义意义 约约束束 Input/Output 意意义义 r I,O 表示使用一个通用寄存器,由GCC在%eax/%ax/%al, %ebx/%bx/%bl, %ecx/%cx/%cl, %edx/%dx/%dl中选取一个GCC认为合适的。 q I,O 表示使用一个通用寄存器,和r的意义相同。 a I,O 表示使用%eax / %ax / %al b I,O 表示使用%ebx / %bx / %bl c I,O 表示使用%ecx / %cx / %cl d I,O 表示使用%edx / %dx / %dl D I,O 表示使用%edi / %di S I,O 表示使用%esi / %si f I,O 表示使用浮点寄存器 t I,O 表示使用第一个浮点寄存器 u I,O 表示使用第二个浮点寄存器 2、内存约束 如果一个

文档评论(0)

1亿VIP精品文档

相关文档