Практически ваш код #define DATA_IN P8IN
unsigned short ReadExtMem(void)
{ unsigned short result;
result= DATA_IN;
result<<=8;
result+=DATA_IN;
return result;
}
void main(void)
{ unsigned short in_word;
for(;;)
in_word = ReadExtMem();
}
компилируется вот так
NAME test
RSEG CSTACK:DATA:SORT:NOROOT(0)
EXTERN ?longjmp_r4
EXTERN ?longjmp_r5
EXTERN ?setjmp_r4
EXTERN ?setjmp_r5
PUBWEAK ?setjmp_save_r4
PUBWEAK ?setjmp_save_r5
PUBLIC ReadExtMem
PUBWEAK _A_P7IN
PUBLIC main
ASEGN DATA16_AN:DATA:NOROOT,038H
// union <unnamed> _A_P7IN
_A_P7IN:
DS8 2
RSEG CODE:CODE:REORDER:NOROOT(1)
ReadExtMem:
MOV.B &0x39, R12
SWPB R12
MOV.B &0x39, R15
ADD.W R15, R12
RET
REQUIRE _A_P7IN
RSEG CODE:CODE:REORDER:NOROOT(1)
main:
??main_0:
CALL #ReadExtMem
JMP ??main_0
RSEG CODE:CODE:REORDER:NOROOT(1)
?setjmp_save_r4:
REQUIRE ?setjmp_r4
REQUIRE ?longjmp_r4
RSEG CODE:CODE:REORDER:NOROOT(1)
?setjmp_save_r5:
REQUIRE ?setjmp_r5
REQUIRE ?longjmp_r5
END
Как вы можете заметить подпрограмма чтения ReadExtMem в пять команд уместилась. Запись в in_word в теле main компилятор выбросил вполне справедливо. Ее значение нигде не используется, а потому в данном примере нафиг не нужно.