历史上的今天
返回首页

历史上的今天

今天是:2025年12月07日(星期日)

正在发生

2022年12月07日 | s3c2440裸机之中断向量的写法(二)

2022-12-07 来源:zhihu

先说明一下LDR伪指令。

LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中。

语法格式

LDR{cond} register,={expr|label-expr}

其中的符号及参数说明如下:

●cond为可选的指令执行条件。

●register为目标寄存器。

●expr为32位的常量,编译器将根据expr的取值情况,处理LDR伪指令如下。

●当expr表示的地址值没有超过MOV或MVN指令中地址的取值范围时,编译器使用合适的MOV或者MVN指令替代该LDR伪指令。

●当expr表示的地址超过了MOV或MVN指令中地址的取值范围时,编译器将该常数放在数据缓冲区中,同时用一条基于PC的LDR指令读取该常数。

●label-expr为基于PC的地址表达式或者是外部表达式。当label-expr为基于PC的地址表达式时,编译器将label-expr表示的数值放在数据缓冲区中,同时用一条基于PC的LDR指令读取该值。当label-expr为外部表达式,或者非当前段的表达式时,汇编编译器将在目标文件中插入链接重定位伪操作,这样链接器将在链接是生成该地址。


使用LDR伪操作编写中断向量表如下:

/* 中断向量表的第二种写法 */
ldr pc ,= reset
ldr pc ,= undefined_instruction
ldr pc ,= software_interrupt
ldr pc ,= prefetch_abort
ldr pc ,= data_abort
ldr pc ,= not_used
ldr pc ,= irq
ldr pc ,= fiq

reset:
	b reset
undefined_instruction:
	b undefined_instruction
software_interrupt:
	b software_interrupt
prefetch_abort:
	b prefetch_abort
data_abort:
	b data_abort
not_used:
	b not_used
irq:
	b irq
fiq:
	b fiq

反汇编结果如下:

