测试目标:
测试代码:
1. start.s
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
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的倍数对齐。
原文地址:https://blog.csdn.net/weixin_52008375/article/details/134761803
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35958.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。