ARM汇编语言源程序格式

发布者:未来感知最新更新时间:2016-04-26 来源: eefocus关键字:ARM  汇编语言  源程序格式 手机看文章 扫描二维码
随时随地手机看文章
Semihosting 在ADS的C语言函数库中,某些ANSIC的功能是由主机的调试环境来提供的,这套机制有一个专门术语叫Semihosting。

Semihosting通过一组软件中断(SWI)指令来实现。
当一个Semihosting软中断被执行时,调试系统先识别这个SWI请求,然后挂起正在运行的程序,调用Semihosting的服务,完成后再恢复原来的程序执行。
因此,主机执行的任务对于程序来说是透明的。
SWI传递的功能号
(例如: semi-hosting, 使用0x123456 (ARM) or 0xAB (Thumb)


在此例中,表格jumptable中存放地是子程序地入口地址,我们把这种表格称为跳转表格。
注意指令LDR PC,[R3,R0,LSL #2],执行地操作为PC=R3+R0×4,因为表格中存放地地址为4字节地址,所以要将R0乘以4得出偏移量,再加上表格首地址,得出子程序地入口地址赋值给PC。

字符串拷贝程序设计
下面的例子为用ARM指令编写的串拷贝的例子。
两个数据串都放在数据段中,且用DCB伪指令定义,DCB为定义1字节或多字节内存空间,双引号中的字符串在内存中是顺序存放的,因此取数/存数时需要使用LDRB和STRB指令;
若数据串是用DCD存放的,则应使用LDR和STR指令。
另外,例子中采用的LDRB/STRB 指令是后索引寻址方式,即寻址完成后更新地址。

字符串拷贝程序设计(用LDR和STR实现)
AREA StrCopy, CODE, READONLY
ENTRY ; 程序入口
start
LDR r1, =srcstr ; 初始串的指针
LDR r0, =dststr ; 结果串的指针
BL strcopy ; 调用子程序执行复制
stop
MOV r0, #0x18 ; 执行中止
LDR r1, =0x20026 ;
SWI 0x123456 ;

字符串拷贝程序设计(用LDR和STR实现)——续
strcopy
LDRB r2, [r1],#1 ; 加载并且更新源串指针
STRB r2, [r0],#1 ; 存储且更新目的串指针;
CMP r2, #0 ; 是否为0
BNE strcopy ;
MOV pc,lr ;
AREA Strings, DATA, READWRITE
srcstr DCB "First string - source",0
dststr DCB "Second string - destination",0
END

字符串拷贝程序设计
数据串拷贝时,若使用LDM和STM则可增加程序的效率。考虑到ARM的寄存器,一次采用8个寄存器进行传输比较合适,
通过指令: MOVS r3,r2, LSR #3 来计算需要几轮8位数据传送,剩余的数据个数可以通过指令ANDS r2, r2, #7 获得,再对其进行按字传输即可。

字符串拷贝程序设计(用LDM和STM实现)
AREA Block, CODE, READONLY ; 命名
num EQU 20 ; 设置被拷贝的字数
ENTRY ; 程序入口
start
LDR r0, =src ; r0 = 源串指针
LDR r1, =dst ; r1 = 目的串指针
MOV r2, #num ; r2 = 拷贝字数
MOV sp, #0x400 ; 设置堆栈指针 (r13)
blockcopy
MOVS r3,r2, LSR #3 ; 字数/8
BEQ copywords ; 少于8个字
STMFD sp!, {r4-r11} ; save some working registers
octcopy
LDMIA r0!, {r4-r11} ; 从源串加载8个字
STMIA r1!, {r4-r11} ; 放入目的串
SUBS r3, r3, #1 ; 控制变量减少
BNE octcopy ; ... 继续

字符串拷贝程序设计(用LDM和STM实现)——续
LDMFD sp!, {r4-r11} ;
copywords
ANDS r2, r2, #7 ; 奇数字被拷贝
BEQ stop ; No words left to copy ?
wordcopy
LDR r3, [r0], #4 ; 从源串加载一个字且指针自增
STR r3, [r1], #4 ; 存储到目的串
SUBS r2, r2, #1 ; 字控制变量减少
BNE wordcopy ; 继续
stop
MOV r0, #0x18 ; 执行中止
LDR r1, =0x20026 ;
SWI 0x123456 ;
AREA BlockData, DATA, READWRITE
src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END

关键字:ARM  汇编语言  源程序格式 引用地址:ARM汇编语言源程序格式

上一篇:ARM启动代码研究
下一篇:ARM Linker的使用——应用程序运行环境的初始化

推荐阅读最新更新时间:2024-03-16 14:51

传奇芯片架构师Jim Keller离职后,AMD取消了K12 ARM CPU项目
据外媒WccfTech消息,传奇芯片架构师JimKeller在一次会议上表示,在他离开前雇主AMD后,他的K12ARMCPU项目被“愚蠢地取消”了。 据报道,“计算的未来”会议由印度科学研究所计算机科学与自动化系举办,在会议上,JimKeller简要概述了他之前从事的各种项目以及芯片设计的基础知识。    JimKeller表示,当他在AMD时,他从事Zen1的开发工作,并制定了Zen2和Zen3的计划。    如上图所示,AMD曾在PPT上宣布过K12ARMCPU 项目,该系列处理器原定于2017年上市,针对密集服务器、嵌入式细分市场。据JimKeller透露,K12ARMCPU项目实际上是在他离开AMD公司后被某些产品
[家用电子]
传奇芯片架构师Jim Keller离职后,AMD取消了K12 <font color='red'>ARM</font> CPU项目
成功移植NET-SNMP到ARM平台
经过一个月的不懈努力终于将NET-SNMP成功移植到了ARM平台,网上关于NET-SNMP的资料很少,仅有的一些文章也都是轻描淡写,很容易被误导,我就是其中的受害者之一,交叉编译过程很复杂,要配置参数,路径,还有库。所以稍有插翅就会前功尽弃。而且每编译一次NET-SNMP都会耗费很多的时间。很容易挫败人的自信心。我整整啃了一个月的英文文档,边看边试。下面把详细过程贴出来,跟大家共享,希望那些也想移植NET-SNMP能够少走弯路。 主机环境 Windows + vmware(redhat9.0) IP分配如下: ARM开发板:192.168.4.151 Windows: 192.168.4.44 R
[单片机]
今年它最强 ARM芯片图形性能跑分横向对比
    近年来智能手机快速发展,ARM架构的芯片产业得到了长足的进步。在2009年,诺基亚的旗舰手机N97不过采用了434MHz的ARM11处理器,如今的三星Note3、HTC One,索尼Z1这类旗舰手机都已经进步到了四核、八核,单核频率可以媲美桌面PC了。 时间来到2013年秋,各家手机厂商纷纷发布了秋季的新品手机。从秋季发布的手机芯片来看,逐步迈向更多核心的,强调更好的性能与功耗的平衡将会是未来一两年里手机芯片的大趋势。性能上的军备竞赛现在仍然处于混乱的战国时代,正是因为各家纷纷自卖自夸的做法使得消费者更加难以弄清楚到底谁家的产品更好。 虽然说业内都在强调体验,但是不管是谁家的产品都需要硬件配置作为金字塔的基础,哪怕是
[手机便携]
苹果重新设计款ARM iMac,Face ID或将被推迟
有爆料称,苹果正在研发重新设计的iMac新品,这是自2012年以来iMac产品线最大规模的设计大调整。 不过,根据彭博社Mark Gurman的一份新报告,苹果Face ID面部识别认证系统很可能会出现在重新设计的第二次迭代中,而不是2021年第一版。 这个小插曲是在关于即将推出的M1 MacBook Air重新设计的报告末尾传出的。此外,报告还强调,苹果打算对其Mac产品线推出一系列更新,以满足Mac最坚定支持者的愿望,包括推出新的端口、插槽和网络蜂窝连接。 苹果还为 Mac 开发了对蜂窝连接(Mac 通过智能手机网络连接互联网的能力)和 Face ID(面部识别系统)的基础支持。但这两项功能似乎都不会很快到来。为此
[嵌入式]
基于ARM核的微处理器ADμC7024在医疗电子中的应用
0 引言 随着信息技术的迅猛发展和人民生活水平的提高,极大地推动了医疗电子设备的发展,当今医疗电子设备的发展趋势是高精度、实时性、低功耗和小尺寸,作为医疗电子设备中核心地位的MCU(微处理器)也随着这一发展趋势向前不断衍变着。由早期的8位MCU发展到目前的32位RISC(精简指令集计算机)MCU。美国ADI公司根据市场的需要最新推出了一款基于ARM(高级精简指令集计算机)核的微处理器ADμC7024便是目前32位RISC MCU的杰出代表。ADμC7024卓越的处理能力、集成众多片上外围器件和芯片低功耗的特点,完全胜任目前医疗电子设备的需求及未来的发展目标。 本文以ADμC7024在医疗电子中监护产品脉搏血氧计的应
[单片机]
基于<font color='red'>ARM</font>核的微处理器ADμC7024在医疗电子中的应用
ARM的异常及向量表
ARM具有7种异常,分别为: 1、复位 2、未定义指令 3、软中断 4、预取指令终止 5、数据终止 6、中断请求(IRQ) 7、快速中断请求(FIQ) 用一句通俗的话去表达ARM的运行情况,那就是ARM总会在运行在以上7种异常情况的某一种之下。初初了解ARM时总会难于去了解这个 异常 是什么样的一个意思,到了现在对ARM有了一点肤浅的理解后,其实可以将这个 异常 理解为 环境 ,或其他表达ARM运行情况的一个形容词就行了。 向量表。现在平时所谓的“表”就是由多项内容构成的一个文字模式,ARM向量表其实也是这样,向量表就是由以上ARM的7种异常的入口地址所构成的。如下表简单示意, 异常类型
[单片机]
C语言和ARM汇编混合编程实现阶乘运算
1.阶乘运算必须用汇编语言实现; 2. 通过C语言调用阶乘运算结果并显示出来。 (1) 用汇编语言编写阶乘运算子程序,命名为zmc.s; 程序如下: AREA asmfile,CODE,READONLY EXPORT asmDouble asmDouble sub R1,R0,#1 cmp R1,#00 BEQ L2 L1 mul R2,R0,R1 sub R1,R1,#1 mov R0,R2 cmp R1,#00 BNE L1 L2 mov pc, lr END (2) 将其添加到半主机程序中的SYS中; (3) 将半主机程序的main修改如下: #inclu
[单片机]
基于ARM44B0x的信号发射机控制器设计与实现
1.前言 船舶上使用的信号发射机是连续工作的,所以需要一个控制器对发射机的工作状态进行监控,常见的是用单片机作控制器的内核,但由于32位微处理器具有更好的精度和可靠性且低成本低功耗,所以在工业控制领域的应用日益广泛。采用嵌入式的32位微处理ARMS3C44B0x作为控制器的内核,设计的控制器将比用单片机作内核的处理器具有更全面的功能和更好的使用性能。 发射机控制器的主要功能是对多路模拟量和开关量的数据采集和处理监控发射机的工作状态;控制器控制发射机同时控制器又受上位机的控制,它要能在任意时刻准备好接收从上位机串口、网口发来的数据,它们之间的相对关系如图: 图1 控制器系统结构图 上位机向控制器发送数据从而实现对控
[单片机]
基于<font color='red'>ARM</font>44B0x的信号发射机控制器设计与实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved