【问题标题】:Find biggest and smallest values of an array using loops使用循环查找数组的最大值和最小值
【发布时间】:2021-06-17 08:35:40
【问题描述】:

我已经编写了以下代码,一切都应该很好。它假设使用循环查找大小为 4 的数组中的最大值和最小值。

我设置了循环,但除了我的输出之外的所有内容都不正确。我在第 46 行有一个错误,当将数组加载到寄存器 X11 中时,我得到了一个很大的奇怪数字并导致整个计算错误。

请查看您是否可以在此代码中提出修复建议。

//X0 Array, X17 number of runs, X11 Biggest, X12 Smallest

ADR X0,v
LDR X17,=4
LDR X11,[X0],#3
MOV X12,X11
loop:
    **LDR X11,[X0],#3 //Line 46**
    //LSL X11,X0,#3
    CMP X12,X11
    BLT loop1
    SUB X17,X17,#1
    CMP X17,#1
    BEQ exit
    BGT loop
loop1:
    MOV X12,X11
    SUB X17,X17,#1
    CMP X17,#1
    BEQ exit
    BGT loop

我正在使用 DS-5 IDE,以防万一。

【问题讨论】:

  • 什么是v?确保它是 64 位整数而不是 32。
  • 顺便说一句,如果你让计数器等于 3(实际迭代次数)LDR X17,=(4-1),而不是SUB X17,X17,#1; CMP X17,#1; BGT loop,你可以使用SUB X17,X17,#1; CBNZ loop
  • 哦,我明白了,谢谢,会试试!
  • @user3124812: IIRC, cbnz 只能向前跳。但是您可以使用subs x17, x17, #1 / bne loop 在 SUBS 的标志结果上向后跳转。
  • @PeterCordes:cbnz 可以向后或向前跳跃,很长的路。它需要一个符号扩展的 19 位位移。

标签: arrays loops assembly arm64 armv8


【解决方案1】:

LDR X11,[X0],#3

读取 64 位值(Xregister),并按#3 后递增? 我非常怀疑 3Bytes != 64bit。

【讨论】:

  • ??‍♂️, ??‍♂️, ??‍♂️, ??‍♂️, ??‍♂️ 你们俩都是 %100 正确的。我应该使用#8。生活品味谢谢!
猜你喜欢
  • 2018-09-21
  • 2019-09-18
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2019-05-15
  • 2021-09-15
相关资源
最近更新 更多