嵌入式考试程序题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7、将内存中从 0x30000FFF 开始的 100 个字数据相加,其结果存于 R3、R2 中。 答:
LDR R0,=0X30000FFF MOV R2,#0 LDR R4,=0X3000118F LOOP LDR R1,[R0],#4 ADDS R2,R2,R1 ADC R3,R3,#0 CMP R0,R4 BNE LOOP
嵌入式考试程序题
一、 指令和程序测试题
1、写一条 ARM 指令,完成操作 r1 = r2 * 4
答:
MOV R1,R2,LSL #2
2、初始值 R2=5,R3=4,R4=3,执行指令 SUBS R2, R3,R4,LSR #2 后,寄
存器 R2,R3 的值分别是多少?
答:
SUBS R2, R3,R4,LSR #2 中 SUB 为减法指令、LSR 为右移指令符,LSR #2
9、R0 和 R1 中有两个 32 位无符号数,若 R0>R1,则 R0=R0-R1;若 R0<R1,则 R1=R1 -R0;若 R0=R1,则 R1、R0 保持不变。 答:
CMP R0,R1 SUBHS R0,R0,R1 SUBCC R1,R1,R0
答:
START LDR R0=0X30000000 LDR R1=0X10000000 MOV R4,#0 LKM LDRB R2,[R0],#1 STRB R2,[R1],#1 ADD R4,R4,#1 CMP R4,#200 BLNE LKM END 6、编写一简单 ARM 汇编程序段,实现 1+2+…+1000 的累加运算。 答: MOV R0,#0 MOV R1,#0 LKM ADD R0,R0,#1 ADD R1,R1,R0 CMP R0,#1000 BLNE LKM
8、编写一程序,查找存储器从 0x30000000 开始的 100 个字中为 0 的数目,将其结果存到 0x30000012 中。
答: LDR R0,=0X30000000 MOV R1,#0 MOV R2,#0 LDR R3,=0X30000012 LDR R4,=0X30000190
LOOP LDR R5,[R0],#4 CMP R5,R1 ADDEQ R2,R2,#1 CMP R0,R4 BNE LOOP STR R2,[R3]
程序段: MOV r0, #15 MOV r1, #9
start ;补充代码
stop B stop END
答: 补写程序如下:
CMP r0,r1 SUBLT r1,r1,r0 SUBGT r0,r0,r1 BNE start
5、将存储器中 0x30000000 开始的 200 字节的数据,传送到地址从 0x10000000 开始的某接口电路的存储区域。
stop
B stop
arithfunc
CMP r0, #num
MOVHS pc, lr
ADR r3, JumpTable
LDR pc, [r3,r0,LSL#2]
JumpTable
DCD (.WORD) DoA ;注意:使用 ADS 开发工具用伪指令 DCD
DCD (.WORD) DoS ;
使用 GNU 开发工具用伪指令.WORD
DoA
ADD r0, r1, r2
MOV pc, lr
DoS
SUB r0, r1, r2
MOV pc,lr
END
答:
R0 为 0 执行 DoA,R0 为 1 执行 DoS。
流程图如下:
开始
R0=0?
是
r0=r1-r2
否
r0=r1+r2
结束
运行结果:R0=5。 4、有程序段如下,实现下面流程图,试补充编写 ARM 汇编代码。
为 R4 右移两位相当于 R4 除以 4,所以综上所述:R2=R3-R4/4=4-4/4=4,R3 保持
不变 R3=4。
3、有如下程序段,画出程序流程图,并回答执行程序以后 R0 的值是多少。
num EQU 2
start
MOV r0, #1
百度文库
MOV r1, #6
MOV r2, #3
BL
arithfunc
LDR R0,=0X30000FFF MOV R2,#0 LDR R4,=0X3000118F LOOP LDR R1,[R0],#4 ADDS R2,R2,R1 ADC R3,R3,#0 CMP R0,R4 BNE LOOP
嵌入式考试程序题
一、 指令和程序测试题
1、写一条 ARM 指令,完成操作 r1 = r2 * 4
答:
MOV R1,R2,LSL #2
2、初始值 R2=5,R3=4,R4=3,执行指令 SUBS R2, R3,R4,LSR #2 后,寄
存器 R2,R3 的值分别是多少?
答:
SUBS R2, R3,R4,LSR #2 中 SUB 为减法指令、LSR 为右移指令符,LSR #2
9、R0 和 R1 中有两个 32 位无符号数,若 R0>R1,则 R0=R0-R1;若 R0<R1,则 R1=R1 -R0;若 R0=R1,则 R1、R0 保持不变。 答:
CMP R0,R1 SUBHS R0,R0,R1 SUBCC R1,R1,R0
答:
START LDR R0=0X30000000 LDR R1=0X10000000 MOV R4,#0 LKM LDRB R2,[R0],#1 STRB R2,[R1],#1 ADD R4,R4,#1 CMP R4,#200 BLNE LKM END 6、编写一简单 ARM 汇编程序段,实现 1+2+…+1000 的累加运算。 答: MOV R0,#0 MOV R1,#0 LKM ADD R0,R0,#1 ADD R1,R1,R0 CMP R0,#1000 BLNE LKM
8、编写一程序,查找存储器从 0x30000000 开始的 100 个字中为 0 的数目,将其结果存到 0x30000012 中。
答: LDR R0,=0X30000000 MOV R1,#0 MOV R2,#0 LDR R3,=0X30000012 LDR R4,=0X30000190
LOOP LDR R5,[R0],#4 CMP R5,R1 ADDEQ R2,R2,#1 CMP R0,R4 BNE LOOP STR R2,[R3]
程序段: MOV r0, #15 MOV r1, #9
start ;补充代码
stop B stop END
答: 补写程序如下:
CMP r0,r1 SUBLT r1,r1,r0 SUBGT r0,r0,r1 BNE start
5、将存储器中 0x30000000 开始的 200 字节的数据,传送到地址从 0x10000000 开始的某接口电路的存储区域。
stop
B stop
arithfunc
CMP r0, #num
MOVHS pc, lr
ADR r3, JumpTable
LDR pc, [r3,r0,LSL#2]
JumpTable
DCD (.WORD) DoA ;注意:使用 ADS 开发工具用伪指令 DCD
DCD (.WORD) DoS ;
使用 GNU 开发工具用伪指令.WORD
DoA
ADD r0, r1, r2
MOV pc, lr
DoS
SUB r0, r1, r2
MOV pc,lr
END
答:
R0 为 0 执行 DoA,R0 为 1 执行 DoS。
流程图如下:
开始
R0=0?
是
r0=r1-r2
否
r0=r1+r2
结束
运行结果:R0=5。 4、有程序段如下,实现下面流程图,试补充编写 ARM 汇编代码。
为 R4 右移两位相当于 R4 除以 4,所以综上所述:R2=R3-R4/4=4-4/4=4,R3 保持
不变 R3=4。
3、有如下程序段,画出程序流程图,并回答执行程序以后 R0 的值是多少。
num EQU 2
start
MOV r0, #1
百度文库
MOV r1, #6
MOV r2, #3
BL
arithfunc