大家好,我是汤姆凯特。
文章目录
☀️作者简介:大家好我是汤姆凯特,大家可以叫我汤姆
🐋个人主页:IM汤姆凯特的CSDN博客
🎁系列专栏:【ARM嵌入式基础】
🌱每日一句:
如果此刻你走的辛苦,就证明你正在走上坡路。
【ARM汇编数组】如何对键入的数据做判断?(下)
写在前面:
在这篇【如何对键入数据做判断】中提到了想要对键入的数据做判断有两种方式:1.把键入这个动作放到循环中,键入一次做一次判断。2.用循环把键入的数据全部放到数组中,然后再用循环对数组进行判断。
上篇给大家介绍了第一种方式,这里给大家介绍第二种方式。
如何对键入的数据做判断?
如果我们可以把键入的数据存放到数组中,那么就可以对数组中的数据遍历进行一系列操作。之前我们没有学到将数据键入到数组,所以只能实时判断意义不大,我们学了这篇《如何将键入的数据存到数组中?》后再来试着写一下第二种方式。
第一步、用循环把数据键入数组
mov r4,#0
ldr r5, =ary
b testfor
loop:
ldr r0,=fmt1
mov r1,r5
add r5,#4
bl scanf
add r4,#1
testfor:cmp r4,#5
blt loop
第二步、用循环对数组中的数据进行判断
mov r4,#0
mov r7,#0
mov r8,#0
mov r9,#0
mov r10,#0
ldr r5, =ary
b testfor2
loop2:
ldr r2,[r5],#4
cmp r2,#0
addgt r7,#1
addgt r9,r2
addlt r8,#1
addlt r10,r2
add r4,#1
testfor2:cmp r4,#5
blt loop2
ldr r0,=fmt2
mov r1,r7
mov r2,r8
bl printf
ldr r0,=fmt3
mov r1,r9
mov r2,r10
bl printf
第三步、定义全局变量
通过前面两步,将用到的格式串和全局变量初始化定义 |
.data
fmt0:.asciz "Type five numbers into the array\n"
fmt1:.asciz "%d"
fmt2:.asciz " The number of positive:%d\n The number of negative:%d\n"
fmt3:.asciz " The positive and:%d\n The negative and:%d\n"
ary:.word 0,0,0,0,0
源代码
.data
fmt0:.asciz "Type five numbers into the array\n"
fmt1:.asciz "%d"
fmt2:.asciz " The number of positive:%d\n The number of negative:%d\n"
fmt3:.asciz " The positive and:%d\n The negative and:%d\n"
ary:.word 0,0,0,0,0
.text
.globl main
main:
stmfd sp!,{lr}
mov r4,#0
ldr r5, =ary
ldr r0,=fmt0
bl printf
b testfor
loop:
ldr r0,=fmt1
mov r1,r5
add r5,#4
bl scanf
add r4,#1
testfor:cmp r4,#5
blt loop
mov r4,#0
mov r7,#0
mov r8,#0
mov r9,#0
mov r10,#0
ldr r5, =ary
b testfor2
loop2:
ldr r2,[r5],#4
cmp r2,#0
addgt r7,#1
addgt r9,r2
addlt r8,#1
addlt r10,r2
add r4,#1
testfor2:cmp r4,#5
blt loop2
ldr r0,=fmt2
mov r1,r7
mov r2,r8
bl printf
ldr r0,=fmt3
mov r1,r9
mov r2,r10
bl printf
mov r0, #0
ldmfd sp!,{lr}
mov pc, lr
.end
运行结果
总结
- 汇编语言的实现的多个功能可以模块化使用
- 在模块化使用完之后,全部寄存器的值一定要初始化
- 汇编操作不是那么直观,一定要多动手实践,在试错中得到正确结论