что делают эти инструкции - PullRequest
       48

что делают эти инструкции

2 голосов
/ 15 сентября 2009

Я работаю на симуляторе для набора команд msp430. ассемблер GNU позволит вам кодировать инструкции, подобные этим:

fc0a: 12 10 00 02 rrc &0x0200       
fc0e: 22 11       rra #4        
fc10: 23 52       add #4,#2

Я предполагаю, что rrc & 0x0200 будет извлекать данные с адреса 0x0200, выполнить поворот, а затем записать ответ обратно на адрес 0x0200, правильно? Но что будет делать RRA # 4? Я полагаю, что источником будет непосредственный источник, но есть ли пункт назначения после операции? Добавление # 4, # 2 собрано в то, что вы ожидаете (как 2b10, source = r2, ad = 1b0, dest = r3), дизассемблер binutils, хотя и не знал, что делать с этой инструкцией.

Это действительные инструкции?

Ответы [ 3 ]

5 голосов
/ 16 сентября 2009

Несмотря на то, что не существует какой-либо определенной онлайн-ссылки на этот эффект, я склонен согласиться с ФП в том, что две показанные инструкции (и несколько других) , вероятно, недействительны , даже если они соответствовать формату, указанному в паспорте.

Другими словами, не все возможные комбинации различных частей, составляющих командное слово, являются действительными. В частности, многие инструкции с одним операндом, которые используют режим немедленной адресации, и многие инструкции с двумя операндами, которые имеют режим немедленной адресации для адресата, вероятно, не являются семантически жизнеспособными.

В документации есть только несколько советов по этому поводу, например, в Руководстве пользователя, раздел 3.3.7 (о режиме немедленной адресации), комментарий указывает « Действителен только для операнда-источника."(И, кстати, это относится ко всем случаям режима немедленной адресации, а не только к сокращенным случаям, разрешенным приемом константной генерации R2 или R3.)

Тот факт, что дизассемблер не знает, что делать с такими кодами, также является другим намеком (хотя ... некоторые дизассемблеры легко отключаются ...).

Ради документации я собрал несколько полезных ссылок для MSP430:

2 голосов
/ 06 августа 2011

В текущем руководстве пользователя в разделе 3.4.4.2 рекомендуется не использовать непосредственный режим (#N) в поле назначения для команды RRA, поскольку это приводит к «непредсказуемой работе программы».

1 голос
/ 18 сентября 2009

Возможно, они есть. Глядя на набор команд в Википедии, коды операций кодируют регистр и различные опции. Так что это не простое отображение. Похоже, что у вас есть выход с прямым порядком байтов, так что это:

fc0a: 12 10 00 02 rrc &0x0200  

соответствует инструкции 1012, которая в двоичном виде является 0001 0000 0001 0010.

Это разбивается следующим образом:

6 bits: 0001 00 - fixed; defines the instruction family
3 bits: 00 0    - instruction (RRC)
1 bit : 0       - byte or word parameter (0 = 16 bit parameter; 1 = 8 bit)
2 bits: 01      - addressing mode (01 = indexed;)
4 bits: 0010    - register

Таким образом, в этом случае происходит поворот вправо на значение смещения в регистре 2 от адреса & 0200.

Вам нужно будет разбить остальные инструкции аналогичным образом, чтобы полностью понять. Для инструкции ADD регистры / адреса источника и назначения кодируются в 5223 инструкция.

...