(1)单寄存器加载指令:

LDR   R0,[R1] :将内存中的一个字(4字节)加载到寄存器R0中。

  LDRB  R0,[R1] :将内存中的一个字节加载到寄存器R0中。

  LDRSB R0,[R1] :与上一条指令不同,本指令加载的一字节需要确定寄存器R0的高24bit时什么,上一条指令,R0的高24bit位补0,而本条指令,R0的高24bit补符号位。

(2)单寄存器存储指令:

STR R0,[R1]

STRB R0,[R1]

(3)分支指令:

(跳转范围是当前指令±32MB地址范围之内)

 B  label :跳转到标号label处,也就是该条指令结束后,下一条指令执行的就是标号处的指令。

    BL label :与B指令相同,也实现跳转,同时还返回地址(BL下一条指令地址)保存到LR中。

    BX    R0 :将R0的值作为地址,跳转到该地址处,并根据R0的值决定是否在ARM和Thumb之间进行切换。

(4)数据处理指令:

MOV R0,R1 :将R1的值赋给R0。

ADD(SUB) R0,R1,R2 :将R1的值加上(减去)R2的值,结果保存在R0中。

AND(ORR、EOR) R0,R1,R2 :将R1的值与(或,异或)R2的值,结果保存在R0中。

CMP R1,R2 :比较R1、R2的大小。【本指令运行的细节是(见寄存器中的CPSR):执行R1-R2的操作,结果为负数时,CPSR的N位置位,Z位清零;结果为0时,CPSR的N位清零,Z位置位;结果为正数时,CPSR的N位清零,Z位清零。但R1-R2的结果不保存,该指令常用于分支跳转】

 

movl var, %eax                #把内存地址var处的内容放入寄存器%eax中

movl %cs:var, %eax            #把代码段中内存地址var处的内容放入%eax中

movb $0x0a, %es:(%ebx)        #把字节值0x0a保存到es段的%ebx指定的偏移处

movl $var, %eax               #把var的地址放入%eax中

movl array(%esi), %eax        #把array+%esi确定的内存地址处的内容放入%eax中

movl (%ebx,%esi,4), %eax      #把%ebx+%esi*4确定的内存地址处的内容放入%eax中

movl array(%ebx,%esi,4), %eax #把array+%ebx+%esi*4确定的内存地址处的内容放入%eax中

movl -4(%ebp), %eax           #把%ebp-4内存地址处的内容放入%eax中,使用默认段%ss

movl foo(,%eax,4), %eax       #把内存地址foo+eax*4处内容放入%eax中,使用默认段%ds

 


 

bios寄存器偏移地址怎么设置_内存地址

 

 

R15---别名PC(Program Counter)程序计数器

R14---别名LR(Linked Register)链接寄存器

R13---别名SP(Stack Pointer)堆栈指针寄存器

 

PC的值=当前执行指令内存中的地址+8

 

CPSR---(Current Program Status Register)当前程序状态寄存器,作用是保存当前程序的状态,由以下几部分组成:

(1)条件码标志位:ARM指令条件执行的依据

N:运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,正数或零时N=0

              2)Z:指令结果为零时Z=1(通常表示结果“相等”)否则Z=0

C:当进行加法运算时(包括CMN指令),并且最高位产生进位时C=1,否则C=0

C=0,否则C=1

                           对于结合移位操作的非加法、减法指令,C为最高位最后移出的值,其它指令C通常不变

              4)V:当进行加减法运算,并且有符号溢出时V=1,否则V=0其它指令V通常不变。

(2)控制位:控制CPU是否响应中断。

I:中断禁止位,当I置位时IRQ中断被禁止

F:快中断禁止位,当I置位时FIQ中断被禁止

T:反应CPU当前的状态。当T位置位时,处理器在Thumb状态下运行,当T位清零时,处理器在ARM状态下运行。

(3)模式位:包括M4、M3、M2、M1、M0,这些位决定处理器的模式(处理器有7中模式:用户、快中断、中断、管理、中止、未定义、系统)

 

SPSR---(save program status register)保存程序状态寄存器,当异常发生时,由硬件自动将异常发生前的CPSR的值保存在SPSR中,以便将来处理异常结束后,程序能恢复原来的CPSR的值。