编辑:最初,我的印象是使用x86,但我没有。我不知道我使用的是什么版本的程序集(如果实际上就是它的名称)。只是当我打开atmel我的教授让我们选择ATMega328p时。
这是我目前正在尝试解决的问题。我是非CS专业的学生,在汇编语言编程方面毫无希望,我只想完成本学期的其余部分。我正在使用ATMega328p。我已经在Internet(http://www.miguelcasillas.com/?p=340)和(https://github.com/oc-cs360/s2014/blob/master/lc3/bubblesort.asm)上找到了一些排序算法,但是我不确定如何利用它们来完成此任务。任何有关修改内容的提示/如果这些更改甚至适用于我的情况,也表示赞赏。
作为参考,作业的第一部分要求我使用堆栈反转存储在内存中的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并开始对值进行排序/比较,我就迷路了。