0

我正在尝试学习汇编语言。这是我尝试运行的第一个程序。我遇到的问题是 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

PS我明白十进制12是十六进制C我真的需要知道如何使用十进制而不是十六进制

4

1 回答 1

1

我用easy68k测试了你的程序,它工作正常。

在用汇编语言处理数字时,请记住处理器只理解二进制算术。为了程序员的方便,汇编软件处理十六进制,但最终二进制算术是唯一重要的。

话虽如此,easy68k 将以十六进制而不是二进制或十进制显示值,因为十六进制是紧凑的,但是每当您在存储单元中看到一个值时,您必须放弃它的第一次查找并解释它。

例如:在您的情况下,在 D3 中有一个无符号整数,以十六进制显示。它是 C,它是十进制 12 的十六进制值(记住:9=>9、10=>A、11=>B、12=>C、13=>D、14=>E、15=>F)。

在其他情况下,您可能正在处理 2-complemented 数字,这将是完全不同的。

或者浮点数,另一种野兽。

相同的价值观,不同的意义。我们如何选择正确的解释?

好吧,这取决于上下文:取决于您将编写的程序,您将知道如何解释数据。

顺便说一句,我不得不稍微编辑你的代码,这是我的:

    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 链接:http://pastebin.com/Ae0CgFrt

希望能帮助到你,

史努比

于 2014-01-06T09:36:40.773 回答