_undefined_instruction是一个标号,处理到这里时,asm会把undefined_instruction的值按16bit的形式放在此标号处。
ldr pc, _undefined_instruction
就是从_undefined_instruction处取值,即undefined_instruction, 并设置到pc中。
.word就是在这个地方放一个值。相当于在这里定义一个数据变量。用.word定义了一个16bit的数据。
并将underfined_instruction的值本身放在这里,因此,pc=undefined_instruction,实现跳转。
ldr 是把数据从存储器传输到寄存器上,格式如下:
ldr(条件) 目的寄存器,<存储器地址>
转帖:
ldr r1, _rWTCON
_rWTCON:
.word 0x15300000
这两个语句是不是说把地址0x1530 0000 上的内容传递到r1? 而不是把0x1530 0000 放到r1 ?
不是把地址0x1530 0000 上的内容传递到r1,是把地址_rWTCON上的内容放到r1,而地址_rWTCON上的内容是0x15300000。实际上就是把r1设置为0x15300000
------------------------------------------
.word和0x1530 0000有什么关系?.word就是把expression上的值取出来? expression代表地址?
.word expression就是在当前位置放一个word型的值,这个值就是expression
举例来说,
_rWTCON:
.word 0x15300000
就是在当前地址,即_rWTCON处放一个值0x15300000
翻译成intel的汇编语句就是:
_rWTCON dw 0x15300000没有.long/.word
汇编程序就不知道你想在这里放一个多大的数据,
相当于数据类型。
另外还应注意:在arm7,9中(其他的我不清楚)arm指令集中一个字类型就是32位。