需要知道如何使用十进制数而不是十六进制数

时间:2013-11-06 14:52:48

标签: assembly motorola 68000

我正在努力学习装备。这是我试图运行的第一个程序。我遇到的问题是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我真的需要知道如何使用十进制数而不是十六进制

1 个答案:

答案 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

希望它有所帮助,

史努比