keil組合語言學習關於ben和beq的區別

2021-10-05 16:50:46 字數 1336 閱讀 4610

1.編寫程式迴圈對r4r11進行累加8次賦值,r4r11起始值為1~8, 每次加操作後把r4r11的內容放入sp棧中,sp初始設定為0x800。最後把r4r11用ldmfd指令清空賦值為0。

num equ 20;必須定格寫

area armcodel,code,readonly ;必須空格

export ;必須空格

start

ldr r0,=src ;將r0指向src(起始位址)資料域的首位址,這裡借用src是防止程式長度改變影響位址位置

ldr r1,=dst ;將r1指向dst(目的位址)資料域的首位址,用r2記錄需要搬移資料的次數20次

mov sp,#0x400 ;設定sp指標的位址,結合下文用於儲存r4-r11暫存器內的資料blockcopy

movs r3,r2,lsr#3;將x2的資料右移3位放到r3中並改變cpsr中的標誌位c

beq copywords;簡單的說就是判斷r3是否為零,實質.上是根據cpsr中標誌位z是否為0,為判斷跳轉,為零不跳轉

stmfd sp!, ;儲存r4-r11暫存器內的資料

octcopy

ldmia r0!,;將r0的前8位數取出放到r4-r11,改變r0的位址,(r0的位址增 加)

stmia r1!,;拷貝r4-r11內的資料到r1的位址內,r1的位址增加

subs r3,r3,#1 ;r3的資料減1放到r3,如果為零則改變cpsr中標誌位z,r3為零則z為1r

bne octcopy;z為1則跳轉到octcopy,即r3為零 則跳轉

ldmfd sp!,;釋放r4-r11內的資料

copywords

ands r2,r2,#7;將r2的資料跟數字7相與放到r2

beq stop;跳到停止,跳轉的原因與上面相同

wordcopyr

ldr r3,[r0],#4;取一位資料,載入r0內的32位資料到x3

str r3,[r1],#4;拷貝-位資料,載入r3內的32位資料到r1

subs r2,r2,#1:r2內的資料減1

bne wordcopy;跳轉到wordcopy,跳轉原因同上

stop

b stop

area armcodel,code,readonly

src dcd 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4

dst dcd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

end

ben指令跟beq指令同為跳轉指令,都是對於cpsr的標誌位z的判斷,判斷z是否為零,但是乙個為滿足條件跳轉,另乙個是不滿足條件跳轉

組合語言學習

參考書籍 組合語言 王爽 著 清華大學出版社 選單導航 一 彙編基礎知識 二 暫存器和常見彙編指令演示 一 基礎知識 1 彙編指令是機器指令的助記符,同機器指令一一對應 2 每一種cpu都有自己的彙編指令集 3 cpu可以直接使用的資訊在儲存器中存放 4 在儲存器中指令和資料沒有任何區別,都是二進位...

組合語言學習

持續更新 彙編指令 1.mov指令 mov是乙個傳送指令,可以實現以下操作 有一點需要注意,資料不能直接傳給段暫存器,比如mov ds,100h就是錯誤的。但是可以將其他暫存器中的值賦給段暫存器。段暫存器有cs,ds,ss,es等。如果你想知道為什麼,那就可以去了解一下關於每條指令的硬體實現。後面還...

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...