用汇编编写一个子程序,将绝对值大于正值 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 实际上被修改了。
- 输入:
{7, -8, -23, 56, 20, -10, 0, 40}
- 输出:
{7, -8, 0, 0, 20, -10, 0, 0}
,计数=2(实际)
- 输出(期望):{未知,X 未指定},计数=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]
.
我要在汇编中写一个子程序,将序列中绝对值大于正值X的元素替换为0,返回修改元素的个数,但我不知道如何开始。有人可以帮忙吗?
所以我实际上开发了一个代码,我们有一个输入来测试它是否运行良好。输入是 {7, -8, -23, 56, 20, -10, 0, 40},因为输出应该是修改了 3 个元素,但是当我 运行 它时,我的输出只说即使当我读取结果向量时,2 也被修改了,我得到 {7, -8, 0, 0, 20, -10, 0, 0},这意味着 3 实际上被修改了。
- 输入:
{7, -8, -23, 56, 20, -10, 0, 40}
- 输出:
{7, -8, 0, 0, 20, -10, 0, 0}
,计数=2(实际) - 输出(期望):{未知,X 未指定},计数=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]
.