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 Linker的使用——应用程序运行环境的初始化
推荐阅读最新更新时间:2024-03-16 14:51
设计资源 培训 开发板 精华推荐
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