/* * max — больший из двух int16_t. * __sdcccall(1): a в HL, b в DE; возврат в DE. * * FIXME: сравнение через `cp` беззнаковое — для отрицательных * аргументов результат неверный. Унаследовано из minmax.c до сплита; * см. docs/libc-roadmap.md. */ #include int16_t max(int16_t a, int16_t b) __naked { (void)a; (void)b; __asm ld a, h cp d jr c, max_less jr nz, max_greater ld a, l cp e jr c, max_less ret /* здесь h==d, l>=e — вернуть DE (при равенстве b==a) */ max_less: /* a < b, вернуть b в DE */ ret /* DE уже содержит b */ max_greater: /* a > b, вернуть a */ ex de, hl ret __endasm; }