33f80000 <.text>:
33f80000:	e59ff038 	ldr	pc, [pc, #56]	; 33f80040 <.text+0x40>
33f80004:	e59ff038 	ldr	pc, [pc, #56]	; 33f80044 <.text+0x44>
33f80008:	e59ff038 	ldr	pc, [pc, #56]	; 33f80048 <.text+0x48>
33f8000c:	e59ff038 	ldr	pc, [pc, #56]	; 33f8004c <.text+0x4c>
33f80010:	e59ff038 	ldr	pc, [pc, #56]	; 33f80050 <.text+0x50>
33f80014:	e59ff038 	ldr	pc, [pc, #56]	; 33f80054 <.text+0x54>
33f80018:	e59ff038 	ldr	pc, [pc, #56]	; 33f80058 <.text+0x58>
33f8001c:	e59ff038 	ldr	pc, [pc, #56]	; 33f8005c <.text+0x5c>
33f80020:	eafffffe 	b	33f80020 
33f80024:	eafffffe 	b	33f80024 
33f80028:	eafffffe 	b	33f80028 
33f8002c:	eafffffe 	b	33f8002c 
33f80030:	eafffffe 	b	33f80030 
33f80034:	eafffffe 	b	33f80034 
33f80038:	eafffffe 	b	33f80038 
33f8003c:	eafffffe 	b	33f8003c 
33f80040:	33f80020 	mvnccs	r0, #32	; 0x20
33f80044:	33f80024 	mvnccs	r0, #36	; 0x24
33f80048:	33f80028 	mvnccs	r0, #40	; 0x28
33f8004c:	33f8002c 	mvnccs	r0, #44	; 0x2c
33f80050:	33f80030 	mvnccs	r0, #48	; 0x30
33f80054:	33f80034 	mvnccs	r0, #52	; 0x34
33f80058:	33f80038 	mvnccs	r0, #56	; 0x38
33f8005c:	33f8003c 	mvnccs	r0, #60	; 0x3c

可以看出,LDR伪指令被编译器编译后,将地址常量存放在代码段的最后,并使用相对于PC偏移的地址进行访问。其中,地址常量为固定的0x33f80020...,也就是符号的地址在链接阶段已经确定了。


当代码运行于0地址时(重定位前),这条指令将使PC指向运行时地址,这时运行时地址还没有指令,所以会出错误。所以LDR register,=label-expr是地址相关的。


推荐阅读

史海拾趣

Hamlin ( Littelfuse )公司的发展小趣事

故事一:市场定位与技术创新

HAHN - Elektrobau GmbH & Co KG公司自成立以来,便在电子行业中找到了自己的独特定位,专注于生产面向特定应用的特种变压器线圈。起初,公司通过深入研究市场需求,发现传统变压器线圈在特定应用中存在效率低下、体积过大等问题。于是,HAHN投入大量资源进行技术研发,优化产品设计,成功开发出了一系列高效、紧凑的特种变压器线圈,迅速赢得了市场的认可。这一举措不仅巩固了公司在电子行业中的地位,也为后续的发展奠定了坚实的基础。

故事二:合作与共赢

在发展过程中,HAHN深知合作的重要性。公司积极与上下游企业建立紧密的合作关系,共同推动技术进步和产业升级。例如,HAHN与多家知名电子制造商建立了长期合作关系,共同开发新产品,优化生产工艺。通过这些合作,HAHN不仅获得了宝贵的市场信息和技术支持,还成功地将自身产品打入了更广阔的市场领域。同时,公司还积极与供应商和分包商合作,通过优化供应链管理,降低了生产成本,提高了生产效率,实现了共赢发展。

故事三:全球化战略

随着电子行业的全球化趋势日益明显,HAHN也开始了自己的全球化战略。公司不仅在欧洲市场取得了显著成绩,还积极向亚洲、北美等市场扩张。为了更好地服务全球客户,HAHN在多个国家和地区设立了分支机构,并建立了完善的销售和服务网络。通过这些举措,HAHN成功地将自己的产品和服务推向了全球市场,进一步提升了品牌知名度和市场份额。

故事四:品质与服务的双重保障

在电子行业中,品质和服务是企业生存和发展的关键。HAHN深知这一点,因此始终将品质和服务放在首位。公司建立了严格的质量控制体系,对每一个环节都进行严格的把关,确保产品质量达到最高标准。同时,公司还注重提升客户服务水平,建立了专业的客户服务团队,为客户提供全方位、个性化的服务。这些举措不仅赢得了客户的信赖和好评,也为公司赢得了更多的业务机会。

故事五:持续研发与创新

面对日新月异的电子行业技术,HAHN始终保持着高度的敏锐性和前瞻性。公司不断加大研发投入,引进高端人才和先进设备,致力于新技术、新产品的开发。通过持续的研发和创新,HAHN不断推出具有自主知识产权的新产品和技术方案,为电子行业的发展注入了新的活力。同时,公司还积极参与行业标准的制定和修订工作,推动行业技术进步和产业升级。这些努力不仅提升了公司的核心竞争力,也为公司的可持续发展奠定了坚实的基础。

Broadcom(博通)公司的发展小趣事

2015年,博通迎来了历史性的时刻。安华高科技以170亿美元现金与200亿美元的股票,合计370亿美元并购了博通,使其成为安华高科技的子公司。这一并购不仅使博通获得了更多的资源和支持,也为其后续的快速发展奠定了坚实的基础。此后,博通通过一系列的并购活动,不断扩张其业务范围和市场份额。

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

随着全球化的深入发展,博通积极调整战略,加强全球布局。公司通过设立研发中心、拓展销售网络等方式,不断提升其在全球市场的竞争力。同时,博通还积极与其他行业领军企业开展战略合作,共同推动电子行业的发展和创新。

这些故事展示了博通在电子行业中的发展历程和成就。从初创时期的艰难起步,到困境中的重生,再到并购扩张和技术创新,博通始终保持着坚韧不拔的精神和追求卓越的态度。正是这样的精神和态度,使博通能够在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

Heatron公司的发展小趣事

在20世纪初,随着电子工业的蓬勃发展,对高效、可靠电加热元件的需求日益增长。Heatron公司凭借其深厚的技术积累,成功研发出了一种新型的高密度单头电热管,该产品在耐高温、耐腐蚀性能上实现了重大突破。这一技术成果迅速获得了市场的广泛认可,不仅提升了Heatron在电加热器市场的地位,还推动了整个电子行业相关应用的技术进步。

Fibrefab Limited公司的发展小趣事

Fibrefab始终坚持以客户为中心的服务理念。为了提升客户满意度和忠诚度,Fibrefab不断加强售前咨询、售中服务和售后支持等方面的投入。公司建立了一套完善的服务体系,为客户提供从方案设计、产品选型、安装调试到后期维护等全方位的服务支持。此外,Fibrefab还积极收集客户反馈和建议,不断优化产品和服务以满足客户需求。

CUI Devices公司的发展小趣事

CUI Devices的历史可以追溯到1989年,当时它作为CUI Inc的一部分,在俄勒冈州波特兰郊外以高精度示波器探头制造商的身份进入市场。然而,随着时间的推移,公司逐渐认识到市场的多元化需求,开始积极拓展其产品供应和业务范围。2019年9月,一群在CUI Inc有着深厚背景和平均任期超过15年的高级管理人员,剥离了部分业务,成立了新的私人实体——CUI Devices。这一转型不仅为公司注入了新的活力,也为电子元件行业带来了更多的可能性。

问答坊 | AI 解惑

PCB线路电阻计算器

PCB线路电阻计算器 …

查看全部问答>

求教,wince中drawtext的问题

我从文件中读出一段文字然后显示到另一个窗口上,可是当我穿硬代码时能顺利显示,但是变量中的值不能显示(其中的值我messagebox出来是独到的东西,即变量不为空),请大侠们指教。。。…

查看全部问答>

关于eboot的几个问题

1、为什么我编译成功的eboot.bin烧写到nor中不起作用?害得我每次都的烧写eboot.nb0,但是板商提供的bootloader是.bin格式的 怎么才能让.bin格式的eboot在nor中运行起来?是在boot.bib中有一些选项吗? 2、我编译的eboot有256k太大了,每次烧写都 ...…

查看全部问答>

关于arm2410于java的结合问题

小弟最近想做一下关于arm2410于java结合方面的论文,但苦于对arm了解甚少,不知道java是否可在arm上很好的搭建,两者结合起来做哪方面的比较好?以及java于c++相比到底优势在哪里?那位仁兄有好的idear可以分享一下!!…

查看全部问答>

如何得到zigbee网络的拓扑结构?

如果想得到zigbee网络中所有节点的如下信息:ieee address,short address,type(coordinator,router,end device),应该怎样做?我用的是Ti的z-stack协议栈,CC2430,我不知道该用mt,还是zdo或是其他的?我应该从哪方面去找这些资料呢?还希望过来人能点提示 ...…

查看全部问答>

LED灯相对于普通灯泡的优势及其散热管理

 LED灯相对于普通灯泡有哪些优点   1、节能,比传统白炽灯节电80%以上,相同功率下亮度是白炽灯的10倍;   2、寿命超长,50,000小时以上,是传统钨丝灯的50倍以上;   3、没有有害气体,如汞;   4、没有任何射线,如紫外线; ...…

查看全部问答>

闲散电子配件一批,详见清单【超值】【【【【

闲散电子配件一批,详见清单 上次在OURDEV发过一次,但因为资料没整理好,只卖出去一部分,这次重发,并加了东西,~ 欢迎竟拍! 快速恢复二极管 ,BYC10B, 600V-10A ,数量 80只,全新 27N25,250V,27A,NMOS管 ,数量30只,已折脚 TS ...…

查看全部问答>

【转】各种pcb软件比较

作者从网格纸出发,一路走来,从他的经历讲述了各种软件的特点      我用eda软件画板有些年头了,今天写点也算是个总结,权当回忆吧 很久很久以前……偶见到了tango,那时候我觉得还不如用网格纸画电路板方便,而且觉得 ...…

查看全部问答>

vc5509系列DSP的函数库有小波变换吗????

现在正在做项目,要求用这个开发板来实现图像压缩,我们用小波变换来编码,遇到很多的问题求大神指点…

查看全部问答>

MSP430G2553 多路脉冲计数

嗯 这么一个事情啊 我要做一个东西。。。需要单片机来对外部的两个频率不同的脉冲计数 嗯  搜了一下 然后好多人说 可以用计时器A来计数   有人说用 TACLK   有人说用捕获 问题是   计时器A的 TAR只有 ...…

查看全部问答>