[英]how does indirect addressing work in assembly language motorola 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應該是正確的,但顯示出錯誤。 我該怎么辦?
這是因為$
是用於指定十六進制常量,而d3
從技術上講是一個有效的十六進制常量,它使用a6 + 0xd3
作為內存地址。 您要完成的操作使用了不同的語法,即兩個寄存器都在括號中: (a6,d3)
因此正確的陳述是:
add.b (a6,d3),d3
在add.b (a6,d3),d3
您可能應該聲明用於地址生成的d3的大小: (a6,d3.w)
或(a6,d3.l)
,具體取決於您的需求。 通常,在乘法之后,您具有完整的32位結果,應使用d3.l
僅當確定乘法結果適合16位時,才可以使用d3.w
如果您專門為68020+(020,030,040,060)編寫代碼,還可以考慮使用諸如(a6,d3.w*n)
類的縮放尋址模式,其中n是1、2、4、8之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.