iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ARM怎么用汇编判断数组中正负数个数
  • 413
分享到

ARM怎么用汇编判断数组中正负数个数

2023-06-30 07:06:22 413人浏览 独家记忆
摘要

这篇文章主要介绍“ARM怎么用汇编判断数组中正负数个数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ARM怎么用汇编判断数组中正负数个数”文章能帮助大家解决问题。【ARM汇编】如何判断数组中正负数个

这篇文章主要介绍“ARM怎么用汇编判断数组中正负数个数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ARM怎么用汇编判断数组中正负数个数”文章能帮助大家解决问题。

    【ARM汇编】如何判断数组中正负数个数?

    写在前面:

    在很多算法中都必须要用到if语句进行判断,前面我们提到了数组,也练习了用汇编的循环框架遍历数组,但当我们运用数组时,不可能仅仅用于遍历数组并求出数组的和。当我们对数组进行其他的一些操作时,就需要用到判断语句,那汇编中的判断语句是什么呢?

    所有判断后缀

    在x86中我们只能在跳转指令`“B”`后加上判断符,而在ARM中我们可以在任意指令后加上判断标识

    所有的判断后缀,我把常用的给做了标红:

    ARM怎么用汇编判断数组中正负数个数

    来看看今天的问题

    如何用汇编实现判断数组中正负数的个数?

    在汇编语言中程序的基本框架是不变的,我们之前写过循环的框架,这里我们可以直接把正向遍历的程序给贴过来,然后我们思考怎么运用判断后缀把数组中正数和负数分开,进行判断个数和分别求和。

    1.编前准备

    1.1用C的伪代码表示

    先用C语言来实现这个功能,便于明确要实现功能的思路

    C语言代码:

    #include<stdio.h>int main(){    int ary[10] = {0,-1,2,3,4,5,-6,7,8,9};    int sum1=0,sum2=0, i;    int z=0,f=0;    for ( i = 0; i < 10; i++)    {       if(ary[i]>0){       z=z+1;       sum1 =sum1 +ary[i];   }else if(ary[i]<0){f=f+1;sum2 =sum2 +ary[i];   }    }    printf("正数的个数为:%d\n负数的个数为:%d\n",z,f);    printf("正数的和为:%d\n负数的和为:%d\n",sum1,sum2);    return 0; }

    运行结果:

    ARM怎么用汇编判断数组中正负数个数

    1.2参照正向遍历的框架

    学习任何东西最快速的办法是,调取大脑中已有的知识,让新知识跟旧知识进行对比和延伸思考。

    把正向遍历的程序贴过来,发现实现整体功能的框架基本不变,只需要把循环中的这一部分操作改一下即可。把步骤拆开,详细细分为下面几步,我们一起来看一下。

    ARM怎么用汇编判断数组中正负数个数

    2.编写ARM汇编

    2.1先给定一串数组、输出格式

    这里要尝试输出正数的个数、负数的个数以及正数之和、负数之和;数组用ary自定义;通过地址长度计算出要循环的次数

    .data    fmt1:.asciz " The number of positive:%d\n The number of negative:%d\n"    fmt2:.asciz " The positive and:%d\n The negative and:%d\n"    ary:.Word 0,-1,2,3,4,-5,6,7,8,-9    .equ counter,( . - ary)/4

    2.2在循环中加入判断、计数

    这一步就是核心步骤,用汇编写if判断语句。之前给出过所有的指令,其中CMP用来判断。与CMP紧密联系在一块的就是加判断后缀的指令,这个指令可以是跳转(B)可以是(ADD)也可以是(MOV)。

    要实现的功能:把数组中的第一个值取出来,然后与零进行判断,当大于零时,给正数的计数器加一,并且给正数的累加和加上当前数值。判断为负数时则相反。

    ARM汇编实现方法:

        ldr r2,[r5],#4        cmp r2,#0        addgt r7,#1        addgt r9,r2        addlt r8,#1        addlt r10,r2

    如果在x86中只能是CMP比较完用BLT跳转到子程序,执行完再跳转回来,ARM对于判断就方便很多,可以直接加在想要比较后想要执行的语句上。并且只需要一次比较。后面可以跟很多个,比较后想要执行的代码。
     

    2.3在主函数中初始化使用的寄存器

    一般定义寄存器都是在完成核心代码之后,查看核心代码中用到了哪些寄存器,然后给对应的寄存器赋初始值

    这里的寄存器分别表示:

    r7用来存放正数的个数

    r8用来存放负数的个数

    r9用来存放正数之和

    r10用来存放负数之和

    这里用到的R4和R5和之前一样没有变化依旧是:循环变量和数组首地址

     mov r4,#0    mov r7,#0    mov r8,#0    mov r9,#0    mov r10,#0    ldr r5, =ary

    2.4输出累计之和

    1. 想要打印输出肯定是用到printf,那就得先调用输出的格式串,格式串在最开始就已经定义好。

    2. printf是从R1开始输出的所以要把我们需要的值正负数个数、正负数和,传递给R1、R2。

    3. 下面部分由于已经打印出来,所以就可以把R1、R2覆盖,并且当用B跳转一次,R0~R3的值都会变化,最好都要重写。

    ldr r0,=fmt1        mov r1,r7        mov r2,r8        bl printf        ldr r0,=fmt2        mov r1,r9        mov r2,r10        bl printf

    2.5源代码

    .data    fmt1:.asciz " The number of positive:%d\n The number of negative:%d\n"    fmt2:.asciz " The positive and:%d\n The negative and:%d\n"    ary:.word 0,-1,2,3,4,-5,6,7,8,-9    .equ counter,( . - ary)/4.text.globl main main:    stmfd sp!,{lr}    mov r4,#0    mov r7,#0    mov r8,#0    mov r9,#0    mov r10,#0    ldr r5, =ary        b testforloop:           ldr r2,[r5],#4        cmp r2,#0        addgt r7,#1        addgt r9,r2        addlt r8,#1        addlt r10,r2                    add r4,#1testfor:cmp r4,#counter        blt loop        ldr r0,=fmt1        mov r1,r7        mov r2,r8        bl printf        ldr r0,=fmt2        mov r1,r9        mov r2,r10    mov r0, #0    ldmfd sp!,{lr}    mov pc, lr.end

    这里我们值需要判断正负计数即可,因为零既不属于正数也不属于负数

    2.6运行结果

    可以看到结果是正确的!

    ARM怎么用汇编判断数组中正负数个数

    关于“ARM怎么用汇编判断数组中正负数个数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: ARM怎么用汇编判断数组中正负数个数

    本文链接: https://www.lsjlt.com/news/327694.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • ARM怎么用汇编判断数组中正负数个数
      这篇文章主要介绍“ARM怎么用汇编判断数组中正负数个数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ARM怎么用汇编判断数组中正负数个数”文章能帮助大家解决问题。【ARM汇编】如何判断数组中正负数个...
      99+
      2023-06-30
    • ARM汇编判断之如何用汇编判断数组中正负数个数
      目录【ARM汇编】如何判断数组中正负数个数?写在前面:所有判断后缀如何用汇编实现判断数组中正负数的个数?1.编前准备1.1用C的伪代码表示1.2参照正向遍历的框架2.编写ARM汇编2...
      99+
      2022-11-13
    • C语言怎么判断是正数还是负数
      这篇文章主要介绍了C语言怎么判断是正数还是负数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么判断是正数还是负数文章都会有所收获,下面我们一起来看看吧。用户输入一个数字,判断该数字是正数还是负数或是零。...
      99+
      2023-06-17
    • php怎么判断数组的值是个位数
      PHP怎么判断数组的值是个位数在使用PHP进行数组操作时,经常会遇到需要对数组中的值进行判断的情况。其中,判断数组的值是否是个位数就是一种常见的需求,本文将详细介绍如何使用PHP来实现这一功能。一、什么是个位数?在数学中,个位数指的是由0~...
      99+
      2023-05-19
    • php怎么判断一个数组是否包含数组
      步骤:1、定义一个变量并赋值为0,语法“$f=0;”;2、用foreach循环遍历二维数组的外层数组元素,语法“foreach(数组 as $v){...}”;3、循环体中,判断外层元素是否为数组类型,如果是则将“$f”的值设置为1,并跳出...
      99+
      2022-08-08
      php数组 php
    • php怎么判断数组有几个值
      这篇文章主要介绍了php怎么判断数组有几个值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在php中,可以使用count()函数来判断数组有几个值;该函数可以对数组中的元素个...
      99+
      2023-06-15
    • php怎么判断一个数组是否为索引数组
      判断步骤:1、用array_keys()获取原数组的全部键名,语法“array_keys(数组)”;2、用array_filter()过滤数组,语法“function f($v){return(is_string($v));}$res=ar...
      99+
      2022-09-20
    • C语言怎么使用位运算符来判断正负数
      这篇文章主要介绍“C语言怎么使用位运算符来判断正负数”,在日常操作中,相信很多人在C语言怎么使用位运算符来判断正负数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么使用位运算符来判断正负数”的疑惑有所...
      99+
      2023-06-17
    • php怎么判断一个数组有没有值
      本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑方法1:利用empty()函数empty() 函数用于检查一个变量是否为空。一个数组如果没有值,则该数组就是一个空数组。因此,只需要使用empty() 函数判...
      99+
      2022-10-18
    • php怎么判断数组中是否存在某个值
      在PHP编程中,数组是一种非常常见的数据类型,它可以存储多个值,并且这些值可以是不同的数据类型。在实际开发中,我们经常需要对数组进行各种操作,其中包括判断一个值是否在数组中。下面我们就来讨论一下PHP中判断数组中是否存在某个值的方法。in_...
      99+
      2023-05-14
    • JavaScript中怎么判断数组是否包含某个值
      这篇文章主要介绍“JavaScript中怎么判断数组是否包含某个值”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中怎么判断数组是否包含某个值”文章能帮助大家解决问题。方法一:使用...
      99+
      2023-07-06
    • php怎么判断数组中有几个重复的值
      本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php判断数组中有几个重复的值在php中,可利用array_count_values()函数来判断数组中有几个重复的值array_count_values() 函数用于...
      99+
      2016-09-15
      php 数组 重复值
    • 怎么在JavaScript中判断数组中是否有某个值
      这篇文章将为大家详细讲解有关怎么在JavaScript中判断数组中是否有某个值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript可以做什么1.可以使网页具有交互性,例如响应用...
      99+
      2023-06-14
    • php中怎么判断是否为数组
      今天小编给大家分享一下php中怎么判断是否为数组的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php中判断是否为数组的函数是...
      99+
      2023-07-02
    • asp怎么判断数组是否包含某个值
      在ASP中,可以使用`InArray`函数来判断一个数组是否包含某个值。`InArray`函数接受两个参数:要查找的值和要搜索的数组...
      99+
      2023-09-16
      asp
    • php怎么判断数组里是否有多个值
      判断方法:1、用count()函数获取数组长度,语法“$len=count($arr);”;2、利用比较运算符“>”判断数组长度是否大于1,语法“$len>1”,如果长度大于1则数组中有多个值,反之则数组中有1个值或没有值。本教...
      99+
      2022-06-14
      php数组 php
    • php怎么判断数组中是否包含某个元素
      可以使用in_array函数来判断数组中是否包含某个元素。该函数接受两个参数,第一个参数是要判断的元素,第二个参数是待判断的数组。如...
      99+
      2023-08-16
      php
    • Golang 中怎么判断字符串是否在一个数组中
      Golang 中怎么判断字符串是否在一个数组中,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在使用 Python 的时候,如果要判断一个字符串是否在另一个包含字符串的列表中...
      99+
      2023-06-16
    • php中怎么判断一个元素有没有在数组中
      本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php中判断一个元素有没有在数组中方法1:使用in_array()函数in_array() 函数可以查找数组中是否包含某个值,如果存在则返回 TRUE,不存在则返回 F...
      99+
      2018-11-08
      php 数组
    • 怎么用javascript正则表达式判断质数
      这篇文章主要介绍“怎么用javascript正则表达式判断质数”,在日常操作中,相信很多人在怎么用javascript正则表达式判断质数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用javascript...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作