IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的
EXPORT ,表示本程序里面用到的变量提供给其他模块调用的。
以上两个在汇编和C语言混合编程的时候用到
刚看到一篇不错的BLOG,解说C和汇编混编的,虽然貌似是翻译ADS文档的,不过写的挺不错,通俗容易懂,可以看看
其实汇编调用C貌似很简单
B Main 就完了,直接跳过去,那传递参数怎么办?根据《嵌入式系统 Boot Loader 技术内幕》里面说的用弹簧床什么的来结局,不过暂时理解不了。
用ADS的一个项目中同时放汇编的S文件和C语言文件的话,那么整个连接出来,程序默认从C语言的main函数那里作为入口,刚才试了一下,发现解决办法。方法是,先将汇编的入口标签EXPORT出来,
      AREA adrlabel, CODE, READONL
      IMPORT Main
      EXPORT Start     
      ENTRY                      
Start
      MOV R0,#10   ; 没有用,纯粹为了方便看
      B  Main
      B  .
      END
 这样声明了一个Start的标签提供给外面引用,然后IMPORT声明需要引用一个C语言的Main函数,好了,在修改一下连接属性,Image Entry Point 那里填  “Start” 将镜像的开始点指向Start,那么运行的时候,就先执行Start那里的汇编程序,而不是先执行C里面的Main函数了 :)

ADR 装载地址,不过地址范围不能大,4KB 空间
编译器会根据需要汇编成 ADD SUB 指令的。
如果装载的地址比较大,则需要用 ADRL 指令。
好了,貌似今天终于搞懂那个文字池(literal pool)是什么东西了。
根据现在的理解,大概是这样的:
首先,因为ARM一条指令只有32位,所以只能通过mov指令装载一个单字节,8位的理解数,最大是 255 。遇到需要装载32位立即数的时候,编译器采取了一个叫文字池的办法,将立即数放在那里,然后通过PC指针的偏移来取立即数。这个文字池是编译器自己取搞的,一般放在代码的后面,条件是代码长度不能超过4KB,否则编译出错,这个时候可以用一条LTORG 指令强制将文字池定位在4K范围内,那就OK了~~~
不过咱们的目标是写bootloader,估计应该不用很担心这个问题,放心的用就是了。
其实ADS目录下面有个例子就是说明这个问题的,下面的小例子摘取自ADS目录下面的
Examples\asm\adrlabel.s
FUNC2
      LDR  R2,=0X55555555      
      MOV  PC,LR
     ; LTORG
DAT
      SPACE 4200   
      END
因为DAT空出了 4200 字节的空间,已经大于4K了,如果不加 LTORG 指令的话,那么文字池会分配在4200字节空间之后,超过4K,所以那个 LDR  R2,=0X55555555 指令会出错的,然而我们如果用 LTORG 指令将文字池强制分配在那4200字节空间之前,那就解决问题了。自己试试就是了,很简单的~~~

汇编里的IMPORT和EXPORT相关推荐

  1. arm export 汇编_灵活使用ARM汇编的WEAK关键字 (INPORT,EXPORT)---应该是在keil环境下,iar等还不知道...

    转载于:http://blog.csdn.net/norains/article/details/5954459 //========================================= ...

  2. 使用es6中import和export报错

    在学习import和export时,写了一个小demo进行测试 //index.html<script> import test from './test.js' test() </ ...

  3. 工作373-前端 import与export区别

    import与export区别 1.当用export default people导出时,就用 import people 导入(不带大括号) 2.一个文件里,有且只能有一个export defaul ...

  4. 【nodejs】import、export、exports、module.exports

    1.import 和 export(ES6特性) 目录结构 export_file.js export const myNumbers = [1, 2, 3, 4]; const animals = ...

  5. ES6 模块加载export 、import、export default 、import() 语法与区别,笔记总结

    ES6模块加载export .import.export default .import() 语法与区别 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种. ...

  6. import export php,import与export在node.js中的使用方法

    import与export是es6中模块化的导入与导出,node.js现阶段不支持,需要通过babel进行编译,使其变成node.js的模块化代码.(关于node.js模块,可参考其他node.js模 ...

  7. js模块化:require、import和export

    前言 编写js模块必须要搞懂import和export的关系 Google Chrome 84.0.4147.135 (正式版本) (64 位) (cohort: Stable Installs On ...

  8. 【彻底搞清楚javascript中的require、import和export 】

    彻底搞清楚javascript中的require.import和export - 最骚的就是你 - 博客园

  9. react 中使用import()实现按需加载报错 解决方法 --‘import’ and ‘export’ may only appear at the top level

    react 中使用import()实现按需加载报错 解决方法 --'import' and 'export' may only appear at the top level 参考文章: (1)rea ...

最新文章

  1. NR 5G NAS非接入层
  2. Java多线程间的通信
  3. 数据库之间数据转换最快方法
  4. 细数被程序员吐糟的9大困难(转)
  5. CSS3属性box-shadow详解[盒子阴影]
  6. Linux进程管理工具
  7. 禁止Edge浏览器自动更新的办法
  8. bzoj 4134: ljw和lzr的hack比赛 sg函数+字典树合并
  9. java 实现邮箱验证注册
  10. Android Studio 问题:improperly specified vm option
  11. 笔记本电脑外接显示器完全攻略(图文说明)
  12. Excel中查找字符串的相关问题---重点推荐
  13. 179. 最大数 largestNumber
  14. 结构体内数组arr[0]或者arr[1]变量的作用及使用方法
  15. 短信发送平台-阿里大于
  16. SpringBoot集成阿里云支付
  17. Android MediaRecorder 后台视屏录制
  18. Arcgis软件应用(一)专题地图的编制
  19. 一份【超级全面】的前端工程师的技术知识自检清单,初学者请收藏
  20. 远程软件 AnyDesk v5.0.5 官方中文免费版

热门文章

  1. Linux中7个判断文件系统类型的方法
  2. 用四张图说清楚Go程序调度的本质
  3. 并发问题的解决思路以及Go语言调度器工作原理
  4. [翻译]PHP中define()和const定义常量的区别
  5. 环境搭建:Windows系统下Nacos集群搭建
  6. CASE WHEN语句中加IN应该如何使用
  7. Docker容器(container)详解
  8. 关于TCP协议的几个问题
  9. es使用pencentiles对网站访问延时统计
  10. Windows系统下查看某一进程下所有线程的dos命令