《linux汇编》.pdf

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《linux汇编》.pdf

ATT 汇编语言与GCC 内嵌汇编简介 版本 0.1 时间 04/3/30 EMA IL chforest_chang@ 1 ATT 与 INTEL 的 编语言语法的区别3 1.1 大小写3 1.2 操作数赋值方向3 1.3 前缀3 1.4 间接寻址语法4 1.5 后缀4 1.6 指令5 2 GCC 内嵌汇编 5 2.1 简介5 2.2 内嵌汇编举例5 2.3 语法7 2.3.1 编语句模板7 2.3.2 输出部分7 2.3.3 输入部分8 2.3.4 限制字符8 2.3.5 破坏描述部分14 2.4 GCC 如何编译内嵌汇编代码19 3 后记20 本节先介绍ATT 编语言语法与 INTEL 编语法的差别,然后介绍GCC 内嵌汇编语法。 阅读本节需要读者具有 INTEL汇编语言基础。 1 ATT 与 INTEL 的汇编语言语法的区别 1.1 大小写 INTEL格式的指令使用大写字母,而ATT 格式的使用小写字母。 例: INTEL ATT MOV EAX,EBX movl %ebx,%eax 1.2 操作数赋值方向 在 INTEL 语法中,第一个表示目的操作数,第二个表示源操作数,赋值方向从右向左。 ATT 语法第一个为源操作数,第二个为目的操作数,方向从左 右,合乎自然。 例: INTEL ATT MOV EAX,EBX movl %ebx,%eax 1.3 前缀 在 INTEL 语法中寄存器和立即数不需要前缀;ATT 中寄存器需要加前缀 “%”;立即数 需要加前缀 “$”。 例: INTEL ATT MOV EAX,1 movl $1,%eax 符号常数直接引用,不需要加前缀,如:movl value , %ebx,value 为一常数;在符 号前加前缀$表示引用符号地址, 如movl $value, %ebx,是将value 的地址放 ebx 中。 总线锁定前缀“lock”:总线锁定操作。“lock”前缀在Linux 核心代码中使用很多,特 别是SMP 代码中。当总线锁定后其它CPU 不能存取锁定地址处的内存单元。 远程跳转指令和子过程调用指令的操作码使用前缀 “l “,分别为 ljmp,lcall,与之 相应的返回指令伪 lret。 例: INTEL ATT CALL FAR SECTION:OFFSET lcall $secion:$offset JMP FAR SECTION:OFFSET ljmp $secion:$offset RET FAR SATCK_ADJUST lret $stack_adjust 1.4 间接寻址语法 INTEL 中基地址使用 “[”、“]”,而在ATT 中使用“(”、“)”;另外处理复杂操作数的 语法 也 不同 , INTEL 为 Segreg:[base+index*scale+disp] , 而在 ATT 中为 %segreg:disp(base,index,sale),其中segreg,index,scale,disp 都是可选的,在指定 index而没有显式指定Scale 的情况下使用默认值1。Scale 和disp 不需要加前缀 “”。 INTEL ATT Instr

文档评论(0)

wfkm + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档