2010-11-19 94 views
1

我使用Easy68k來製作一個包含while循環的簡單程序。如何更新地址寄存器?

假設寄存器A0指向我的數據,它們是單詞。 爲什麼這不起作用?

MOVE.W (A0) , D3 
MOVE.W (A0)+, (A0) 
MOVE.W (A0) , D3 

如果A0點最初的數量2,之後,4號,結果我想是第一移動後,2被存儲,則增量和第三移動之後,4被存儲。 但是,最後一步沒有效果。

回答

0

我找到了答案,我的指令是不正確的。

基本上,(A0)+會在地址寄存器完成它所屬的任何指令後遞增地址寄存器。

我認爲它會第一個增量,然後分配(這是一個合乎邏輯的錯誤以及)。

因此,所有我需要做的是:

move (A0)+,D3; 

這將在A0的值與D3,然後遞增A0周圍的下一次。

0

我絕不是一個68K股癬,但我沒有擡頭的尋址模式,並通過我這一行很困惑:

MOVE.W (A0)+,(A0) 

如果我讀的是正確的,它是複製的內容A0指向A0點的地址,然後將A0增加2,對吧?這只是一個增量A0指令?

或者,它是否取A0的值,將A0增加2,然後將該值寫入新地址?如果是這樣,它似乎將通過拷貝的「2」,在每個循環迭代的連續存儲器位置,這可以解釋爲什麼D3狀態越來越2.

+0

我只是一個初學者,所以那裏有一個非常高的概率我搞砸了一條指令,這就是我在這裏發佈的原因。你將如何做我想達到的目標?也就是說,只需增加地址寄存器,使其指向下一個字。我不確定它在哪兩個選項中完成。你的理論似乎是合理的。 – Blackbinary 2010-11-19 18:03:35

+0

我欣賞的幫助,它讓我在正確的道路上!請參閱下面的答案。 – Blackbinary 2010-11-19 18:09:09

+0

'LEA(A0)+,A0' – 2014-01-02 18:54:55

2

我不知道如果我understod你想要什麼,但如果我對你的secord指令應該是

ADDI.L #2,A0 

LEA (A0)+,A0