at&t汇编与gcc内嵌汇编语法

at&t汇编与gcc内嵌汇编语法

ID:7065955

大小:112.00 KB

页数:31页

时间:2018-02-04

at&t汇编与gcc内嵌汇编语法_第1页
at&t汇编与gcc内嵌汇编语法_第2页
at&t汇编与gcc内嵌汇编语法_第3页
at&t汇编与gcc内嵌汇编语法_第4页
at&t汇编与gcc内嵌汇编语法_第5页
资源描述:

《at&t汇编与gcc内嵌汇编语法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1.寄存器引用引用寄存器要在寄存器号前加百分号%,如“movl%eax,%ebx”。80386有如下寄存器: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位;6个段寄存器:%cs(code),%ds(data),%ss(stack),%es

2、,%fs,%gs;3个控制寄存器:%cr0,%cr2,%cr3;6个debug寄存器:%db0,%db1,%db2,%db3,%db6,%db7;2个测试寄存器:%tr6,%tr7;8个浮点寄存器栈:%st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。2.操作数顺序操作数排列是从源(左)到目的(右),如“movl%eax(源),%ebx(目的)”3.立即数使用立即数,要在数前面加符号$,如“movl$0x04,%ebx”或者:para=0x04movl$para,%ebx指令执行的结果是将立即数04h装入寄存器ebx

3、。4.符号常数符号常数直接引用如value:.long0x12a3f2demovlvalue,%ebx指令执行的结果是将常数0x12a3f2de装入寄存器ebx。引用符号地址在符号前加符号$,如“movl$value,%ebx”则是将符号value的地址装入寄存器ebx。5.操作数的长度操作数的长度用加在指令后的符号表示b(byte,8-bit),w(word,16-bits),l(long,32-bits),如“movb%al,%bl”,“movw%ax,%bx”,“movl%eax,%ebx”。如果没有指定操作数长度的话,编译器将按照目标操作数的长度来设置。比如指令“mo

4、v%ax,%bx”,由于目标操作数bx的长度为word,那么编译器将把此指令等同于“movw%ax,%bx”。同样道理,指令“mov$4,%ebx”等同于指令“movl$4,%ebx”,“push%al”等同于“pushb%al”。对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比如指令“push$4”。6.符号扩展和零扩展指令绝大多数面向80386的AT&T汇编指令与Intel格式的汇编指令都是相同的,符号扩展指令和零扩展指令则是仅有的不同格式指令。符号扩展指令和零扩展指令需要指定源操作数长度和目的操作数长度,即使在某些指令中这些操作数是隐含的。在AT&T

5、语法中,符号扩展和零扩展指令的格式为,基本部分"movs"和"movz"(对应Intel语法的movsx和movzx),后面跟上源操作数长度和目的操作数长度。movsbl意味着movs(from)byte(to)long;movbw意味着movs(from)byte(to)word;movswl意味着movs(from)word(to)long。对于movz指令也一样。比如指令“movsbl%al,%edx”意味着将al寄存器的内容进行符号扩展后放置到edx寄存器中。其它的Intel格式的符号扩展指令还有:cbw--sign-extendbytein%altowordin%a

6、x;cwde--sign-extendwordin%axtolongin%eax;cwd--sign-extendwordin%axtolongin%dx:%ax;cdq--sign-extenddwordin%eaxtoquadin%edx:%eax;对应的AT&T语法的指令为cbtw,cwtl,cwtd,cltd。7.调用和跳转指令段内调用和跳转指令为"call","ret"和"jmp",段间调用和跳转指令为"lcall","lret"和"ljmp"。段间调用和跳转指令的格式为“lcall/ljmp$SECTION,$OFFSET”,而段间返回指令则为“lret$STAC

7、K-ADJUST”。8.前缀操作码前缀被用在下列的情况:字符串重复操作指令(rep,repne);指定被操作的段(cs,ds,ss,es,fs,gs);进行总线加锁(lock);指定地址和操作的大小(data16,addr16);在AT&T汇编语法中,操作码前缀通常被单独放在一行,后面不跟任何操作数。例如,对于重复scas指令,其写法为:repnescas上述操作码前缀的意义和用法如下:指定被操作的段前缀为cs,ds,ss,es,fs,和gs。在AT&T语法中,只需要按照section:memory-o

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

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

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