第4章 4.1 C语言内嵌汇编应用程序开发.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章程序开发 ; 汇编语言与的混合编程通常有以下几种方式: 在代码中嵌入汇编指令; 在汇编程序和的程序之间进行变量的互访; 汇编程序、程序间的相互调用。;在程序中嵌入汇编程序,可以实现一些高级语言所没有的功能,提高程序执行效率。 编译器的内嵌汇编器支持指令集,编译器的内嵌汇编器支持指令集。 . 内嵌汇编的语法 { 指令[;指令] /*注释*/ …… [指令] } ; () 操作数 内嵌的汇编指令中作为操作数的寄存器和常量可以是表达式。 这些表达式可以是、或类型,而且这些表达式都是作为无符号数进行操作。 若需要有符号数,用户需要自己处理与符号有关的操作。 编译器将会计算这些表达式的值,并为其分配寄存器。 ;() 物理寄存器 内嵌汇编中使用物理寄存器有以下限制: 不能直接向寄存器赋值,程序跳转只能使用或指令实现。 使用物理寄存器的指令中,不要使用过于复杂的表达式。因为表达式过于复杂时,将会需要较多的物理寄存器。这些寄存器可能与指令中的物理寄存器在使用时发生冲突。 编译器可能会使用或存放编译的中间结果。在计算表达式的值时可能会将寄存器、和用于子程序调用。因此,在内嵌的汇编指令中,不要将这些寄存器同时指定为指令中的物理存储器。 通常内嵌的汇编指令中不要指定物理寄存器,因为这可能会影响编译器分配寄存器,进而影响代码的效率。;() 常量。在内嵌汇编指令中,常量前面的“”可以省略。 () 指令展开。内嵌的汇编指令中,如果包含常量操作数,则该指令有可能被内嵌汇编器展开成几条指令。 () 标号。程序中的标号可以被内嵌的汇编指令使用。但是只有指令可以使用程序中的标号,而指令则不能使用。 () 内存单元的分配。所有的内存分配均由编译器完成,分配的内存单元通过变量供内嵌汇编器使用。内嵌汇编器不支持内嵌汇编程序中用于内存分配的伪指令。 ; 内嵌汇编器与汇编器的差异;()必须小心使用物理寄存器. 如、、和中的、、和标志位,因为计算汇编代码中的表达式时,可能会使用这些物理寄存器,并会修改、、和 标志位。 例如: { , ,, } 计算时会被修改。内嵌汇编器探测到隐含的寄存器冲突就会报错。;()不要使用寄存器代替变量。 尽管有时寄存器明显对应某个变量,但也不能直接使用寄存器代替变量。 例如: ( ) 存放在中 { { ,, 发生寄存器冲 突,实际上的值并没有变化 } (); } ;尽管根据编译器的编译规则似乎可以确定对应,但这样的代码会使内嵌汇编器认为发生了寄存器冲突。 用其它寄存器代替存放参数,使得该函数将原封不动地返回。 这段代码的正确写法如下: ( ) { { ,, } (); };() 使用内嵌式汇编无需保存和恢复寄存器。 事实上,除了和寄存器,对物理寄存器先读后写都会引起汇编器报错。 例如: ( ) { { !,{} 保存。先读后写,汇 编出错 ,, ,, !,{} } (); } ;()和指令的寄存器列表中只允许使用物理寄存器。 内嵌汇编可以修改处理器模式、协处理器模式以及、、等寄存器。但是编译器在编译时并不???解这些变化,因此必须保证在执行代码前恢复相应被修改的处理器模式。;() 汇编语言中的“,”号作为操作数分隔符。 如果有表达式作为操作数,若表达式中包含有“,”,则必须使用符号“(”和“)”将其归约为一个汇编操作数。 例如: { ,,((),) “(),”为一个带有“,” 的表达式 } ;例 () { ( !\); ; };例 使能/禁能中断 () { ; 嵌入汇编代码 { , 读取的值 } };

文档评论(0)

开心就好 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档