環境以及硬件
一、硬件仿真基於 SAMSUNG's S3C44B0X 16/32-bit RISC microprocessor 芯片,仿真器為 J-LINK
二、編寫指令軟件為 Integrated Development Environment ,軟件仿真為 ARMulate.dll
三、需要基於ARM7硬件平台的C語言啟動代碼,用於分配中斷向量表,初始化ISR地址,初始化堆棧空間,初始化應用程序執行環境,配置存儲器系統,設定時鍾周期,呼叫主應用程序。
四、這里僅有關鍵算法代碼
ARM匯編求一個數的階乘
題目:R1寄存器內數據的階乘運算,結果存放在R0
mov r1,#6 ;將立即數 6 送至 R1,即為‘6’的階乘,可以更改
mov r0,r1 ;將 R1 的值給R0
loop ;定義一個循環體標簽
subs r1,r1,#1 ;將 R1-R1 的給R1
mul r0,r0,r1 ;將 R0*R1 的值給R0
cmp r1,#1 ;將 R1 與 1 做比較
BNE loop ;上面的值不相等則跳轉至 loop
ARM匯編大小寫轉換以及存入內存
題目:將內存地址0XC100000開始處的字符串"Welcome to CSUST!"中對應的小寫字母轉換成大寫,大寫變換成小寫。
說明:此算法存在局限性,只能轉換不包含ASSIC碼值大於‘127’和在‘91~96’之間的字符串
STRING_WELCOME
DCB "Welcome to CSUST!\n\0" ;聲明一個字符串
STRING
LDR r0,=STRING_WELCOME ;取得字符串的首地址
mov r1,#0x0c100000 ;將#0x0c100000給 R1,目的為將R1指向目標地址
STRING2
LDRB r2,[r0] ;取出一個字符給 R2
cmp r2,#97 ;將 R2 與 97(即‘a’) 作比較
BGE BIGWORD ;大於或等於 97 則跳轉至 BIGWORD 子程序
cmp r2,#65 ;將 R2 與 65(即‘A’) 作比較
BGE SMALLWORD ;大於或等於 65 則跳轉至 SMALLWORD 子程序
B MYLOOP ;跳轉至MYLOOP,存字符
BIGWORD ;大寫轉小寫子程序
sub r2,r2,#32 ;大寫字母的assci碼-32 即可轉換為小寫
B MYLOOP ;跳轉至 MYLOOP,存字符
SMALLWORD ;小寫轉大寫子程序
add r2,r2,#32 ;小寫字母的assci碼+32 即可轉換為大寫
MYLOOP ;存字符子程序
STRB r2,[r1] ;存入R1指定的內容
add r0,r0,#1 ;R0=R0+1
add r1,r1,#1 ;R1=R1+1
CMP r2,#'\0' ;將R2與‘\0’作比較,目的是判斷是否已經取完了字符串
BNE STRING2 ;上一個比較不相等則跳轉至 STRING2 繼續取字符
ASSIC碼表
說明
1、程序均為原創,不一定為最好的解法,歡迎留言或者私信交流;
2、需要開發環境或者其他資料的也歡迎留言或者私信;
3、若有侵犯個人或團體的權益請及時聯系我;
4、本文為原創,轉載或引用請注明出處
本文作者:~逍遙子~
本文連接:ARM匯編解決階乘以及大小寫轉換 - 逍遙子 - 博客園 (cnblogs.com)
版權:本人個人所有