- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验-1 ARM汇编编程-寄存器访问实验目的:
实验要求:
2. 使用LDR/STR指令完成存储器的访问
实验代码与分析:
COUNT EQU 0; 定义一个变量,地址为0
AREA Example2,CODE,READONLY ; 声明代码段Example2
ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令
START LDR R1,=COUNT ; R1 = COUNT
MOV R0,#0 ; R0 = 0
STR R0,[R1] ; [R1] = R0,即设置COUNT为0
LOOP LDR R1,=COUNT
LDR R0,[R1] ; R0 = [R1]
ADD R0,R0,#1 ; R0 = R0 + 1
STR R0,[R1] ; [R1] = R0,即保存COUNT
B LOOP
END
实验1-2ARM汇编编程-算术运算实验目的:
实验要求:
实验代码与分析:
X EQU 11 ; 定义X的值为11
Y EQU 8 ; 定义Y的值为8
BIT23 EQU (123) ; 定义BIT23的值为0
AREA Example2,CODE,READONLY ; 声明代码段Example2
ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令
START ; 使用MOV、ADD指令实现:R8 = R3 = X + Y
MOV R0,#X ; R0 = X,X的值必须是8位图数据
MOV R1,#Y ; R1 = Y,Y的值必须是8位图数据
ADD R3,R0,R1 ; 即是R3 = X + Y
MOV R8,R3 ; R8 = R3
; 使用MVN、SUB指令实现:R5 = 0x5FFFFFF8 - R8 * 8
MVN R0,#0xA0000007 ; 0xA0000007的反码为0x5FFFFFF8
SUB R5,R0,R8,LSL #3 ; R8左移3位,结果即是 R8 * 8
; 使用CMP指令判断(5*Y/2)(2*X)吗?若大于则R5 = R50xFFFF0000,否则R5 = R5|0x000000FF
MOV R0,#Y
ADD R0,R0,R0,LSL #2 ; 计算R0 = Y + 4*Y = 5*Y
MOV R0,R0,LSR #1 ; 计算R0 = 5*Y/2
MOV R1,#X
MOV R1,R1,LSL #1 ; 计算R1 = 2*X
CMP R0,R1 ; 比较R0和R1,即(5*Y/2)和(2*X)进行比较
LDRHI R2,=0xFFFF0000 ; 若(5*Y/2)(2*X),则R2 = 0xFFFF0000
ANDHI R5,R5,R2 ; 若(5*Y/2)(2*X),则R5 = R5R2
ORRLS R5,R5,#0x000000FF ; 若(5*Y/2)≤(2*X),则R5 = R5|0x000000FF
; 使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令)
TST R5,#BIT23
BICNE R5,R5,#0
B START
END
实验1-3ARM汇编编程-寻址方式实验目的:
实验要求:
立即数寻址
寄存器寻址
寄存器间接寻址
基址变址寻址
多寄存器寻址
实验代码与分析:
AREA TEST,CODE,READONLY
ENTRY
CODE32
;立即数寻址
MOV R0,#0x1 ;立即数0x1存入寄存器R0
ADD R0,R0,#0x4 ;寄存器R0中的内容加上立即数0x4 然后存入寄存器R0
;寄存器寻址
MOV R1,#0x2 ;立即数0x2存入寄存器R1
ADD R2,R1,R0 ;寄存器R0中的内容和寄存器R1的内容相加存入寄存器R2
ADD R2,R2,R0,LSL #1 ;寄存器R0中的内容逻辑左移1位加上寄存器R2的内容在存入寄存器R2
;寄存器间接寻址
MOV R1,#0x10 ;将立即数0x
文档评论(0)