MDK ARM环境下的伪指令的测试

目录

测试目标:

测试代码:

[1. start.s](#1. start.s)

[2. align.s](#2. align.s)

测试结果:

[1 .ldr伪指令的测试结果:](#1 .ldr伪指令的测试结果:)

[2 .align伪操作测试结果:](#2 .align伪操作测试结果:)

结果分析:


测试目标:

  1. 熟悉ARM处理器的伪指令,本次实验主要来练习ldr伪指令和align伪操作的使用。
  2. 理解ARM处理器伪指令的功能,并学会分析汇编语言代码。

测试代码:

1. start.s

bash 复制代码
area init,code,readwrite

 entry

start

ldr r0,=0x7000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4



ldr r0,=0x7e004000

mov r1,#0

str r1,[r0]



ldr r1,=0x7e000020

mov r0,#0x1000

str r0,[r1]



ldr r1,=0x7e000024

mov r0,#0

str r0,[r1]

halt

b halt

 end

2. align.s

bash 复制代码
 area init,code,readwrite

 entry

start

mov r1,r0

mov r0,#12

ldr r4,src

ldr r3,=src



ldr r5,str

ldr r6,=str

ldr r7,str

src

dcd 7777

str

dcd 0x33f80000

dcb 0x88

dcb 0x77

align

reset

mov r8,#0

end

测试结果:

1 .ldr伪指令的测试结果:

2 .align伪操作测试结果:

结果分析:

1.LDR伪指令是将一个32位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器的内容。由图1可知LDR伪指令替代成具有相同功能的thumb指令,加载的常数不符合MOV或MVN指令立即数的要求,汇编器将常量放入内存文字池,并使用一条程序相对偏移得LDR指令从内存文字池读出常量。

2..align的作用范围只限于紧跟它的那条指令或者数据,而接下来的指令或者数据的地址由上一条指令的地址和其长度决定。由图2可知align下紧跟的指令的PC值是十六进制的28,是以4的倍数对齐。

相关推荐
Y.O.U..8 分钟前
GO学习-io包常用接口
开发语言·学习·golang
semantist@语校8 分钟前
第五十七篇|东京银星日本语学校的数据建模:高密度城市中的学习节律、制度边界与 Prompt 接口设计
大数据·数据库·人工智能·学习·百度·prompt·知识图谱
代码游侠8 分钟前
学习笔记——TCP 传输控制协议
linux·网络·笔记·网络协议·学习·tcp/ip
深蓝海拓11 分钟前
PySide6从0开始学习的笔记(十二) QProgressBar(进度条)
笔记·python·qt·学习·pyqt
悟凡爱学习22 分钟前
zigbee学习笔记 --认识什么是zigbee
笔记·学习
q行22 分钟前
MySQL学习日志--表之间的关系
数据库·学习·mysql
切糕师学AI22 分钟前
ARM 汇编指令:ERET
汇编·arm开发
尘似鹤31 分钟前
Uboot移植--修改lcd和网络驱动
linux·学习·uboot
d111111111d38 分钟前
STM32平衡车工具-匿名助手+虚拟串口如何使用。
笔记·stm32·单片机·嵌入式硬件·学习
式51639 分钟前
大模型学习基础(七)强化学习概念回顾
学习