Аlex писал(а):Ну а то, что получается через указатель, так это не так уж и страшно - на пару тактов дольше получится запись в порт.
Пара тактов...

Language tool versions: mpasmwin.exe v5.37, mplink.exe v4.37, mcc18.exe v3.36, mplib.exe v4.37
Полная оптимизация без Dead-code removal...
Код: Выделить всё
60: LCD->RS = 0 ; //
00DE D811 RCALL __pa_0
00E0 98EF BCF INDF0, 0x4, ACCESS
61: LCD->data = kod>>4 ; // передача старшего полубайта.
00E2 0100 MOVLB 0
00E4 396C SWAPF kod, W, BANKED
00E6 0B0F ANDLW 0xf
00E8 6E02 MOVWF __tmp_0, ACCESS
00EA D80B RCALL __pa_0
00EC 50E8 MOVF WREG, W, ACCESS
00EE D80E RCALL __pa_1
010C 0B0F ANDLW 0xf
010E 6EF3 MOVWF PRODL, ACCESS
0110 0EF0 MOVLW 0xf0
0112 14EF ANDWF INDF0, W, ACCESS
0114 10F3 IORWF PRODL, W, ACCESS
0116 6EEF MOVWF INDF0, ACCESS
62: LCD->E = 1 ; //
Код: Выделить всё
130 0102 C06A __pa_0 MOVFF LCD, FSR0
131 0104 FFE9 NOP
132 0106 C06B MOVFF 0x6b, FSR0H
133 0108 FFEA NOP
134 010A 0012 RETURN 0
135 010C 0B0F __pa_1 ANDLW 0xf
136 010E 6EF3 MOVWF PRODL, ACCESS
137 0110 0EF0 MOVLW 0xf0
138 0112 14EF ANDWF INDF0, W, ACCESS
139 0114 10F3 IORWF PRODL, W, ACCESS
140 0116 6EEF MOVWF INDF0, ACCESS
141 0118 DFF4 RCALL __pa_0
142 011A 8CEF BSF INDF0, 0x6, ACCESS
143 011C DFF2 RCALL __pa_0
144 011E 9CEF BCF INDF0, 0x6, ACCESS
145 0120 0012 RETURN 0
146 0122 6EEF __pa_2 MOVWF INDF0, ACCESS
147 0124 DFEE RCALL __pa_0
148 0126 0EF0 MOVLW 0xf0
149 0128 14EF ANDWF INDF0, W, ACCESS
150 012A 0012 RETURN 0
При полной оптимизации с Dead-code removal вся эта хрень просто сносится компилятором вчистую...
При отключенной оптимизации...
Код: Выделить всё
60: LCD->RS = 0 ; //
0076 C06A MOVFF LCD, FSR0
0078 FFE9 NOP
007A C06B MOVFF 0x6b, FSR0H
007C FFEA NOP
007E 98EF BCF INDF0, 0x4, ACCESS
61: LCD->data = kod>>4 ; // передача старшего полубайта.
0080 0100 MOVLB 0
0082 396C SWAPF kod, W, BANKED
0084 0B0F ANDLW 0xf
0086 6E02 MOVWF __tmp_0, ACCESS
0088 C06A MOVFF LCD, FSR0
008A FFE9 NOP
008C C06B MOVFF 0x6b, FSR0H
008E FFEA NOP
0090 5002 MOVF __tmp_0, W, ACCESS
0092 0B0F ANDLW 0xf
0094 6EF3 MOVWF PRODL, ACCESS
0096 0EF0 MOVLW 0xf0
0098 14EF ANDWF INDF0, W, ACCESS
009A 10F3 IORWF PRODL, W, ACCESS
009C 6EEF MOVWF INDF0, ACCESS