我想知道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]。
冒泡排序算法的工作原理是重复交换顺序错误的相邻元素,直到整个数组按升序排序。在外部循环的每次迭代中,数组未排序部分的长度递减,在内部循环的每次迭代中,比较相邻元素并在必要时交换。此过程将继续,直到整个数组排序完毕。
这里的时态很重要:“结果数组 * 将 * 为...”
1条答案
按热度按时间tyg4sfes1#
我对“ARM汇编代码”一无所知,但我学到了一些关于ChatGPT的知识,其中大部分来自堆栈溢出和Artificial Intelligence SE
首先,Stack Overflow禁止发布生成的文本内容,特别是答案,因为错误答案的比例很高。
第二,虽然“使用”ChatGPT就像在聊天应用程序中输入一样简单,但响应的质量取决于几个因素,其中之一是 * 对话 *。2023年3月1日,ChatGPT API发布,因此我们知道ChatGPT响应取决于由三个角色的提示组成的 * 对话 , 系统 *,用户 * --在本例中为您--和 * 助理 *,之前的ChatGPT在对话中响应,但在本例中似乎没有任何响应。
为了充分利用ChatGPT
1.准备好您将使用ChatGPT谈论的内容,在这种情况下,您应该尽可能多地了解
ARM assemply code
。参考文献