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的倍数对齐。

相关推荐
_Kayo_4 小时前
node.js 学习笔记3 HTTP
笔记·学习
CCCC13101637 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9368 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头8 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑9 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA10 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
杜子不疼.10 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖11 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨11 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb11 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa