微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在汇编中编写一个子例程,将绝对值大于正值 X

如何解决在汇编中编写一个子例程,将绝对值大于正值 X

我必须在汇编中编写一个子例程,将绝对值大于正值 X 的序列元素替换为 0,返回修改元素的数量,但我不知道如何开始。有人可以帮忙吗?

所以我实际上开发了一个代码,我们有一个输入来测试它是否工作正常。输入是 {7,-8,-23,56,20,-10,40},因为输出应该是修改了 3 个元素,但是当我运行它时,我的输出说只有 2 个被修改了当我读取结果向量时,我得到 {7,0},这意味着实际上修改了 3 个。

  • 输入:{7,40}
  • 输出{7,0},count=2(实际)
  • 输出(期望):{unkNown,X not specified},count=3

这是我开发的汇编代码

CheckABS:
        MOV W4,#0
        CBZ W1,FIM


Ciclo:  LDR W3,[X2],4
        CMP W3,W0 //bigger than superior limit?
        B.GT NOK
        CMN W3,W0 //lower than inferior limit?
        B.LT NOK
        B OK

NOK:
        STR XZR,[X2,-4]
        ADD W4,W4,1
OK:
        SUBS W1,W1,1
        B.NE Ciclo

FIM:    MOV W0,W4
        ret

解决方法

您的数据显然是一个 32 位字数组 (int),但 STR XZR,[X2,-4] 是 64 位存储,因为您使用的是 64 位寄存器 XZR。因此,它不仅会覆盖您想用 0 替换的 32 位字,还会覆盖下一个。我想你更想要STR WZR,-4]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。