溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ARM匯編如何解決階乘及大小寫(xiě)轉(zhuǎn)換的問(wèn)題

發(fā)布時(shí)間:2021-11-15 09:14:21 來(lái)源:億速云 閱讀:152 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了ARM匯編如何解決階乘及大小寫(xiě)轉(zhuǎn)換的問(wèn)題,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

環(huán)境以及硬件

一、硬件仿真基于 SAMSUNG's S3C44B0X 16/32-bit RISC microprocessor 芯片,仿真器為 J-LINK

二、編寫(xiě)指令軟件為 Integrated Development Environment ,軟件仿真為 ARMulate.dll

三、需要基于ARM7硬件平臺(tái)的C語(yǔ)言啟動(dòng)代碼,用于分配中斷向量表,初始化ISR地址,初始化堆??臻g,初始化應(yīng)用程序執(zhí)行環(huán)境,配置存儲(chǔ)器系統(tǒng),設(shè)定時(shí)鐘周期,呼叫主應(yīng)用程序。

四、這里僅有關(guān)鍵算法代碼

ARM匯編求一個(gè)數(shù)的階乘

題目:R1寄存器內(nèi)數(shù)據(jù)的階乘運(yùn)算,結(jié)果存放在R0

mov r1,#6          ;將立即數(shù) 6 送至 R1,即為‘6'的階乘,可以更改
 mov r0,r1          ;將 R1 的值給R0
loop              ;定義一個(gè)循環(huán)體標(biāo)簽
 subs r1,r1,#1      ;將 R1-R1 的給R1
 mul r0,r0,r1       ;將 R0*R1 的值給R0
 cmp r1,#1          ;將 R1 與 1 做比較
 BNE loop           ;上面的值不相等則跳轉(zhuǎn)至 loop

ARM匯編大小寫(xiě)轉(zhuǎn)換以及存入內(nèi)存

題目:將內(nèi)存地址0XC100000開(kāi)始處的字符串"Welcome to CSUST!"中對(duì)應(yīng)的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě),大寫(xiě)變換成小寫(xiě)。

說(shuō)明:此算法存在局限性,只能轉(zhuǎn)換不包含ASSIC碼值大于‘127'和在‘91~96'之間的字符串

STRING_WELCOME
	DCB "Welcome to CSUST!\n\0"   ;聲明一個(gè)字符串
	
STRING
	LDR r0,=STRING_WELCOME        ;取得字符串的首地址
	mov r1,#0x0c100000	      ;將#0x0c100000給 R1,目的為將R1指向目標(biāo)地址
STRING2
	LDRB r2,[r0]		      ;取出一個(gè)字符給 R2
	
	cmp r2,#97		      ;將 R2 與 97(即‘a(chǎn)') 作比較
	BGE BIGWORD		      ;大于或等于 97 則跳轉(zhuǎn)至 BIGWORD 子程序
	
	cmp r2,#65		      ;將 R2 與 65(即‘A') 作比較
	BGE SMALLWORD		      ;大于或等于 65 則跳轉(zhuǎn)至 SMALLWORD 子程序
	B MYLOOP		      ;跳轉(zhuǎn)至MYLOOP,存字符
	
BIGWORD				      ;大寫(xiě)轉(zhuǎn)小寫(xiě)子程序
	sub r2,r2,#32		      ;大寫(xiě)字母的assci碼-32 即可轉(zhuǎn)換為小寫(xiě)
	B MYLOOP		      ;跳轉(zhuǎn)至 MYLOOP,存字符
	
SMALLWORD			      ;小寫(xiě)轉(zhuǎn)大寫(xiě)子程序
	add r2,r2,#32		      ;小寫(xiě)字母的assci碼+32 即可轉(zhuǎn)換為大寫(xiě)
	
MYLOOP				      ;存字符子程序
	STRB r2,[r1]		      ;存入R1指定的內(nèi)容
	add r0,r0,#1		      ;R0=R0+1
	add r1,r1,#1		      ;R1=R1+1
	CMP r2,#'\0'		      ;將R2與‘\0'作比較,目的是判斷是否已經(jīng)取完了字符串
	BNE STRING2		      ;上一個(gè)比較不相等則跳轉(zhuǎn)至 STRING2 繼續(xù)取字符

ASSIC碼表

ARM匯編如何解決階乘及大小寫(xiě)轉(zhuǎn)換的問(wèn)題

上述內(nèi)容就是ARM匯編如何解決階乘及大小寫(xiě)轉(zhuǎn)換的問(wèn)題,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

arm
AI