嵌入式汇编语言学习经验.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【Word版本下载可任意编辑】 PAGE 1 - / NUMPAGES 1 嵌入式汇编语言学习经验 近参与了一个项目,需要用嵌入式汇编写测试程序。汇编程序写过,C程序也写过,但是将它们混合起来写还是次,完全没有概念。只能上网找资料,自己慢慢摸索。 自己一直用Windows操作系统,但是我们的项目是在Linux系统上,这两者的汇编语言系统是不同的,windows一直是Intel汇编,而Linux是AtT汇编。为了调试的方便,我决定现在windows中尝试着写点嵌入式汇编,然后再在Linux中写(主要原因是自己对Linux调试不熟悉)。 首先遇到的个问题是,格式到底是什么。上网查资料,前篇一律,都是_asm_ _volatile_(…);格式,但是自己弄的时候总是不行,说明网络虽好,但是不可盲目相信。经过多番测试,我发现windows下嵌入式汇编的格式只有_asm关键字,也没有volatile;以前的括号现在也变成大括号,也没有引号。我自己写的一个简单测试程序为: #include #include //测试bsf指令 void test() { int value,index=32; _asm { mov eax,index bsf ebx,eax mov value,ebx } printf(value is %d/n,value); } void main() { printf(Hello World/n); test(); } Windows嵌入式汇编的特点是: 1. 汇编是Intel汇编,而不是ATT汇编; 2. 关键字是_asm,而不是其他,这个有可能和自己的环境有关,如果你自己重新定义宏,那就是你自己定义的关键字;3. 虽说有volatile关键字,但是用上却报错,具体我也不知道怎么用;4. 没有冒号指定输入输出,要输入和输出的数可以直接在汇编语言中使用;5. 汇编代码要用大括号包围,而不是小括号,而且也没有分号;6. 如果不用大括号包围,则必须每句汇编代码之前都有_asm关键字。 从上面的表达中,可以看出貌似windows嵌入式汇编要简单很多。 在windows中搞定之后,就要在Linux中开展测试。我首先做的就是直接复制在windows中的程序到Linux中,很明显自己的无知是要报错的。 有经过多番测试,得到在Linux中执行无误的代码为: #include void test() { int bsf=0,bsr=0,input=0x12345,flag; asm volatile (movl %3,%%eax/n movl %3,%%ebx/n bsf %3,%%cx/n movzwl %%cx,%0/n bsr %3,%%dx/n movzwl %%dx,%1/n pushf/n pop %2/n :=r(bsf),=r(bsr),=r(flag) :m(input) ); printf(bsf value is %d/n,bsf); printf(bsr value is %d/n,bsr); printf(flag is %x/n,flag); } int main() { printf(Hello World/n); test(); return 0; } 从构造来看,Linux下的要麻烦不少。首先用的汇编是windows程序员不熟悉的ATT汇编,而且还要定义输入输出,存放器用起来还要两个%……总之,比较麻烦。但是我没有贬低Linux的意思,只要用好了,功能还是很强大的。 Linux下嵌入式汇编的特点是: 1. 汇编语言是ATT,源操作数和目的操作数位置和Intel汇编相反,关于ATT汇编细节请参考其他文献;2. 嵌入式汇编的关键字也并不是_asm_ _volatile_,自己摸索出的正确的方式是:asm volatile,这个还是和自己机器的配置有个,如果该关键字不正确,大家可以测试其他类似的关键字,如asm_ ,__asm等,volatile一样;3. Linux下嵌入式汇编有输入输出和修改标识,放在汇编代码的末尾,用冒号隔开,个冒号后是输入

文档评论(0)

183****5020 + 关注
实名认证
文档贡献者

本账号部分文档来源于互联网和内部收集,仅用于学习交流,版权为原作者所有;文档内容纯属来自网络意见,与本账号立场无关。涉及政治言论一律相应删除,请大家监督;请下载试用后二十四小时内删除。

1亿VIP精品文档

相关文档