|
Например! Вот это
Device 16f73
dim a,b
a=a*b
компилируется так:
;--------------------------------
;-- L.E.T PIC BASIC PRO V7.00 --
;--------------------------------
LIST P=16F73 , w=2, x=on, r=DEC
#include "P16F73.inc"
#include "14bit.inc"
_A Equ 41
_B Equ 42
;A=A*B
Mov@fw _A
Mov@wf 33
Mov@fw _B
Mov@wf 32
Clrw
Addwf@W 33
Decfsz@F 32
Goto $-2
Mov@wf _A
@Fin Clrwdt
Sleep
F@Goto @Fin
END
T.е. Умножение на число выполняется соответствующим количеством сложений (Так в первом классе средней школы считают). (Транслирует он в свои макрокоманды, но по мнемоника их близка к родным пиковским командам и полностью понятна)
Ну а теперь ВНИМАНИЕ НА ЭКРАН.
Вот это:
Device 16f73
dim a,b
a=a*(b+1)
КОМПИЛИРУЕТСЯ ТАК!!!
;--------------------------------
;-- L.E.T PIC BASIC PRO V7.00 --
;--------------------------------
LIST P=16F73 , w=2, x=on, r=DEC
#include "P16F73.inc"
#include "14bit.inc"
_A Equ 41
_B Equ 42
;A=A*(B+1) *
Mov@fw _A
Mov@wf _A
@Fin Clrwdt
Sleep
F@Goto @Fin
END
T.е. a=a*(b+1) компилируется как a=a. Ну допустим, не понимает он скобки. Но хотя-бы отругаться можно, что такое использование скобок недопустимо.
Ну и в заключении:
Device 16f73
dim a,b
a=(b+1)
компилируется так:
;--------------------------------
;-- L.E.T PIC BASIC PRO V7.00 --
;--------------------------------
LIST P=16F73 , w=2, x=on, r=DEC
#include "P16F73.inc"
#include "14bit.inc"
_A Equ 41
_B Equ 42
;A=(B+1) *
Mov@wf _A
@Fin Clrwdt
Sleep
F@Goto @Fin
END
Т.е. берется значение аккумулятора (совершенно случайное в этот момент) и заносится в переменную a.
Ну у любого компилятора могут быть ограничения. Если PIC basic не может корректно работать со скобками, то НУЖНО СООБЩАТЬ ОБ ОШИБКЕ КОМПИЛЯЦИИ.
E-mail: info@telesys.ru