您好,登錄后才能下訂單哦!
之前看到過一個延時函數段:
delay:
ldr r2, =7000000
ldr r3, =0x0
delay_loop:
sub r2, r2, #1 //r2=r2-1
cmp r2, r3 //cmp會影響z標志位,如果r2=r3,則Z=1;下一句中eq就會成立
bne delay_loop //
mov pc, lr //函數返回 延時函數
現在我們來分析一下這個函數的各個指令。
1、cmp比較指令
假設現在AX寄存器中的數是0004H,BX寄存器中的數是0007H。
執行的指令是:CMP AX, BX
執行這條指令時,先做用AX中的數減去BX中的數的減法運算。各標志位將會被分別設置成以下值:
CF:是否有進位或者借位
ZF:0標志位,就是結果是否為0
OF:溢出標志位,是否計算機結果溢出了
SF:符號位,0為正,1為負
2、bne指令
bne: 標志寄存器中Z標志位不等于零時, 跳轉到BNE后標簽處
beq: 標志寄存器中Z標志位等于零時, 跳轉到BEQ后標簽處
上面函數中,比較了r2和r3,它們相減,如果結果為0,那么Z標志位置位,就不跳轉了,否則就會跳轉,形成循環
3、sub r2,r2,#1
把r2里的數減1,然后放回r2里面。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。