簡體   English   中英

MSP430微控制器 - 如何檢查尋址模式

[英]MSP430 microcontroller - how to check addressing modes

我正在用C語言編寫MSP430作為真實微控制器的仿真。 我陷入了尋址模式( https://en.wikipedia.org/wiki/TI_MSP430#MSP430_CPU ),特別是:

  • 使用R0(PC)尋址模式
  • 使用R2(SR)和R3(CG)尋址模式,特殊情況解碼

    1. 我不明白0(PC),2(SR)和3(CG)是什么意思。 它們是什么?
    2. 如何檢查這些值?

所以對於源,如果as位是01並且源寄存器位是0,那么就是用於參考的pc

ADDR符號。 相當於x(PC)。 操作數在地址PC + x的內存中。

如果廣告位為1且目標為0,則也是

ADDR符號。 相當於x(PC)。 操作數在地址PC + x的內存中。

x將是該指令之后的另一個字,因此cpu將獲取下一個字,將其添加到pc,這是源

如果as位為11且源為寄存器0,則源為立即值,該值位於指令之后的下一個字中。

如果as位為01且源為2,恰好是SR寄存器以供參考,則地址為x指令后的下一個字(&ADDR)

如果ad位為1且目標寄存器為2,則它也是&ADDR

如果as位為10,則源位為2,則源為常數值4,並且在指令4之后我們不必在flash中刻錄一個字。

將目的地定為常數4是沒有意義的,因此不是真正的組合。

重復表格的其余部分。

您可以同時使用這兩種尋址模式

mov #0x5A80,&0x0120

生成

c000:   b2 40 80 5a     mov #23168, &0x0120 ;#0x5a80
c004:   20 01

是的

0x40b2 0x5a80 0x0120

0100000010110010
0100 opcode mov
0000 source
1 ad
0 b/w
11 as
0010 destination

所以我們有一個11的源,0的源是直接的#x,1的廣告是一個目的地2,所以目的地是&ADDR。 這是一個重要的實驗,因為當你有2個x值時,一個三字的指令基本上與源和目的地一起

0x40b2 0x5a80 0x0120

因此,作為目標的地址0x5a80是跟隨指令的第一個x,然后源0x0120立即到達。

如果它只是一個立即和一個寄存器然后

c006:   31 40 ff 03     mov #1023,  r1  ;#0x03ff

0x4031 0x03FF

0100000000110001
0100 mov
0000 source
0 ad
0 b/w
11 as
0001 dest

從11開始,0的源是#immediate,在這種情況下,X是0x03FF,后面是單詞。 目的地是0的廣告

Register direct. The operand is the contents of Rn 

在這種情況下,目的地是r1

所以第一組Rn,x(Rn),@ Rn和@Rn +是正常情況,低於你所詢問的那些是特殊情況,如果你得到一個適合特殊情況的組合,那么你這樣做你做正常的情況,如上面的mov immediate to r1例子。 r1的目的地是正常的Rn情況。

  • As = 01,Ad = 1,R0( ADDR ):這與x(Rn)完全相同,即操作數在地址R0 + x的存儲器中。

    當編譯器不知道代碼將位於哪個絕對地址時,它用於存儲在使用它的代碼附近的數據,但是它知道數據是例如指令后面的二十個字。

  • As = 11,R0( #x ):這與@ R0 +完全相同,用於需要指令流中的數據字的指令。 例如,這個匯編指令:

     MOV #1234, R5 

    實際編碼和實現為:

     MOV @PC+, R5 .dw 1234 

    CPU讀取MOV指令字后,PC指向數據字。 讀取第一個MOV操作數時,CPU讀取數據字,然后再次遞增PC。

  • As = 01,Ad = 1,R2( &ADDR ):這與x(Rn)完全相同,但R2寄存器讀為零,所以最終得到的是x的值。

    使用始終為零的寄存器允許對絕對地址進行編碼,而無需為此設置特殊的尋址模式(只需一個特殊的寄存器)。

  • 常量-1/0/1/2/4/8:在大多數尋址模式下使用SR和CG寄存器是沒有意義的,因此這些編碼用於生成特殊值而無需單獨的數據字,以節省空間:

     encoding: what actually happens: MOV @SR, R5 MOV #4, R5 MOV @SR+, R5 MOV #8, R5 MOV CG, R5 MOV #0, R5 MOV x(CG), R5 MOV #1, R5 (no word for x) MOV @CG, R5 MOV #2, R5 MOV @CG+, R5 MOV #-1, R5 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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