ARM彙編解決階乘以及大小寫轉換

~逍遙子~發表於2021-11-13

環境以及硬體

一、硬體模擬基於 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碼錶

image

說明

1、程式均為原創,不一定為最好的解法,歡迎留言或者私信交流;

2、需要開發環境或者其他資料的也歡迎留言或者私信;

3、若有侵犯個人或團體的權益請及時聯絡我;

4、本文為原創,轉載或引用請註明出處

本文作者:~逍遙子~

本文連線:ARM彙編解決階乘以及大小寫轉換 - 逍遙子 - 部落格園 (cnblogs.com)

版權:本人個人所有

相關文章