按位 BEQ(相等跳转) bne(不相等跳转) 手札

1. 按位 

& 按位与,                 | 按位或 ,           ^ 按位异或
AND (位与&)         OR ( 位或| )        XOR ( 位异或^ )
1 & 1 = 1,             1 | 1 = 1,           1 ^ 1 = 0
1 & 0 = 0,             1 | 0 = 1,           1 ^ 0 = 1
0 & 1 = 0,             0 | 1 = 1,           0 ^ 1 = 1
0 & 0 = 0,             0 | 0 = 0,           0 ^ 0 = 0

2.ARM指令中BL 和BEQ是什么意思?还有LR指什么?

TST     R0, #0X8
BNE    SuspendUp ; BNE指令是“不相等(或不为0)跳转指令       跳到下一条指令
LDR   R1,#0x00000000

先进行and运算,如果R0的第四位不为1,则结果为零,则设置zero=1(继续下面的LDR指令);
否则,zero=0(跳到SuspendUp处执行)。



    ldr r0, =MEM_CTL_BASE
    adr r1, sdram_config     /* sdram_config的当前地址 */
    add r3, r0, #(13*4)      /* r3 = r0 + (13*4) */
1:
    ldr r2, [r1], #4     /* 从r1所指的地方读一个值存到r2 读出来之后让 r1加4  */
    str r2, [r0], #4     /* 把r2存到r0所指的地方 然后让 r0加4  */
    cmp r0, r3           /* 比较 r0 和 r3 */
    bne 1b               /* 如果 不相等的话 就跳回到 标号1 程序里可以有多个1标号想跳回到 后面的 1标号 1b  想跳回到 前面的 1标号 1f */



CMP    R1,#0
BEQ   Label    即当R1和0 相等的时候程序跳到标号Label处执行

relocate:                       /*relocate U-Boot to RAM       */

       adr   r0, _start        /*r0 <- current position of code   */

       ldr   r1, _TEXT_BASE         /* test if we run from flash or RAM */

       cmp     r0, r1                  /* don't reloc duringdebug         */

       beq     clear_bss         /* 比较r0和r1,如果不相等就执行CopyCode2Ram 把代码从flash中copy到ram中去 */

       ldr   r2, _armboot_start

       ldr   r3, _bss_start

       sub  r2, r3, r2        /*r2 <- size of armboot            */

       bl  CopyCode2Ram      /*r0: source, r1: dest, r2: size */

clear_bss:

       …….




B、BL  跳转。BL相当于C中的调用子函数,在跳转的标号最后加上MOV PC,LR 就可以返回BL下一条指令。 
BEQ(比较相等,EQ为相等) 在BEQ指令前应该有一条比较指令,比如CMP R0,R1 若R0=R1,则执行BEQ指令,否则不执行。   
LR 链接寄存器(用来存放子程序的返回地址) LR相当于指针变量,指令在内存中的地址。如果子程序再调用子程序,返前一次调用的子程序的返回地址要存储栈内 。

TST指令是数据处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位与运算,并根据运算结果更新CPSR中条件标志位的值。 例如:TST R1,#%1用于测试在寄存器R1中是否设置了最低位。
BEQ指定是跳转指令,但是跳转要满足一定的条件,例:CMP    R1,#0    BEQ  Label    即当R1和0相等的时候程序跳到标号Label处执行,

ARM指令的,他说是加载多个寄存器之后按字长度增加,字长不是32位么,他怎么是增加的4位呢?
地址是按字节来的,32位也就是4个字节


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值