分类: 嵌入式
2010-11-29 11:34:40
在U-Boot源码的start.s中有着如下红色部分语句:
.globl _start _start: b start_code ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq _undefined_instruction: .word undefined_instruction _software_interrupt: .word software_interrupt _prefetch_abort: .word prefetch_abort _data_abort: .word data_abort _not_used: .word not_used _irq: .word irq _fiq: .word fiq .balignl 16,0xdeadbeef |
下面介绍GNU ARM ASM中的balign:
.balign[wl]
指令说明:以某种排列方式在内存中填充数值。(该指令与armasm中的ALIGN类似)。
power_of_2表示排列方式,其值可为4,8,16或32,单位是byte;
fill_value是要填充的值;
max_padding最大的填充界限,请求填充的bytes数超过该值,将被忽略。
.balignw 和.balignl是.balign命令的变化形式。.balignw使用2个字节来填充空白区。.balignl使用4字节来填充。
.balign是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是编译器来实现其功能的。.balignl是.align的变体,.balign是意思是,在以当前地址开始,地址计数器必须是以第一个参数为整数倍的地址为尾,若当前地址不为第一个参数的整数倍,则用第二个参数来填充当前地址,直到地址为第一个参数的整数倍。
下面分析u-boot文件的反汇编代码:
u-boot: file format elf32-littlearm Disassembly of section .text: |
红色部分的PC