Пытался скомпилировать простенькую програмку на С для ПИК10, вот её листинг:
Код
#include <htc.h>
#define _XTAL_FREQ 4000000
__CONFIG(WDT_OFF&CP_ON&MCLRE_OFF);
void main(void){
__delay_ms(50);
GP1=1;
TRIS=0b1101;
while(GP0=1){}
__delay_ms(4000);
GP1=0;
__delay_ms(300);
GP1=1;
}
#define _XTAL_FREQ 4000000
__CONFIG(WDT_OFF&CP_ON&MCLRE_OFF);
void main(void){
__delay_ms(50);
GP1=1;
TRIS=0b1101;
while(GP0=1){}
__delay_ms(4000);
GP1=0;
__delay_ms(300);
GP1=1;
}
После компиляции просмотрел дизассембилованый листинг и не понял зачем копилятор проверку while(GP0=1){} заменил на 8 строчек кода:
Код
11 A13 GOTO 0x13
12 A13 GOTO 0x13
13 506 BSF 0x6, 0
14 606 BTFSC 0x6, 0
15 A17 GOTO 0x17
16 A18 GOTO 0x18
17 A13 GOTO 0x13
18 A19 GOTO 0x19
Хотя по моему пониманию можно было обойтись двумя12 A13 GOTO 0x13
13 506 BSF 0x6, 0
14 606 BTFSC 0x6, 0
15 A17 GOTO 0x17
16 A18 GOTO 0x18
17 A13 GOTO 0x13
18 A19 GOTO 0x19
Код
11 606 BTFSC 0x6, 0
12 A11 GOTO 0x11
И зачем он в коде делает операцию BSF 0x6, 0 ?12 A11 GOTO 0x11
И заодно можно ли в MPLAB'е удобно вытянуть дизассемблированый листинг (не так как я привёл выше, а чисто ассемблер без обозначений номера
строки и кода)? Чтоб мои предположения быстренько на асме проверить.
Заранее спасибо за комментарии и ответы.