2014-10-30 193 views
0

間接尋址的工作,我有這樣的代碼:如何在彙編語言摩托羅拉68K

loop2 
     move.b (a4)+,d3  * moving the morse code array input to d3 
     muls #5,d3 
     add.b $d3(a6),d3 * moving the character in morse code array to d4 
     move.b d3,d4 
     cmp.b #dot,d4 

在這裏,我訪問開始a4數組。我正在獲取數組中的一個元素,並將其與5相乘以移至具有所需元素的內存位置。

a6代表包含某個字符的數組的起點。

聲明$d3(a6),d3工作人員,但代碼得到錯誤 因爲我知道代碼d3(a6),d3應該是正確的,但它顯示我一個錯誤。我應該怎麼做?

回答

0

發生了什麼事是自$是用於指定十六進制常數,d3在技術上是有效的十六進制常數,它使用a6 + 0xd3的內存地址。你要完成使用不同的語法,即寄存器括號:(a6,d3)

所以,正確的說法是:

add.b (a6,d3),d3 
+0

抱歉,我剛編輯的問題如前面它傳達了別的東西。 – 2014-10-30 14:28:13

+0

更新了我的答案。 – 2014-10-30 14:32:28

+0

a6的地址是10CC 和d3是32(十進制值2) 所以muls#5,d5應該是FA 並且10CC + FA應該是11C6並且我需要d4中的11C6的內容,但這並不是我所得到的在d4 – 2014-10-30 14:49:04

0

add.b (a6,d3),d3你應該申報用於D3的大小地址生成:或者是(a6,d3.w)(a6,d3.l),這取決於你需要什麼。在一般情況下,乘法之後,你有完整的32位結果,應該使用d3.l。只有當你確定乘法的結果符合16位時,纔可以使用d3.w
如果編寫代碼專門爲68020+(020030040060),也考慮使用經縮放尋址模式等(a6,d3.w*n),其中n是1之一,2,4,8,