范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

嵌入式uboot汇编指令学习4

  自己的学习工作日志,比较杂,各位勿怪
  1、BSS data text段
  2、LDM指令等指令
  3.堆栈寻址方式,依次讲解STMFD、STMED、STMFA、STMEA
  4、最小计算机系统bss段:
  bss段(bss segment) 通常是指用来存放程序中未初始化的全局变量的一块内存区域。
  bss是英文Block Started by Symbol的简称。
  bss段属于静态内存分配。
  data段:
  数据段(data segment) 通常是指用来存放程序中已初始化的全局变量的一块内存区域。
  数据段属于静态内存分配。
  text段:
  代码段(code segment/text segment) 通常是指用来存放程序执行代码的一块内存区域。
  这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。
  在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
  堆(heap):
  堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。
  当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);
  当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
  栈(stack):
   栈又称堆栈,是用户存放程序临时创建的局部变量,
  也就是说我们函数括弧"{}"中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。
  除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。
  由于栈的先进先出(FIFO)特点,所以栈特别方便用来保存/恢复调用现场。
  从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。
  一个程序本质上都是由 bss段、data段、text段三个组成的。
  这样的概念,不知道最初来源于哪里的规定,但在当前的计算机程序设计中是很重要的一个基本概念。
  而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。
  在采用段式内存管理的架构中(比如intel的80x86系统),bss段通常是指用来存放程序中未初始化的全局变量的一块内存区域,
  一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。
  比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。
  text和data段都 在可执行文件中 (在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;
  而bss段 不在可执行文件中 ,由系统初始化。【例】
  两个小程序如下:
  程序1: int ar[30000]; void main() {     ...... }
  程序2: int ar[300000] = {1, 2, 3, 4, 5, 6 }; void main() {     ...... }
  发现程序2编译之后所得的.exe文件比程序1的要大得多。当下甚为不解,于是手工编译了一下,并使用了/FAs编译选项来查看了一下其各自的.asm,
  发现在程序1.asm中ar的定义如下:
  _BSS SEGMENT
  ?ar@@3PAHA DD 0493e0H DUP (?) ; ar
  _BSS ENDS
  而在程序2.asm中,ar被定义为:
  _DATA SEGMENT
  ?ar@@3PAHA DD 01H ; ar
  DD 02H
  DD 03H
  ORG $+1199988
  _DATA ENDS
  区别很明显,一个位于.bss段,而另一个位于.data段,两者的区别在于:
  全局的未初始化变量存在于.bss段中,具体体现为一个占位符;
  全局的已初始化变量存于.data段中;
  而函数内的自动变量都在栈上分配空间;
  .bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);
  .data却需要占用,其内容由程序初始化。因此造成了上述情况。
  bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小;
  bss段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。
  data段(已手动初始化的数据)则为数据分配空间,数据保存在目标文件中;
  data段包含经过初始化的全局变量以及它们的值。当这个内存区进入程序的地址空间后全部清零。
  包含data段和bss段的整个区段此时通常称为数据区。
  2、LDM指令等指令
  关于多寄存器加载存储指令
  1.LDMIA指令、LDMIB指令、LDMDB指令、LDMDA指令
  (1)LDMIA指令,IA表示每次传送后地址加4
  (2)LDMIB指令,每次传送前地址加四
  (3)LDMDB指令,每次传送前地址减4,这里还要注意程序中先给R5,还是先给R8,这里明显是先给R8。
  (4)LDMDA指令,每次传送后地址减4,这里也是先给R8,不是先给R5!
  下面来看看STMIA指令、STMIB指令、STMDB指令、STMDA指令
  (1) STMIA指令, STMIA R0,{R1,R2,R3,R4} ;将R1—R4的数据存储到R0指向的地址上,R0的值不更新,IA传送后地址加4,所以这里内存当中的地址是从0x8004开始变化的
  (2) STMIB指令, STMIB R0,{R1,R2,R3,R4} ;将R1—R4的数据存储到R0指向的地址上,R0的值不更新,IB每次传送前地址加4,所以内存中的值是从0x8008开始变化的
  3) STMDB指令, STMDB R0,{R1,R2,R3,R4} ;将R1—R4的数据存储到R0指向的地址上,R0的值更新,DB每次传送后地址减4,所以内存中的值是从0x8010开始递减变化的,注意这里是先把表达式中的R4先给地址0x8010
  (4) STMDA与上面STMDB指令类似,DA是每次传送后地址减4,我就不截图了。
  3.堆栈寻址方式,依次讲解STMFD、STMED、STMFA、STMEA
  (1) STMFD意思是满堆栈递减指令,堆栈向下增长。如下图就是解释堆栈向上增长,向下增长,栈顶指针在内存中向低地址处移动,叫做向下增长,这里我为什么要先讲STMFD指令,怎么不讲LDMFD等指令呢,因为这里涉及到堆栈,向内存中写入寄存器中所存储的值,更能体现出进栈的动作,看完下面的例子,你会知道STM的后缀为什么是FD了。
  关键代码:STMFDSP!,{R1-R3,R4},可以这么看,先把R4,R3,R2,R1依次压栈,至于为什么不是R1,R2,R3,R4依次压栈,因为做出的实验就不是这样的,所以R4准备进栈的时候,栈指针SP先减4,然后先把R4寄存器里面的值放到内存地址为0x803c里面,这里为什么SP要先减4呢,因为这里是满堆栈,所以要先把栈指针做出响应的变化以后,才能进行存储,至于什么是满堆栈和空堆栈,我这里就不解释了。程序效果看下图即可:
  (2) 看了上面STMFD以后,现在看STMFA(满递增堆栈) 就很简单了:不过这里需要特别注意,这里并不是先操作R4寄存器的,而是操作R1寄存器,同理的是,先把SP做相应的改变,也就是这里先SP+4=0x8044,然后把R1寄存器的值放到内存地址的0x8044处,然后R2,R3,R4依次放下去,最后改变SP的值,因为代码中多了一个感叹号STMFA SP!,{R1-R3,R4}
  (3) STMED是空递减堆栈,可以看出堆栈指针一开始指在0x8040处,所以先把R4的寄存器的值放到内存单元0x8040中,这里其实也是先操作R4寄存器,至于为什么,只能说和STMFD对应的。
  (4) STMEA空递增堆栈,根据堆栈的指令意思理解和试验结果对应
  下面看看和STMFD指令相对应的LDMFD等指令,我依次讲解LDMFD、LDMFA、LDMED、LDMEA指令,至于我为什么按这种顺序讲,为了和上面的STMFD等指令联系在一起。
  (1) 还记得我上面那些STM那些指令先将的是什么,对了,第一个讲的是STMFD指令,把内存中的数据批量放到寄存器中。FD为满递减堆栈。
  这里值得注意的是,FD不是满堆栈递减吗,为什么程序执行完以后SP是增加的,在没有执行MOVR9, SP这条指令之前,FD确实代表是递减的意思,这里因为sp栈顶指针实际上是增加,至于为什么不写LDMFA,只不过这样LDMFD能和STMFD指令对应,看起来顺眼点吧,其实这里我要说明的是STMDB并不是和LDMDB对应,而是和LDMIA对应的,这里注意一下就行了,以后程序编多了,直接就记住了,不过你只要原理懂了,管它怎么写呢。
  (2) 那自然地下面就讲LDMFA指令了
  3) LDMED指令
  (4) LDMEA指令
  注意的一点就是这里的SP指针是我假定的一个值,如果你以后写arm代码,调用C函数的时候,用到栈指针,系统会自动分配,就不存在sp是否非法的问题,什么是非法问题呢?先举个例子,看下图,这里对应的SP是0x8020,并且是满递减,把寄存器的值写到内存当中,我明明写的是STMFDSP!,{R1-R3,R4},把4个寄存器的内容写到内存中,可是最后就存了两个,因为你0x8018的地址处之前可能代码段的内容就存入在那里,所以你就不能改了,获取你这时候把这个不能写入的内存地址是可以读取到寄存器中的,我没试过,有兴趣可以试试。所以在用STM指令的时候要注意这点了
  4、最小计算机系统
  硬件最小系统:由电源、主板和CPU、内存组成.在这个系统中,没有任何信号线的连接,只有电源到主板的电源连接.在判断的过程中通过声音来判断这一核心组成部分是否可正常工作:
  软件最小系统:由电源,主板,CPU.内存,显示卡/显示器。键盘和硬盘组成.这个最小系统主要用来判断系统是否可完成正常的启动与运行。
  1. 硬盘中的软件环境保留原有的软件环境,主要是用来分析判断应用软件方面的问题.
  2. 硬盘中的软件环境只有一个基本的操作系统环境<可能是卸载掉所有应用,或是重新安装一个干净的操作系统环境,是要判断系统问题,软件冲突或软硬件间的冲突问题.
  3. 在软件最小系统下,可根据需要添加或更改适当的硬件.如:在判断启动故障时,由于硬盘不能启动.想检查一下能否从其它驱动器启动.这时,可在软件最小系统下加入一个软驱或最小系统中加入声卡;在判断网络问题时,就应在软件最小系统中加入网卡等.最小系统法,主要地要先判断在最基本的软硬件环境中,系统是否可正常工作如果不能正常工作,却可判定最基本的软硬部件有故障,从而起到故障隔离的作用.
  最小系统法逐步添加法结合,能较快速地定位发生在其它板软件的故障,提高维修效率

