如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
内嵌汇编语法如下:_am_汇编语句模板:输出部分:输入部分:破坏描述部分)_s_(共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。例如:_am__vltl_(ci:::mmr"_s__oaie_"l""eoy)1、汇编语句模板汇编语句模板由汇编语句序列组成,语句之间使用“;”、“\”或“\\”分开。指令中的操作数可nnt以使用占位符引用C语言变量,操作数占位符最多1个,名称如下:%,%,…,%。指令中使用占位符0019表示的操作数,总被视为ln型(4og个字节),但对其施加的操作根据指令可以是字或者字节,当把操作数当作字或者字节使用时,默认为低字或者低字节。对字节操作可以显式的指明是低字节还是次字节。方法是在%和序号之间插入一个字母,“b”代表低字节,“h”代表高字节,例如:%1h。2、输出部分输出部分描述输出操作数,不同的操作数描述符之间用逗号格开,每个操作数描述符由限定字符串和C语言变量组成。每个输出操作数的限定字符串必须包含“=”表示他是一个输出操作数。例:_am__vltl_(psf;pp%;ci:="())_s__oaie_"uhlol0l""gx描述符字符串表示对该变量的限制条件,这样GC就可以根据这些条件决定如何分配寄存器,如何产生必C要的代码处理指令操作数与C表达式或C变量之间的联系。3、输入部分输入部分描述输入操作数,不同的操作数描述符之间使用逗号格开,每个操作数描述符由限定字符串和C语言表达式或者C语言变量组成。例1:_am__vltl_(ld%"::""(elmd_d);_s__oaie_"it0mra_oeit)例二(btp.):ioshSai_iln_vi_stbtitn,vltlvi*ad)ttc_nie_od_e_i(nroaieoddr{_am__s_("tl%,0bs1%":="(DR"mAD):I"(r)"rn);}后例功能是将(ad)*dr的第n位设为1r。第一个占位符%与C语言变量AD对应,第二个占位符%与C0DR1语言变量n对应。因此上面的汇编语句代码与下面的伪代码等价:bsn,AD,该指令的两个操作数rtlrDR不能全是内存变量,因此将n的限定字符串指定为“I”,将n与立即数或者寄存器相关联,这样两个rrr操作数中只有AD为内存变量。DR4、限制字符41.、限制字符列表限制字符有很多种,有些是与特定体系结构相关,此处仅列出常用的限定字符和i8中可能用到的一36些常用的限定符。它们的作用是指示编译器如何处理其后的C语言变量与指令操作数之间的关系。分类限定符描述通用寄存器“a”将输入变量放入exa这里有一个问题:假设exa已经被使用,那怎么办?其实很简单:因为GC知道ex已经被使用,Ca它在这段汇编代码的起始处插入一条语句psl%a,ex内容保存到uhex将a堆栈,然后在这段代码结束处再增加一条语句pp%a,olex恢复exa的内容“b”“c”“d”“s”“d”“q”“r”“A”将输入变量放入exb将输入变量放入exc将输入变量放入exd将输入变量放入eis将输入变量放入eid将输入变量放入exb,exd中的一个a,exc,ex将输入变量放入通用寄存器,也就是exb,exa,exc,exs,eid,eid中的一个把exexa和d合成一个6位的寄存器(slnlns4ueogog)内存“m”“o”“V”“”“p”内存变量操作数为内存变量,但是其寻址方式是偏移量类型,也即是基址寻址,或者是基址加变址寻址操作数为内存变量,但寻址方式不是偏移量类型操作数为内存变量,但寻址方式为自动增量操作数是一个合法的内存地址(指针)将输入变量放入exb,exd中的一个a,exc,ex或者作为内存变量操作数可以是任何类型寄存器或内存“g”“X”立即数“I”“J”“N”“i”“n”03之间的立即数(用于3位移位指令)-1206之间的立即数(用于6位移位指令)-34025-5之间的立即数(用于otu指令)立即数立即数,有些系统不支持除字以外的立即数,这些系统应该使用“n”而不是“i”匹配“0”,表示用它限制的操作数与某个指定的操作数匹配,“1..”.“9”也即该操作数就是指定的那个操作数,例如“0”去描述“%1”操作数,那么“%”引用的其实就1是“%”操作数,注意作为限定符字母的0与0-9指令中的“%0”-“%9”的区别,前者描述操