我正在努力学习装备。这是我试图运行的第一个程序。我遇到的问题是arr正在加载和instisd它加载1,2右,但然后它加载12作为c。然后当我添加它时,它会加上字母+数字并给出错误的答案。谢谢你的帮助。
org $10000
clr.l d0 ; i = 0, we use the .l since i takes part in .l calculation
clr.l d3 ; sum = 0 (temporarily sum lives in d3)
move.w n, d1 ; d1 = n
loop cmp.w d1, d0
bge endloop ; if (i >= n) goto endloop
movea.l #arr, a0 ; a0 = &arr[0]
adda.l d0, a0
adda.l d0, a0 ; a0 = &arr[0] + 2 x i
add.w (a0), d3 ; d3 = d3 + arr[i]
addq.w #1, d0 ; i = i + 1
bra loop ; repeat loop
endloop
move.w d3, sum ; write the sum into memory
org $11000
arr dc.w 1, 2, 12, 4, 21
n dc.w 5
sum dc.w 0
P.S我确实认为小数12是十六进制C我真的需要知道如何使用十进制数而不是十六进制
答案 0 :(得分:1)
我在easy68k中测试了你的程序,它运行正常。
在使用汇编语言处理数字时,请记住处理器只能理解二进制算术。汇编程序软件处理十六进制以方便程序员,但最终二元算法是唯一重要的。
话虽如此,easy68k将以十六进制而不是二进制或十进制显示值,因为十六进制是紧凑的,但每当你在内存单元格中看到一个值时,你必须放弃它的第一眼并解释它。
例如:在您的情况下,在D3中有一个无符号整数,以十六进制显示。它是C,它是十进制12的十六进制值(记住:9 => 9,10 => A,11 => B,12 => C,13 => D,14 => E, 15 => F)
在其他情况下,你可能会处理2个补充的数字,这将是完全不同的。
浮点数,是另一种野兽。
相同的价值观,不同的含义。我们如何选择正确的解释?
嗯,这取决于具体情况:根据您将要编写的程序,您将知道如何解释数据。
顺便说一下,我必须稍微编辑你的代码,这是我的:
org $400
arr: dc.w 1, 2, 12, 4, 21
n: dc.w 5
sum: dc.w 0
org $1800
START:
clr.l d0 ; i = 0, we use the .l since i takes part in .l calculation
clr.l d3 ; sum = 0 (temporarily sum lives in d3)
move.w n, d1 ; d1 = n
loop: cmp.w d1, d0
bge endloop ; if (i >= n) goto endloop
movea.l #arr, a0 ; a0 = &arr[0]
adda.l d0, a0
adda.l d0, a0 ; a0 = &arr[0] + 2 x i
add.w (a0), d3 ; d3 = d3 + arr[i]
addq.w #1, d0 ; i = i + 1
bra loop ; repeat loop
endloop: move.w d3, sum ; write the sum into memory
END START
Pastebin link:http://pastebin.com/Ae0CgFrt
史努比