历史上的今天
返回首页

历史上的今天

今天是:2024年09月13日(星期五)

正在发生

2021年09月13日 | jz2440裸机开发与分析: 点亮LED灯之汇编语言

2021-09-13 来源:eefocus

LED原理图及2440寄存器说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

汇编语言编写控制LED灯

.text           /*.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段*/

.global _start; /*.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;*/

                /* 告诉编译器后续跟的是一个全局可见的名字*/

                /*.global _start让_start符号成为可见的标识符,*/

/*这样链接器就知道跳转到程序中的什么地方并开始执行程序*/

_start:         /*_start是一个函数的起始地址,也是编译、链接后程序的起始地址*/


ldr r0, =0x56000050 /*GPFCON 地址*/

ldr r1, =0x0100

str r1, [r0]


ldr r0, =0x56000054 /*GPFDAT 地址*/

ldr r1, =0

ldr r1, [r0]


halt:

b halt


① .text

.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段【可执行】

arm-linux-gcc编译器的关键词


② .global

.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;告诉编译器后续跟的是一个全局可见的名字【变量/函数名】

.global _start让_start符号成为可见的标识符,这样链接器就知道跳转到程序中的什么地方并开始执行程序。


③ _start

_start是一个函数的起始地址,也是编译、链接后程序的起始地址。

由于程序是通过加载器来加载的,必然要找到_start名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符号表中,供其他程序【如:加载器】寻找到。


ARM指令集–ldr、mov与str的用法与区别

mov的用法

在ARM体系中,mov只能用于数据在寄存器之间的移动或者往寄存器中写入立即数。格式如下:mov{条件}{s} 目的寄存器,源操作数

MOV     R1,R2    ;R1=R2


ldr的用法

LDR是将内存中的数载入到寄存器,LDR可以载入立即数。格式如下:LDR 目的寄存器,源

LDR     R1,=0xE0000000  ;R1=0xE0000000

LDR     R1,0xE0000000   ;将内存中地址为0xE0000000的内容载入到R1

LDR     R1,[R0]         ;将R0中的数所指定的地址的内容传输到R1


str的用法

STR是将寄存器中的数字载入内存。格式如下:STR{条件} 源寄存器,<存储器地址>

STR     R1,[R0]     ;将R1中的内容传输到R0中的数所指定的地址的内存中去


他们之间的区别

mov 只能用于寄存器之间的传输,传输立即数时有条件限制,只能装载通过偶数次移位能得到的立即数。


str/ldr 可以用于寄存器与内存之间的数据交换,STR是将寄存器中的数载入内存,LDR是将内存中的数载入到寄存器,LDR可以载入立即数。


并且LDR在往寄存器中载入立即数时,不受立即数的限制,而mov受其限制。

推荐阅读

史海拾趣

Dae Ryung Electronic Co Ltd公司的发展小趣事

在快速发展的过程中,Dae Ryung Electronic Co Ltd公司始终注重产品质量和品牌建设。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都进行严格把关。同时,公司还注重品牌形象的塑造和宣传,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的产品在市场上获得了良好的口碑和认可。

Advanced Energy公司的发展小趣事

在发展过程中,AE公司不断突破技术瓶颈,实现了多项重要技术的创新。这些技术突破不仅提升了公司产品的性能和质量,也推动了整个电子行业的发展。随着技术的不断进步,AE公司开始将业务拓展至全球市场。通过与各国客户的合作与交流,AE公司不断了解市场需求,优化产品设计,为全球客户提供更加优质的电源解决方案。

3L Electronic Corporation公司的发展小趣事

3L Electronic Corporation,自XXXX年在台北创立以来,凭借创始人的远见卓识和团队的努力,逐渐在电子行业崭露头角。初期,公司主要生产电子零组件,凭借着精湛的工艺和稳定的质量,赢得了客户的信赖。随着市场的扩大,公司逐渐拓展到电子产品修理和国际贸易等领域,为后续的快速发展奠定了坚实基础。

