在網(wǎng)上看了一些bne和beq的區(qū)別,但是對于初學(xué)者來說,容易越看越糊涂,因此簡單介紹下:
我們先分析CPSR寄存器的Z標(biāo)識位:

cmp指令可以直接影響CPSR寄存器的Z標(biāo)識位(條件位),從圖中可以看出:比較結(jié)果為0時,Z位置1,比較結(jié)果為非0時,Z位為0;
再來看一段SDRAM重定位中的子過程(不必糾結(jié)于子過程的功能):
// 清bss段,其實就是在鏈接地址處把bss段全部清零clean_bss: ldr r0, =bss_start ldr r1, =bss_end cmp r0, r1 // 如果r0等于r1,說明bss段為空,直接下去 beq run_on_dram // 清除bss完之后的地址 mov r2, #0clear_loop: str r2, [r0], #4 // 先將r2中的值放入r0所指向的內(nèi)存地址(r0中的值作為內(nèi)存地址), cmp r0, r1 // 然后r0 = r0 + 4 bne clear_loopbeq:
“beq run_on_dram” 如果 r0 - r1 = 0 ,程序跳轉(zhuǎn)到run_on_dram處,再向下執(zhí)行,此時CPSR的Z標(biāo)識位為1,我們可以理解為:cmp的結(jié)果為0,或者CPSR的Z標(biāo)識位為1時,程序跳轉(zhuǎn)到beq 后的標(biāo)簽處;
bne:
“bne clear_loop” 如果 r0 - r1 != 0 ,程序跳轉(zhuǎn)到clear_loop處,再向下執(zhí)行,此時CPSR的Z標(biāo)識位為0,我們可以理解為:cmp的結(jié)果為1,或者CPSR的Z標(biāo)識位為0時,程序跳轉(zhuǎn)到bne 后的標(biāo)簽處;
對于CPSR寄存器的條件位的 N Z C V,可以參考:關(guān)于標(biāo)識位影響
新聞熱點
疑難解答
圖片精選