Sorting 编写一个汇编代码,对堆栈内存中的以下数字进行排序:2、34、3、12、8

Sorting 编写一个汇编代码,对堆栈内存中的以下数字进行排序:2、34、3、12、8,sorting,assembly,atmega,atmel,Sorting,Assembly,Atmega,Atmel,编辑:起初,我以为我在使用x86,但我不是。我不知道我使用的是什么版本的程序集(如果这就是它的实际名称的话)。只是当我打开atmel时,我的教授让我们选择ATMega328p 这是我目前正在努力解决的一个问题。我是一个非计算机专业的学生,在汇编编程方面毫无希望,我只想完成这学期剩下的课程。我使用的是ATMega328p。我在互联网()和()上找到了一些排序算法,但我不知道如何利用它们来完成这项工作。任何关于如何修改的建议/如果这些建议适用于我的情况,我们将不胜感激 作为参考,作业的第一部分要求我

编辑:起初,我以为我在使用x86,但我不是。我不知道我使用的是什么版本的程序集(如果这就是它的实际名称的话)。只是当我打开atmel时,我的教授让我们选择ATMega328p

这是我目前正在努力解决的一个问题。我是一个非计算机专业的学生,在汇编编程方面毫无希望,我只想完成这学期剩下的课程。我使用的是ATMega328p。我在互联网()和()上找到了一些排序算法,但我不知道如何利用它们来完成这项工作。任何关于如何修改的建议/如果这些建议适用于我的情况,我们将不胜感激

作为参考,作业的第一部分要求我使用堆栈反转存储在内存中的100元素数组。我为此编写的代码是:

ldi r16, low(RAMEND)
out spl, r16
ldi r16, high(RAMEND)
out sph, r16

ldi r17, 0
ldi zl, low(0x0100)
ldi zh, high(0x0100)
lpm

ldi r17, 100
ldi xl, low(0x0150)
ldi xh, high(0x0150)
lpm

loop:
cpi r17, 100
brge reverse
push r17
st z+, r17
inc r17
jmp loop

reverse:
cpi r17, 1
brlt done
pop r18
st z+, r18
dec r17
jmp reverse

done:
ret
在那个例子中,我们没有得到任何特定的值,所以使用了一个循环。我假设这个问题的解决方案是这样开始的:

ldi r16, low(RAMEND)
out spl, r16
ldi r16, high(RAMEND)
out sph, r16

ldi r16, 2
sts 0x0100, r16
ldi r16, 32
sts 0x0101, r16
ldi r16, 3
sts 0x0102, r16
ldi r16, 12
sts 0x0103, r16
ldi r16, 8
sts 0x0104, r16

但之后,一旦我必须访问RAM并开始对值进行排序/比较,我就会丢失

它使用AVR组件指令集。看见 您可以在第37章中找到ATmega328p的具体说明。(尚无法将此添加为注释…)


您应该做的是推送堆栈上的第一个元素,然后减少堆栈指针(似乎是推送操作的一部分,对于pop也是如此)。继续,直到数组中的所有内容都在堆栈上。然后通过从堆栈中提取数据(此处增加stackpointer)来反转此操作,并继续操作,直到堆栈为空。如果这样做了,数组应该反转。

那不是x86;atmega不生产任何x86芯片。语法也绝对不是x86。彼得,你知道它是什么吗?我的一个同龄人告诉我,我猜他们是误传了。