Datasensor公司的发展小趣事

随着公司的不断发展壮大,DATALOGIC公司逐渐整合为三大业务模块:自动化产品、手持设备和自动扫描系统。为了更好地适应市场变化和满足客户需求,公司于1998年将自动化产品业务模块独立出来,成立新的公司,并启用DATALOGIC Sensor &More新标识。2000年,公司进一步启用全新的DATASENSOR品牌标识,标志着公司在工业自动化光电检测领域的新篇章。同时,公司投入大量资金用于生产改善、项目管理和高新技术领域的发展,为公司的持续创新和市场拓展提供了有力保障。

Ferranti Electric Inc公司的发展小趣事

为了更好地满足全球客户的需求,Ferranti Electric Inc公司积极实施全球化战略。公司不仅在英国本土拥有生产基地和研发中心,还在全球范围内设立了多个分支机构和办事处。通过全球化布局,公司能够更好地了解不同市场的需求和特点,为客户提供更加定制化的产品和服务。同时,公司也积极参与国际竞争和合作,提升其在全球电气行业的影响力。

CITIZEN公司的发展小趣事

在20世纪中叶,西铁城公司迎来了一次重要的技术突破。1956年,公司成功研制出防震手表,并通过了空中坠表实验,这一创新轰动了整个行业。防震手表的推出不仅提升了西铁城产品的品质,也进一步巩固了其在全球腕表市场中的地位。这一技术的成功应用,也显示了西铁城在精密加工和测量技术方面的实力。

问答坊 | AI 解惑

(五)偶遇一好东东,不忘与大家分享: 分析笔记本电池及节能技术

个性化的电源管理技术和软件   ■ IBM PM Device和Battery MaxiMiser   图7   此外,该软件还能显示出电池的详细情况,如电压、容量、充电次数等参数。为了更有效地节电,除了CPU之外,Battery MaxiMiser还提供了PCI总线及CD-ROM的运行 ...…

查看全部问答>

关于模拟iic很奇怪的问题

目前在调一款rtc的芯片,通过iic进行读写的,目前采用的是模拟的方式。 现在的问题是,我用普通的io口进行模拟的话,读写都没有问题,但是如果换成了接了上拉电阻的io口的话,读写都不正常了 个人感觉不可理解 希望各位帮忙分析查找原因…

查看全部问答>

最近公司让我用isp1581和一个stc单片机开发一个驱动,现在一点头绪都没有,忘高手指教一下。

最近公司让我用isp1581和一个stc单片机开发一个驱动,现在一点头绪都没有,忘高手指教一下。…

查看全部问答>

现在有没有开放平台的mp4播放器?

想买一个能自己写小工具的mp4 现在有提供java接口等开放平台的mp4吗?或者至少提供bios调用接口也可以。…

查看全部问答>

请教关于ModelSim仿真的问题

大家好,本人初学VHDL,不能理解为什么需要用ModelSim进行仿真,因为我看在Quartus II中有“Processing->Start Simulation”功能,然后自己设计输入.vwf文件,运行以后就可以看输出的波形了。希望有知道的朋友可以告诉我,谢谢了。…

查看全部问答>

STM32的外部总线似乎是很慢的!

读: 最快只能到72/4 = 18Mword/S写: 72/3 = 24Mword/S…

查看全部问答>

香呼叫主,求救信号,有关pwm输入捕获的问题!

我的配置如下,但是我用信号发生器产生信号输入,根本就不进中断,但是我要是直接用导线给输入引脚引入高电平(相当于一个脉冲信号),就可以进中断,下面是我的程序,实在不明白原因!int void  void ICapture_Configuration(void) ...…

查看全部问答>

有谁用过通过SPI的选片信号来控制与多个SPI器件的通信?

我用2407,想跟多个带SPI接口的器件通信。打算用过CS信号来控制与不同的器件来通信,请问这样可以吗?有没有哪位高人试过?谢谢…

查看全部问答>