gpt4 book ai didi

assembly - 我不断收到并解决我的汇编语言的错误

转载 作者:行者123 更新时间:2023-12-02 00:37:02 25 4
gpt4 key购买 nike

所以我正在为以下内容创建一种汇编语言:

 X = 5
Y = 7
FOR I = 1 TO 9
Y = Y + I
IF T(I) = J(I) + X THEN J(I) = T(I) * 4 - Y
ELSE J(I) = J(I) - T(I)
END_FOR

并不断收到

"Address Error: Instruction at  418 accessing address  44f
Execution halted"

到目前为止我的代码是:

    ORG $400

MOVEA #T,A0
MOVEA #J,A1
MOVE.B #1,D0 //D0 is a counter to hold I
MOVE #5,D1 //X = 5
MOVE #7,D2 //Y = 7
NEXT
ADD D0,D2 //Y = Y + I
MOVE (A0),D3
MOVE (A1),D4
MOVE D4,D5 //D5 is a temp copy of J(I)
MOVE D5,D1
CMP D5,D3 //IF T(I) = J(I) + X
BNE ELSE
SUB D2,D3
MULU #4,D3
MOVE D3,(A1)
BRA END_LOOP
ELSE
SUB D3,D4 //J(I) = J(I) - T(i)
MOVE D4,(A1)
END_LOOP
ADDA #2,A0 //POINT TO NEXT ELEMENT IN T
ADDA #2,A1 //POINT TO NEXT ELEMENT IN J
ADD #1,D0
CMP #9,D0
BNE NEXT
MOVE.B #4,D0
TRAP #15 //; halt simulator

* Variables and Strings
T DC.B 6,2,5,4,9,7,3,1,0
J DC.B 5,7,1,9,2,5,6,6,1

END $400 //; last line of source

我忽略了什么?

最佳答案

如果您更改所有 MOVEADD,它将执行而不会出现任何错误(不确定它是否进行了正确的计算,但这取决于您,因为这是家庭作业) ,SUBCMPMOVE.BADD.BSUB.B >,CMP.B。我假设为 .B,因为您的变量已声明为 DC.B。即使您没有收到错误,您也应该指定大小。 注意需要更改的主要是访问内存的MOVE,原因如下,但它们都应该被指定。

无论如何,错误发生在:MOVE (A1),D4。如果您跟踪并查看寄存器,您将看到之前的类似指令 (MOVE (A0),D3) 将一个字而不是一个字节读入 D3 :D3=00000602。它将 T 中的前两个字节读取到 D3 中。 MOVE (A1),D4 也想读取一个 WORD,这次是从 J 读取。

但是,由于您告诉汇编器DC.B,它会对齐内存,以便您可以以字节而不是字的形式访问数组。由于您的 MOVE 指令等默认为 MOVE.W,您还可以将 DC.B 更改为 DC.W code>,错误就会消失。但不要这样做,只是向您展示错误发生的方式和原因,您应该按照我上面提到的方式指定大小。

另请注意,使用诸如 MULU 之类的指令,如果您只想将单个字节相乘,则应确保寄存器的较高字节被清零,因为它会相乘每个操作数至少有一个字。由于您没有将超过一个字节的任何内容移动到 D3 中,因此较高的字节无论如何都是 0。

另一件事,END $400 通常应该类似于 END START,即:

    ORG $1000
START:
...
END START

编辑:只是想我会指出(如果还不是很明显)您应该修复 A0A1,即。阅读 JustinP 的回答。

关于assembly - 我不断收到并解决我的汇编语言的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com