簡體   English   中英

間接尋址如何在匯編語言中使用Motorola 68k

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM