assembly 这个ChatGPT“swap”代码段有什么作用吗?

i7uq4tfw  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(136)

我想知道ChatGPT能在多大程度上生成汇编语言,所以我给了它以下提示:

Write an optimized ARM assembly code that bubble sorts an array.

我不会包括完整的输出,因为它是相当无聊和标准,但我会提供下面的片段。省略号表示我已经削减线。所有的意见是我的

.data
array: .word 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
arrayLength = 10
...

outer_loop:
    ...

inner_loop:
    add r3, r0, r2                @@r0=0 and r2=0 on first iteration
    ldr r4, [array, r3, lsl #2]
    add r3, r3, #4
    ldr r5, [array, r3, lsl #2]

    cmp r4, r5                    @@N not set, so bgt branches on first iter
    bgt swap
    ...

swap:
    str r5, [array, r3, lsl #2]
    subs r3, r3, #4
    str r4, [array, r3, lsl #2]
    b inner_loop

...

我目前正在尝试进入MCU领域,并且一直在使用。这很容易理解,但是如果我们只关注第一次迭代,我们似乎是将9加载到r4中,将8加载到r5中,然后将这些数字放回数组中我们从中检索它们的相同位置。最后,您可以通过以下顺序看到发生了什么:

  • array + r3指向数组中的第一个值。
  • R4保持值9。
  • R3递增4。
  • array + r3指向数组中的第二个值。
  • R5保持值8。
  • 分支到交换块
  • 我们将r5中的值(其为8)存储在位置数组+ r3个点(其为第二数组槽)中。
  • R3递减4。
  • array + r3指向数组中的第一个值。
  • 我们将值r4(其为9)存储在位置数组+ r3个点中,其为第一槽。

所以我的问题是:我是不是误解了操作码?如果是这样,为什么我的直觉在我期望执行的序列上失败了?机器人是不是错了?另外,如果我们的地址为负,swap块中的subs可能会设置一个标志,但是ChatGPT对此事实没有任何作用。那么简单的sub会更好吗?
我也有一个关于逻辑左移的问题。我一开始认为这是由于字节序,但意识到这并不能完全解释它。为什么数组存储在这样一个奇怪的偏移量?我想我错过了这类事情是正常的上下文,但我还没有遇到过这种情况。
ChatGPT坚持这样对数组进行排序,但总是使用冒泡排序的上下文。我不知道它是否实际上是在对我提供给它的实际输入数据运行代码,或者它只是在进行排序,然后告诉我它使用了冒泡排序。例如,我给了它以下提示
假设你有一个数组[10,5,4,1]存储在内存中,并使用上面的代码对这个数组进行排序,运行程序后,得到的数组是什么?
并收到以下解释
在数组[10,5,4,1]上运行上述ARM汇编代码后,得到的排序数组将是[1,4,5,10]。
冒泡排序算法的工作原理是重复交换顺序错误的相邻元素,直到整个数组按升序排序。在外部循环的每次迭代中,数组未排序部分的长度递减,在内部循环的每次迭代中,比较相邻元素并在必要时交换。此过程将继续,直到整个数组排序完毕。
这里的时态很重要:“结果数组 * 将 * 为...”

tyg4sfes

tyg4sfes1#

我对“ARM汇编代码”一无所知,但我学到了一些关于ChatGPT的知识,其中大部分来自堆栈溢出和Artificial Intelligence SE
首先,Stack Overflow禁止发布生成的文本内容,特别是答案,因为错误答案的比例很高。
第二,虽然“使用”ChatGPT就像在聊天应用程序中输入一样简单,但响应的质量取决于几个因素,其中之一是 * 对话 *。2023年3月1日,ChatGPT API发布,因此我们知道ChatGPT响应取决于由三个角色的提示组成的 * 对话 系统 *,用户 * --在本例中为--和 * 助理 *,之前的ChatGPT在对话中响应,但在本例中似乎没有任何响应。
为了充分利用ChatGPT
1.准备好您将使用ChatGPT谈论的内容,在这种情况下,您应该尽可能多地了解ARM assemply code

  • 准备好 * 快速工程 *
  • 这是关键,以了解您应该如何进行与ChatGPT的交互。
  • 如今,“我们”知道,期望从一个简单的语句(如您使用的语句)中获得可实现的代码是不现实的。
  • 准备使用ChatGPT
  • 如果你还没有完成,请参考OpenAI blog article about ChatGPTChatGPT Updates and FAQChatGPT release notes。小心你从社交媒体,非官方的API和应用程序学到的关于ChatGPT的知识。
  • 验证从ChatGPT收到的响应
  • ChatGPT使用复杂的算法来构建响应,以将 * 令牌 * 放在一起,但它无法自行评估响应。
  • 请注意ChatGPT可能会产生幻觉。请参阅Hallucination
  • 考虑您可能编辑输入并重新生成中间响应。
  • 如果你的回答不满意,你就不必从头开始整个对话了。
  • 考虑一下,您可能会要求ChatGPT对前面的 * prompt * 做一些事情,比如更改变量名、更改参数的顺序等等。

参考文献

相关问题