2017-09-11 42 views
1

バイト:MSP430のSWAPは説明アセンブリ

main: MOV  #SFE(CSTACK), SP  ; set up stack 
    ;;; some instructions ....... 
    ; load the starting address of the array1 into the register R4 
    MOV.W #arr1, R4    
    ; load the starting address of the array1 into the register R5 
    MOV.W #arr2, R5 
;  Sum arr1 and display 
     CLR  R7      ; Holds the sum 
     MOV  #8, R10     ; number of elements in arr1 
lnext1: ADD  @R4+, R7    ; get next element 
     DEC  R10 
     JNZ  lnext1 
     MOV.B R7, P1OUT    ; display sum of arr1 
     SWPB R7 
     MOV.B R7, P2OUT 

何この例ではSWPB R7をしているの背後にある理由/意味は?私はドキュメントを読んで、それが低/ハイエンドのバイトを交換することを理解しています。いくつかの文書では、256倍になっています。それが唯一の理由なのでしょうか、ここで何かもっと深刻なことがありますか?コードはレジスタの要素を追加することになっていました。

+0

私はMIPSには書いていないが、 'R7'は、2つの数値を表す低バイト及び高バイトを保持し、場合あなたがする低バイトに出力したいです' P1OUT 'を出力し、上位バイトを 'P2OUT'に出力するには、' MOV.B R7の前に上位バイトを出力するために( 'MOV.B'が下位バイトを移動しているので)' SWPB ' 、P2OUT'コール。 –

答えて

2

MOV.Bは、下位バイトのみにアクセスできます。 他の場所の上位バイトをコピーできるようにするには、最初に下位バイトに移動する必要があります。 (スワップが重要でない副作用である場合、以前の下位バイトが上位バイトにあることを確認してください)

レジスタを8回シフトするなど、上位バイトを取得する効率の悪いメカニズムが他にあります。

MOV.B R7, P1OUT 
    RRA R7 
    RRA R7 
    RRA R7 
    RRA R7 
    RRA R7 
    RRA R7 
    RRA R7 
    RRA R7 
    MOV.B R7, P2OUT 

または一時的な変数に16ビットの値を格納した後、直接その変数の2つのバイトにアクセス:新しいMSP430ファミリーと

MOV.W R7, temp_low  ; writes both bytes 
    MOV.B temp_low, P1OUT 
    MOV.B temp_high, P2OUT 

    .bss 
    .align 2 
temp_low: .space 1 
temp_high: .space 1 

あなたができるように、ポート・レジスタが配置されています1つのポートで2つのポートにアクセスする電子16ビットアクセス:

​​