我使用Easy68k來製作一個包含while循環的簡單程序。如何更新地址寄存器?
假設寄存器A0指向我的數據,它們是單詞。 爲什麼這不起作用?
MOVE.W (A0) , D3
MOVE.W (A0)+, (A0)
MOVE.W (A0) , D3
如果A0點最初的數量2,之後,4號,結果我想是第一移動後,2被存儲,則增量和第三移動之後,4被存儲。 但是,最後一步沒有效果。
我使用Easy68k來製作一個包含while循環的簡單程序。如何更新地址寄存器?
假設寄存器A0指向我的數據,它們是單詞。 爲什麼這不起作用?
MOVE.W (A0) , D3
MOVE.W (A0)+, (A0)
MOVE.W (A0) , D3
如果A0點最初的數量2,之後,4號,結果我想是第一移動後,2被存儲,則增量和第三移動之後,4被存儲。 但是,最後一步沒有效果。
我找到了答案,我的指令是不正確的。
基本上,(A0)+會在地址寄存器完成它所屬的任何指令後遞增地址寄存器。
我認爲它會第一個增量,然後分配(這是一個合乎邏輯的錯誤以及)。
因此,所有我需要做的是:
move (A0)+,D3;
這將在A0的值與D3,然後遞增A0周圍的下一次。
我絕不是一個68K股癬,但我沒有擡頭的尋址模式,並通過我這一行很困惑:
MOVE.W (A0)+,(A0)
如果我讀的是正確的,它是複製的內容A0指向A0點的地址,然後將A0增加2,對吧?這只是一個增量A0指令?
或者,它是否取A0的值,將A0增加2,然後將該值寫入新地址?如果是這樣,它似乎將通過拷貝的「2」,在每個循環迭代的連續存儲器位置,這可以解釋爲什麼D3狀態越來越2.
我不知道如果我understod你想要什麼,但如果我對你的secord指令應該是
ADDI.L #2,A0
或
LEA (A0)+,A0
我只是一個初學者,所以那裏有一個非常高的概率我搞砸了一條指令,這就是我在這裏發佈的原因。你將如何做我想達到的目標?也就是說,只需增加地址寄存器,使其指向下一個字。我不確定它在哪兩個選項中完成。你的理論似乎是合理的。 – Blackbinary 2010-11-19 18:03:35
我欣賞的幫助,它讓我在正確的道路上!請參閱下面的答案。 – Blackbinary 2010-11-19 18:09:09
'LEA(A0)+,A0' – 2014-01-02 18:54:55