Инструкция по сборке машинного кода

Я пытаюсь преобразовать MOVFF 0x10, 0x15 в машинный код. Микроконтроллер — Microchip PIC 18F1220. В справочном руководстве сказано:

MOVFF fs,fd

Кодировка:
1-е слово: 1100 ffff ffff ffffs
2-е слово: 1111 ffff ffff ffffd

Решение:

1100 0000 0010 0000
1111 0000 0010 0101

Но решение, которое я получаю, это

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

Не могли бы вы объяснить мне, как получить правильный ответ?

Спасибо


person user    schedule 04.07.2011    source источник


Ответы (1)


Все нормально.

movff — это инструкция из 2 слов (каждое слово имеет длину 16 бит).

Слово инструкции movff начинается с битов b'1100', а затем следуют 12 битов для адреса исходного байта в вашем случае 0x10. После этой инструкции следует «слово инструкции назначения», которое начинается с b «1111», а затем следуют 12 бит для адреса байта назначения в вашем случае 0x15.

Если вы перейдете (перейдете) только к «инструкции назначения», тогда следует выполнить nop.

Таким образом можно адресовать 4096 байт ОЗУ под PIC18 (что означает всю ОЗУ).

EDIT: добавлен простой выходной файл тестового примера для 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
person GJ.    schedule 04.07.2011
comment
Я не понимаю часть о NOP. - person Prof. Falken; 04.07.2011
comment
NOP не является операцией и занимает один командный цикл MCPU. Таким образом, если первая инструкция не выполняется, то следующая инструкция, начинающаяся с b'1111', ничего не сделает. - person GJ.; 04.07.2011
comment
Но я не понимаю, почему в третьем столбце двух слов 0010 вместо 0001? - person user; 04.07.2011
comment
Добавлен простой тестовый выходной файл для PIC18F1220, так что проверьте его. Это должно быть твоей ошибкой! - person GJ.; 05.07.2011