加量不加价2。5GWAN加持的华硕TUFGAMINGAX3000V2电竞路由器体验华硕TUF小旋风系列又更新了一款新产品,这次发布的是一款双频电竞无线路由器,是继首批WiFi6路由器华硕TUFGAMINGAX3000后,该系列路由器硬件升级最大的一次,除了处理器颜值在线内饰豪华零跑C01现已开启预售依托7年全域自研技术优势,零跑汽车做到了出品即精品。继爆款车型C11T03之后,全球首款无电池包的电动车零跑C01即将首发亮相并开启预售。在用户zui关注的续航里程方面,零跑C0130万级绕不开的4款新能源轿车,你更看好谁?30万左右预算,可能是不少精英群体购买一辆新能源车的价格区间,仔细想想,30万级的新能源轿车中,大家在选车时好像确实还挺纠结的。该价位中,除了有特斯拉Model3,咱们完全也可以入海尔格力美的空调各自的痛点是什么?为什么?空调已经是我们很多家庭不可缺少的东西,在炎热的夏天可以带来冰冷的凉风,在寒冷的冬天,不必再担心湿冷的室内温度。有了它以后,我们可以随意的调节着房间里的温度。而要说到哪个空调的牌子好验配助听器需要考虑哪些因素?无论是我们佩戴耳机也好,还是我们助听器也好,无论是利用气导耳机也好,还是骨导耳机也好,我们都要讲究科学的使用,我们的这些助听器或者是耳机,第一要调至适当的音量,避免过高的声音,过强程维了不起?滴滴选择从美退市,大股东日本软银损失有多惨重?不是程维有多了不起,他是被迫无奈。这种人没有家国情怀,根本不值得欣赏赞扬。今天这事走到这一步说明国家有力量,人民有信仰。不是所有的企业家,都能抵御资本的诱惑。有人,有朱自清的骨头有助听器有没有不塞到耳朵里的?骨导助听器是不戴在耳朵里面的,是戴在乳突上的。但是骨导助听器比较单一,价格也比较高。可以用骨导助听器,是通过骨质(乳突牙齿听骨等)的传导把声音传至内耳的助听器。骨导助听器主要用于严中美芯片之争三星将在美国建立工厂以助美扩大本地半导体产能三星电子已决定在德克萨斯州建立一家先进的美国芯片工厂,这个项目标志着拜登政府的胜利。拜登政府将供应链安全列为优先事项,并在美国本土扩大半导体产能。知情人士称,韩国最大的公司已决定选605公里续航,高品质家用快充SUV,都养得起,实拍长安CS55ERock长安汽车早先新能源汽车刚开始推广的时候,即使优惠力度很大,为之买单的消费者还是少之又少。原因很简单新事物,很多消费不了解,对其保持观望的心态,还有最为重要的一点,新能源汽车基础建设造AK47的生产商要造电动车了来源环球时报新媒体全球最著名的军火商之一生产AK47及其系列自动步枪的卡拉什尼科夫集团最近向俄罗斯专利局提交了卡拉什尼科夫IzhUV4电动汽车的专利图片,以图进军现在如火如荼的新能插混十年前画下的饼,终于兑现了日常通勤用电,自驾烧油!十一年以前,随着这样一句宣传语,史上第一种插电式混合动力汽车(PHEV),双模混动的比亚迪F3DM上市。采用混动系统,同时安装了较一般混动汽车更大的电池包,
李毅中电动车是中长期阶段实现汽车双碳目标的重要手段新京报贝壳财经讯(记者王琳琳)1月20日,国家工信部原部长中国工业经济联合会会长李毅中在智驾碳新第十七届超级汽车论坛上表示,从中长期来看,电动车将成为实现汽车双碳目标的主要手段。本十部门十四五末能满足超2000万辆电动汽车充电中新财经1月21日电据国家发改委网站21日消息,近日国家发改委等十部门发布国家发展改革委等部门关于进一步提升电动汽车充电基础设施服务保障能力的实施意见(以下简称意见),提出到十四五Mastercam二次开放内置编辑器视频学习CSharp源码Mastercam二次开放内置编辑器视频源码。在没有Mastercam开发环境的情况下,NETScripting的功能远远超越了vbscript脚本的功能,其主要原因在于NETSc拍视频怎么样加字幕?我用的是软件乐秀不但可以添加字幕,滚动字幕,等等,我觉得很好。我想学习拍视频,然后怎么加字幕好?得到邀请,荣幸!谢谢信任。朋友们回答非常好,可在实践中借鉴。在此基础上,本人较为系统美媒评出消费电子展最酷新品安克AnkerWorkB600视频吧据美国新闻周刊网站1月5日报道,今年的消费电子展(CES)延续了为接下来的一年里我们可以期待的各种技术定下基调的传统。新闻周刊刊文介绍了2022年美国消费电子展25款最酷的新产品装北京年薪40万以上的程序员多吗?因为是985和211的硕士博士,还是有不少的能达到的,要达到这个地步其实也是不难的1进入BAT,工作5年左右,薪资股票大体接近100万2选择比较热门的方向大数据人工智能简单码农能力共享共建等平台业务增速超50国美全零售生态共享格局初步成形本报记者贾丽2022年伊始,零售巨头提前在供应链上布局,以提升掌控能力。近日,国美零售宣布今年将与多家品牌从传统的零供合作上升到全面供应链合作。国美零售已加速从电器万亿赛道切入家生磁棒绕着导线转动法拉第发明原始电动机虽说科学家对静电现象有了不少认识,然而,使电作为一种能源而成为人们生产和生活的动力,使人类进入一个电气化时代,却是从科学家开始发现和注意到电与磁的相互联系开始的。1800年伏打发明聚焦2022山东两会丨山东制造雪蜡车交付国家队全国唯一智能制造国家工业设计研究院获批齐鲁网闪电新闻1月23日讯今天上午,山东省十三届人大七次会议在济南开幕,省长周乃翔作政府工作报告。报告指出,2021年,山东创新动力显著增强。关键核心技术实现突破,取得时速600公车主注意!2月,全国各地区电动车新规来了,涉及两轮三轮四轮现在又到了一年一度最为激动的时候了,大家都在翘首以盼春节的到来,街上也开始有年味起来。但作为一个从事新能源行业的打工人,现在要告诉你的肯定不是春节的欢喜,而是即将到来的2月,全国各元宇宙产业白皮书互联网巨头将元宇宙视为未来更大流量入口21世纪经济报道记者刘美琳北京报道元宇宙无疑是2021年热词。这一年里,Facebook字节跳动等科技巨头纷纷表态,资本闻风而动。这个1992年就出现在科幻小说中的名词,在近30年