AT&T汇编语言教学课件.ppt
《AT&T汇编语言教学课件.ppt》由会员分享,可在线阅读,更多相关《AT&T汇编语言教学课件.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、AT在“asm”后面有时也会加上“_volatile_”表示编译器不要优化代码,后面的指令保留原样_asm_volatile_(hlt);,基本行内汇编,如果有很多行汇编,则每一行后要加上“nt”:asm(pushl%eaxntmovl$0,%eaxntpopl%eax);或者我们也可以分成几行来写,如:asm(movl%eax,%ebx);asm(xorl%ebx,%edx);asm(movl$0,_booga);,扩展的行内汇编,在扩展的行内汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入寄存器,以及如何将计算结果写回C变量,你只要告诉程序中C语言表
2、达式与汇编指令操作数之间的对应关系即可,GCC会自动插入代码完成必要的操作。,扩展的行内汇编,使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。例如下面的汇编语句:_asm_violate_(movl%1,%0:=r(result):r(input);“movl%1,%0”是指令模板;“%0”和“%1”代表指令的操作数,称为占位符,“=r”代表它之后是输入变量且需用到寄存器,指令模板后面用小括号括起来的是C语言表达式,其中input是输入变量,该指令会完成把input的值复制到result中的操作,扩展的行内汇编,若把刚才的内嵌汇
3、编语句改成如下:_asm_volatile_(movl%1,%0:=m(result):m(input);只是把“=r”改成了“=m”,“r”改成了“m”,然而在编译这条改过的语句的时候编译器便会报错,因为“r”代表复制的时候借助了寄存器,而“m”则代表直接从内存复制到内存,这样的操作显然是非法的,扩展的行内汇编的语法,内嵌汇编语法如下:_asm_(汇编语句模板:输出部分:输入部分:破坏描述部分);即格式为asm(statements:output_regs:input_regs:clobbered_regs),扩展的行内汇编的语法,扩展行内汇编共分四个部分:汇编语句模板,输出部分,输入部分,
4、破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。,intmain(void)intdest;intvalue=1;asm(movl%1,%0:=a(dest):c(value):%ebx);printf(%dn,dest);return0;,扩展的行内汇编的语法,汇编语句模板汇编语句模板由汇编语句序列组成,语句之间使用“;”、“n”或“nt”分开。指令中的操作数可以使用占位符引用C语言变量,操作数占位符最多10个,名称如下:%0,%1,%9。指令中使用占位符表示的操作数,总被视为long型(4
5、,个字节),但对其施加的操作根据指令可以是字或者字节,当把操作数当作字或者字节使用时,默认为低字或者低字节。对字节操作可以显式的指明是低字节还是次字节。方法是在%和序号之间插入一个字母,“b”代表低字节,“h”代表高字节,例如:%h1。,扩展的行内汇编的语法,输出部分输出部分描述输出操作数,不同的操作数描述符之间用逗号格开,每个操作数描述符由限定字符串和C语言变量组成。每个输出操作数的限定字符串必须包含“=”表示它是一个输出操作数。例如:_asm_volatile_(pushfl;popl%0;cli:=g(x)在这里“x”便是最终存放输出结果的C程序变量,而“=g”则是限定字符串,限定字符串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT 汇编语言 教学 课件
限制150内