Альтернативные мнемоники PIC

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Альтернативные мнемоники PIC

Post by Lavr »

Сам я изучал мнемоники PIC по даташитам Микрочипа, и признаюсь - у меня они не вызвали восторга...
Во-первых, потому, что f в мнемонике как-то сразу ассоциируется со
словом flag, но выяснилось, что это file - так Микрочип называет регистры.
Узнал я это, работая над Picaro от Tom-а Napier-а...
The PIC16C56 has 32 one-byte RAM registers, which Microchip confusingly calls “files.” (Did someone copyright “register”?)
Во-вторых почему аккумулятор - W, тоже непонятно... может кто-то запатентовал А ? :D

Дальше - больше... просматривая коды Тома заметил я множество
приятных команд типа

CLRC

SKPZ
SKPNZ

понятно сходу, что это CLR C, SKIP Z, SKIP NZ, но в документации
Микрочип таких мнемоник нет !
Я грешным делом стал искать в исходниках #define ...
или подключение *.h - файла, но ничего не было, а проект компильнулся
без ошибок, но Протеус в отладке показывал эти коды в мнемонике
Microchip.
Тогда я в папке Mpasm.exe поискал эти слова, и выяснилось, что
есть они сугубо в теле Mpasm.exe - и больше нигде.
Выходит есть альтернативные мнемоники PIC - более удобные (а
может - устаревшие по мнению Microchip )?

Если кто сталкивался - может подскажет где глянуть ?
А то я зело не люблю - test_byte_and... трали-бали... :lol:
И не ковырять же Mpasm.exe... тем более - что вряд ли внутри есть
хелп по подобным мнемоникам.
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Это тебе в сырцы gputils смотреть надо :)

Кстати у SX-28 система команд идентична PIC16C5X, но команды по другому названы - я лично на ассемблере пиков для него программы писал...
Last edited by Shaos on 08 Jun 2010 04:16, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Pseudo-instructions

Post by Lavr »

Оказывается это называется Pseudo-instructions для Microchip's MPALC assembler. Но Mpasm.exe их вполне поддерживает, как выяснилось из опыта.
Если кому интересно, то можно подробнее глянуть здесь:
http://techref.massmind.org/techref/New ... /mpalc.txt

Code: Select all

       Name            Mnemonic          Equivalent       Status
                                        Operation(s)

Clear Carry            CLRC             BCF        3,0       -

Set Carry              SETC             BSF        3,0       -          

Clear Digit Carry      CLRDC            BCF        3,1       -

Set Digit Carry        SETDC            BSF        3,1       -

Clear Zero             CLRZ             BCF        3,2       -             

Set Zero               SETZ             BSF        3,2       -

Skip on Carry          SKPC             BTFSS      3,0       -

Skip on No Carry       SKPNC            BTFSC      3,0       -

Skip on Digit Carry    SKPDC            BTFSS      3,1       -

Skip on No Digit Carry SKPNDC           BTFSC      3,1       -    

Skip on Zero           SKPZ             BTFSS      3,2       -             

Skip on Non Zero       SKPNZ            BTFSC      3,2       -             

Test File              TSTF f           MOVF       f,1       Z

Move File to W         MOVFW f          MOVF       f,0       Z

Negate File            NEGF f,d         COMF       f,1
                                        INCF       f,d       Z

Add Carry to File      ADDCF f,d        BTFSC      3,0
                                        INCF       f,d       Z

Subtract Carry from
File                   SUBCF f,d        BTFSC      3,0
                                        DECF       f,d       Z

Add Digit Carry to
File                   ADDDCF f,d       BTFSC      3,1
                                        INCF       f,d       Z

Subtract Digit
Carry from File        SUBDCF f,d       BTFSC      3,1
                                        DECF       f,d       Z

Branch                 B k              GOTO       k         -

Branch on Carry        BC k             BTFSC      3,0
                                        GOTO       k         -

Branch on No Carry     BNC k            BTFSS      3,0
                                        GOTO       k         -

Branch on Digit
Carry                  BDC k            BTFSC      3,1
                                        GOTO       k         -

Branch on No Digit
Carry                  BNDC k           BTFSS      3,1
                                        GOTO       k         -

Branch on Zero         BZ k             BTFSC      3,2
                                        GOTO       k         -

Branch on Non Zero     BNZ k            BTFSS      3,2
                                        GOTO       k         -

Call across page
boundary               LCALL k          BCF 3,5 or BSF 3,5
                                        BCF 3,6 or BSF 3,6
                                        CALL     k 
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Причесал табличку, а то она нечитабельная была...

P.S. Вот тут она же приведена, а также объяснено, почему лучше не пользоваться командами, которые превращаются в две инструкции :)

http://www.piclist.com/techref/microchi ... pseudo.htm
By the way, don't bother using the "LCALL" pseudo-op... Since it
doesn't restore the code-page bits after the CALL, it's sorta
useless. Also, be careful with the pseudo-ops that assemble to two
instructions; constructs like the following, for instance, will cause
you great pain and suffering:

; DON'T DO THIS!

BTFSS FLAGS,SWITCH ;If the switch is pressed, skip ahead.
NEGF REG ;Otherwise, negate the REG register.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:объяснено, почему лучше не пользоваться командами, которые превращаются в две инструкции :)
Да в общем-то это в некотором роде макросы. Почему бы не пользоваться макросами, если они удобны?
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:объяснено, почему лучше не пользоваться командами, которые превращаются в две инструкции :)
Да в общем-то это в некотором роде макросы. Почему бы не пользоваться макросами, если они удобны?
Макросы должны явно отличаться от команд - например префиксом. В таком случае у программиста визуально будут разделяться одинарные инструкции и тяжёлые макросы - ошибок станет меньше...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Макросы должны явно отличаться от команд - например префиксом...
Совершенно они никому и ничего не должны. Это, так сказать, пожелание хоршего тона в программировании.

А макросы обычно как раз и называют именем, хорошо отражающим их суть.
iLavr