1、
前陣子看cpu從sleep模式喚醒時,對tstbne和tst beq有些模糊。先記錄:
摘抄如下:
tstr0, #0x8
bne suspendup ;bne指令是「不相等(或不為0)跳轉指令」:
ldr r1,#0x00000000
先進行and運算,如果r0的第四位不為1,則結果為零,則設定zero=1(繼續下面的ldr指令);
否則,zero=0(跳到suspendup處執行)。
還有:有點模糊,在此記下。
tstr0,#02
bne sleep
ldr r1,#0
解釋:位比較,先進行and運算,如果r0第2位不為1,則與的結果為0,設定標誌位zero=1,繼續下面的ldr指令。反之,zero=0,跳轉到sleep執行。
bne指令: 非零則跳轉
個人總結:tst和bne連用: 先是用tst進行位與運算,然後將位與的結果與0比較,如果不為0,則跳到bne緊跟著的標記(如bne sleep,則跳到sleep處)。
tst和beq連用: 先是用tst進行位與運算,然後將位與的結果與0比較,如果為0,則跳到beq緊跟著的標記(如bne aaaa,則跳到aaaa處)。
2、昨天在看arm彙編,其中有這樣的一段語句 0
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne %b0
bne:不等於則調轉
但%b0 ,網上搜了一遍,還是未果。從最後的彙編語言來看,%b 代表,往前搜尋 lable為0的行,換句話說,就是指本條語句前,lable為0的位址。整條語句的意思就是,如果不相等則跳轉到lable為0的行。
; check if ein0 button is pressed
ldr r0,=gpfcon
ldr r1,=0x0
str r1,[r0]
ldr r0,=gpfup
ldr r1,=0xff
str r1,[r0]
ldr r1,=gpfdat
ldr r0,[r1]
bic r0,r0,#(0x1e<<1) ; bit clear
tstr0,#0x1
bne %f1
(省略一些語句)
;clear sdram end
1;initialize stacks
bl initstacks
%b, %f可以這樣理解: b表示before,向前。f表示after,向後
彙編實驗1 用機器指令和彙編指令程式設計
1.實驗執行環境 win10系統下的dosbox 2.實驗所用偵錯程式為debug 一 基礎指令 此次實驗中所用到的7條debug命令 r,d,e,u t,a 1.r命令 檢視 改變cpu暫存器的內容 檢視暫存器的值 改變cs ip的值 可見cs,ip的值由上面的073f和0100變成了0000 2...
OD 彙編指令 記錄(1)
一.mov eax 0x12 1.mov 目標運算元 源運算元 作用把 源運算元拷貝到目標運算元 mov 語法 1.mov r m8 r8 r 代表通用暫存器 2.mov r m16 r16 m 代表記憶體 3.mov r m32 r32 imm 代表立即數 4.mov r8,r m8 r8代表8位...
常用的arm彙編指令 1
1.blx指令從arm指令集跳轉到指令中所指定的目標位址,並將處理器的工作狀態從arm狀態切換到thumb狀態,該指令同時將pc的當前內容儲存到暫存器r14中。因此,當子程式使用thumb指令集,而呼叫者使用arm指令集時,可以通過blx指令實現子程式的呼叫和處理器工作狀態的切換。同時,子程式的返回...