2011-07-04 3 views
3

MOVFF 0x10, 0x15을 기계어로 변환하려고합니다. 마이크로 컨트롤러는 마이크로 칩 PIC 18F1220입니다. 참조 설명서는 말한다 :기계 코드 조립 명령

MOVFF fs,fd 

인코딩 :
1 단어 : 1100 ffff ffff ffffs
2 단어 :

1100 0000 0010 0000 
1111 0000 0010 0101 

하지만지고있어 해결책이

입니다 : 1111 ffff ffff ffffd

해결 방법은

0x10 = 0001 0000 
0x15 = 0001 0101 
1100 0000 0001 0000 
1111 0000 0001 0101 

정답을 얻는 방법을 설명해 주시겠습니까?

고맙습니다.

답변

2

모든 것이 정상입니다.

movff은 2 워드 명령어 (각 워드는 16 비트 길이)입니다.

movff 명령어는 b'1100 '비트로 시작하고 0x10 경우 소스 바이트 주소 12 비트를 따르십시오. 그 명령어가 b'1111 '로 시작하는'destination instruction word '를 따르고 0x15의 경우 대상 바이트 주소에 대한 12 비트를 따르십시오.

(지점)을 '대상 명령'으로 점프하면 nop을 수행해야합니다.

이렇게하면 PIC18에서 4096 바이트의 RAM을 처리 할 수 ​​있습니다 (전체 RAM을 의미).

편집 : 는 PIC18F1220에 대한 간단한 테스트 케이스 출력 파일을 추가 :

--- C:\WORK\TEST\Test.asm ---------------------------------------------- 
                1:  org 0 
                2:  fs equ 0x10 
                3:  fd equ 0x15 
    000 C010  MOVFF 0x10, 0x15    4:  movff fs, fd 
    002 F015  NOP 
    004 C010  MOVFF 0x10, 0x15    5:  movff 0x10, 0x15 
    006 F015  NOP 
+0

내가 NOP에 대한 부분을 이해하지 않습니다. –

+0

NOP는 작동하지 않으며 MCPU 명령 사이클을 1 회 수행합니다. 따라서 프리스트 명령이 수행되지 않으면 b'1111 '로 시작하는 다음 명령은 아무 것도하지 않습니다. –

+0

하지만 두 단어의 세 번째 열이 0001 대신 0010 인 이유를 모르겠습니까? – user