【ARM汇编数组】如何对键入的数据做判断?(下)
大家好,我是汤姆凯特。
文章目录
- 【ARM汇编数组】如何对键入的数据做判断?(下)
-
- 写在前面:
- 如何对键入的数据做判断?
- 第一步、用循环把数据键入数组
-
-
- 循环框架
- 存入一个数后向后取地址
- 初始化用到的寄存器
-
- 第二步、用循环对数组中的数据进行判断
-
-
- 循环框架、定义新循环接口
- 全部寄存器重新初始化
- 向后取址且每次做判断并累加
- 输出累加计数和
-
- 第三步、定义全局变量
-
-
- 在键入数组之前需要先有一个提示语句
- 定义键入数组时的格式串格式
- 定义输出语句时的格式串格式
- 给出自定义长度的空数组
-
- 源代码
- 运行结果
- 总结
每篇前言
☀️作者简介:大家好我是汤姆凯特,大家可以叫我汤姆
🐋个人主页:IM汤姆凯特的CSDN博客
🎁系列专栏:【ARM嵌入式基础】
🌱每日一句:
如果此刻你走的辛苦,就证明你正在走上坡路。
【ARM汇编数组】如何对键入的数据做判断?(下)
写在前面:
在这篇【如何对键入数据做判断】中提到了想要对键入的数据做判断有两种方式:1.把键入这个动作放到循环中,键入一次做一次判断。2.用循环把键入的数据全部放到数组中,然后再用循环对数组进行判断。
上篇给大家介绍了第一种方式,这里给大家介绍第二种方式。
如何对键入的数据做判断?
如果我们可以把键入的数据存放到数组中,那么就可以对数组中的数据遍历进行一系列操作。之前我们没有学到将数据键入到数组,所以只能实时判断意义不大,我们学了这篇《如何将键入的数据存到数组中?》后再来试着写一下第二种方式。
第一步、用循环把数据键入数组
-
循环框架
-
存入一个数后向后取地址
-
初始化用到的寄存器
mov r4,#0 ldr r5, =ary b testforloop: ldr r0,=fmt1 mov r1,r5 add r5,#4 bl scanf add r4,#1testfor:cmp r4,#5 blt loop
第二步、用循环对数组中的数据进行判断
-
循环框架、定义新循环接口
-
全部寄存器重新初始化
-
向后取址且每次做判断并累加
-
输出累加计数和
mov r4,#0 mov r7,#0 mov r8,#0 mov r9,#0 mov r10,#0 ldr r5, =ary b testfor2loop2: ldr r2,[r5],#4 cmp r2,#0 addgt r7,#1 addgt r9,r2 addlt r8,#1 addlt r10,r2 add r4,#1testfor2: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 testforloop: ldr r0,=fmt1 mov r1,r5 add r5,#4 bl scanf add r4,#1testfor:cmp r4,#5 blt loop mov r4,#0 mov r7,#0 mov r8,#0 mov r9,#0 mov r10,#0 ldr r5, =ary b testfor2loop2: ldr r2,[r5],#4 cmp r2,#0 addgt r7,#1 addgt r9,r2 addlt r8,#1 addlt r10,r2 add r4,#1testfor2: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
运行结果
总结
- 汇编语言的实现的多个功能可以模块化使用
- 在模块化使用完之后,全部寄存器的值一定要初始化
- 汇编操作不是那么直观,一定要多动手实践,在试错中得到正确结论
本期就结束了,如果对您有帮助,点赞+评论支持一下博主再走吧 还没有关注汤姆的朋友,点个关注每天学一点汇编