linux汇编语言at&t 开发指南

linux汇编语言at&t 开发指南

ID:5374948

大小:516.48 KB

页数:43页

时间:2017-12-08

linux汇编语言at&t 开发指南_第1页
linux汇编语言at&t 开发指南_第2页
linux汇编语言at&t 开发指南_第3页
linux汇编语言at&t 开发指南_第4页
linux汇编语言at&t 开发指南_第5页
资源描述:

《linux汇编语言at&t 开发指南》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、www.linuxidc.comAT&A汇编1.RegisterReference引用寄存器要在寄存器号前加百分号%,如“movl%eax,%ebx”。80386有如下寄存器:[1]8个32-bit寄存器%eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;(8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp;8个8-bit寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上是寄存器%ax,%bx,%cx,%dx的高8位和低8位;)[2]6个段

2、寄存器:%cs(code),%ds(data),%ss(stack),%es,%fs,%gs;[3]3个控制寄存器:%cr0,%cr2,%cr3;[4]6个debug寄存器:%db0,%db1,%db2,%db3,%db6,%db7;[5]2个测试寄存器:%tr6,%tr7;[6]8个浮点寄存器栈:%st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。2.OperatorSequence操作数排列是从源(左)到目的(右),如“movl%eax(源),%ebx(目的)”3.ImmediatelyOperator使用立即数,要在数

3、前面加符号$,如“movl$0x04,%ebx”或者:para=0x04movl$para,%ebx指令执行的结果是将立即数0x04装入寄存器ebx。4.SymbolConstant符号常数直接引用如value:.long0x12a3f2demovlvalue,%ebx指令执行的结果是将常数0x12a3f2de装入寄存器ebx。引用符号地址在符号前加符号$,如“movl$value,%ebx”则是将符号value的地址装入寄存器ebx。5.LengthofOperator操作数的长度用加在指令后的符号表示b(byte,8-bit),w(word,16-bits),l(long,32-

4、bits),如“movb%al,%bl”,“movw%ax,%bx”,“movl%eax,%ebx”。如果没有指定操作数长度的话,编译器将按照目标操作数的长度来设置。比如指令“mov%ax,%bx”,由于目标操作数bx的长度为word,那么编译器将把此指令等同于“movw%ax,%bx”。同样道理,指令“mov$4,%ebx”等同于指令“movl$4,%ebx”,“push%al”等同于“pushb%al”。对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比如指令“push$4”。6.SignandZeroExtension绝大多数面向80386的AT&T汇编指令与

5、Intel格式的汇编指令都是相同的,但符号扩展指令和零扩展指令有不同格式。符号扩展指令和零扩展指令需要指定源操作数长度和目的操作数长度,即使在某些指令中这些操作数是隐含的。在AT&T语法中,符号扩展和零扩展指令的格式为,基本部分"movs"和"movz"(对应Intel语法的movsx和movzx),后面跟上源操作数长度和目的操作数长度。movsbl意味着movs(from)byte(to)long;movbw意味着movs(from)byteLinux公社(LinuxIDC.com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。www.linu

6、xidc.com(to)word;movswl意味着movs(from)word(to)long。对于movz指令也一样。比如指令“movsbl%al,%edx”意味着将al寄存器的内容进行符号扩展后放置到edx寄存器中。其它的Intel格式的符号扩展指令还有:cbw--sign-extendbytein%altowordin%ax;cwde--sign-extendwordin%axtolongin%eax;cwd--sign-extendwordin%axtolongin%dx:%ax;cdq--sign-extenddwordin%eaxtoquadin%edx:%eax;对应

7、的AT&T语法的指令为cbtw,cwtl,cwtd,cltd。7.CallandJump段内调用和跳转指令为"call","ret"和"jmp",段间调用和跳转指令为"lcall","lret"和"ljmp"。段间调用和跳转指令的格式为“lcall/ljmp$SECTION,$OFFSET”,而段间返回指令则为“lret$STACK-ADJUST”。8.Prefix操作码前缀被用在下列的情况:[1]字符串重复操作指令(rep,repne);[2]指定被操作

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。