Это баг, фича или ни то, ни другое? :) Увидев в листинге (верхняя часть), что компилер не вычисляет константы на этапе компиляции + 8 - 1 + 3 == + 10 я было начал писать баг-репорт фуджицу (это их компилер), но потом подумал, что в его поведении (+ 7 - ext_net + 3) есть смысл - а вдруг если вычитать ext_net после + 3, то произйдет переполнение p_lastbyte?
Переделал исходник (верхняя часть) - я знаю, что переполнения не может быть - компилер сгенерил код, который я и ожидал.
p_lastbyte = (INT8U *)pdata + sizeof (*pdata) - 1 - ext_net + 3;
MOVW A, RW2
MOVN A, #7
ADDW A ; + sizeof (*pdata) - 1; sizeof (*pdata) == 8
MOV A, @RW3+-49
SUBW A ; - ext_net
MOVN A, #3
ADDW A ; + 3
MOVW @RW3+-2, A
p_lastbyte = (INT8U *)pdata + sizeof (*pdata) - 1 + 3 - ext_net;
MOVW A, RW2 ; load pdata
MOVN A, #10 ; + sizeof (*pdata) - 1 + 3
ADDW A ; sizeof (*pdata) == 8
MOV A, @RW3+-49 ; - ext_net
SUBW A ;
MOVW @RW3+-2, A