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
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处执行
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个字节
2580

被折叠的 条评论
为什么被折叠?



