ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
14647
Алексей Мусин (17.09.2004 08:47, просмотров: 1465)
Это баг, фича или ни то, ни другое? :) Увидев в листинге (верхняя часть), что компилер не вычисляет константы на этапе компиляции + 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