用汇编编写一个子程序,将绝对值大于正值 X 的序列元素替换为 0

Writing a sub routine in assembly that replaces with 0 the elements of a sequence with absolute value bigger than a positive value X

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

所以我实际上开发了一个代码,我们有一个输入来测试它是否运行良好。输入是 {7, -8, -23, 56, 20, -10, 0, 40},因为输出应该是修改了 3 个元素,但是当我 运行 它时,我的输出只说即使当我读取结果向量时,2 也被修改了,我得到 {7, -8, 0, 0, 20, -10, 0, 0},这意味着 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, [X2, -4].