ARM未定义指令异常学习中关于字节对齐的心得

博客分享了ARM未定义指令异常学习中字节对齐的心得。指令原本按4字节对齐排放程序运行正常,在_start标签后增加未定义指令异常处理语句后,若不在reset标签前增加.align 4语句,编译后的reset段代码地址非4字节对齐,程序无法正常跳转执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM未定义指令异常学习中关于字节对齐的心得

今天学习jz2440开发板的未定义指令异常这一节课程,跟随韦东山老师编写代码编译烧写后程序老师无法正常运行,经过仔细排查发现是字节未4字节对齐导致的,之前的程序中start.S文件如下开始:
_start:
	/* 关闭看门狗 */
	ldr r0, =0x53000000
	ldr r1, =0
  	str r1, [r0]

指令从开始就是按照4字节对齐排放的,这样运行程序没有问题。但当在_start标签后增加未定义指令异常处理语句后,代码如下:

_start:
     b reset
     b do_und
 
 do_und:
     ldr sp, =0x34000000
 
     stmdb sp!, {r0-r12, lr}
     mrs r0, cpsr
     ldr r1, =und_string
     bl printException
  
     ldmia sp!, {r0-r12, pc}^
 
  und_string:
     .string "underdefined instruction exception"
     
 .align 4                                                                     
 reset:
     /* 关闭看门狗 */
     ldr r0, =0x53000000
     ldr r1, =0
     str r1, [r0]

如果不在reset标签前增加.align 4语句,那么编译后的reset段代码的地址为0x300000043,就不是4字节对齐的,所以程序启动后无法正常跳转执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值