指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。
在S3C2410、S3C2440的数据手册中对各种汇编指令有详细的描述;这里只对较常见的作写介绍。
这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。
ldr是伪命令,不是真实存在的指令,编译器会把它扩展成真正的指令;如果该能用“立即数”来表示,则使用mov指令,否则编译时将该保存在某个,使用内存读取指令把它读出来。
ldr既可以指低至读取伪指令,也可以是内存访问指令。当他的第二个参数前面有=时标伪指令,否则表内存访问指令。
ldr指令从内存中读取数据到寄存器,str指令把寄存器的指存储到内存中,他们的操作数都是32位的。
多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。多寄存器存取指令的汇编格式如下:
ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操作来实现的。这两条指令分别是:
AND指令将操作数operand2与Rn的值按位逻辑"与",结果存放到目的寄存器Rd中。若设置S,则根据运算结果影响N、Z位,在计算第二操作数时,更新C位,不影响V位(指令ORR、EOR、BIC对标志位的影响同AND指令)。
BIC指令将Rn的值与操作数operand2的反码按位逻辑"与",结果存放到目的寄存器Rd中。指令示例:BICR0,R0,#0x0F;将R0最低4位清零,其余位不变。
软件中断指令SWI用于产生SWI异常中断,用来实现在用户模式下对操作系统中模式的程序的调用;断点中断指令BKPT主要用于产生软件断点,供调试程序用。
.extern定义一个外部符号(可以是变量也可以是函数),的代码表示表文本文件中引用的main是一个外部函数。