1.1.4. .word

_undefined_instruction:	.word1 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
        

1

http://blogold.chinaunix.net/u3/115924/showart_2280163.html

.word .word expr {,expr}… 分配一段字内存单元,并用expr初始化字内存单元(32bit)

http://re-eject.gbadev.org/files/GasARMRef.pdf

表 1.2. .word的语法

DirectiveDescriptionSyntaxExample
.wordDefine word expr (32bit numbers).word expr {, …}.word 144511, 0x11223


所以上面的含义,以_undefined_instruction为例,就是,此处分配了一个word=32bit=4字节的地址空间,里面存放的值是undefined_instruction。

而此处_undefined_instruction也就是该地址空间的地址了。用C语言来表达就是:

_undefined_instruction = &undefined_instruction

*_undefined_instruction = undefined_instruction

在后面的代码,我们可以看到,undefined_instruction也是一个标号,即一个地址值,对应着就是在发生“未定义指令”的时候,系统所要去执行的代码。

(其他几个对应的“软件中断”,“预取指错误”,“数据错误”,“未定义”,“(普通)中断”,“快速中断”,也是同样的做法,跳转到对应的位置执行对应的代码。)

所以:

ldr pc, 标号1
......
标号1:.word 标号2
......
标号2:
......(具体要执行的代码)
                

的意思就是,将地址为标号1中内容载入到pc,而地址为标号1中的内容,正好装的是标号2。

用C语言表达其实很简单:

PC = *(标号1) = 标号2

对PC赋值,即是实现代码跳转,所以整个这段汇编代码的意思就是:

跳转到标号2的位置,执行对应的代码。