2017-09-11 20 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'이 두 숫자를 나타내는 낮은 바이트 높은 바이트를 보유하고 있으며 경우에 낮은 바이트로 출력하고자' 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 

포트 레지스터가 배치된다 할 수 있도록 하나의 포트로 두 개의 포트에 액세스 전자 16 비트 액세스 :

MOV.W R7, PAOUT