На данный момент уже могут компилироваться многие программы работающие с 8 битной арифметикой. Имеются некоторые недоделки в плане условий (if). Для примера приведу код вычисления crc8:
А вот что мы получаем на выходе (входные данные передаются через HL - указатель на массив, A - длина массива):Код:unsigned char test(unsigned char *a, unsigned char size) { unsigned char crc = 0xFF; unsigned char i; while (size--) { crc ^= *a++; for (i = 0; i < 8; i++) crc = crc & 0x80 ? (crc<<1) ^ 0x31 : crc<<1; } return crc; }
Конечно не всё идеально, но crc8 вычисляется правильно. Если у кого-то есть свои примеры и интересно во что они скомпилируются, кидайте, покажу. Но замечу еще раз, что пока работа полностью реализована только для 8 битной арифметики, т.е. int пока в вычислениях использовать не получится. В ближайшее время займусь как раз реализацией 16 битной арифметики. Пока из нового все.Код:; BB#0: ; %entry ld b, a ld c, -1 jp .BB0_3 .BB0_2: ; %while.cond.loopexit ; in Loop: Header=BB0_3 Depth=1 inc hl .BB0_3: ; %while.cond.loopexit ; =>This Loop Header: Depth=1 ; Child Loop BB0_5 Depth 2 ld a, b cp 0 jp z, .BB0_1 ; BB#4: ; %while.body ; in Loop: Header=BB0_3 Depth=1 ld a, (hl) xor c ld e, a ld d, 0 dec b .BB0_5: ; %for.body ; Parent Loop BB0_3 Depth=1 ; => This Inner Loop Header: Depth=2 ld a, e and -128 ld hx, a sla e ld a, e xor 49 ld c, a ld a, hx cp 0 jp nz, .BB0_7 ; BB#6: ; %for.body ; in Loop: Header=BB0_5 Depth=2 ld c, e .BB0_7: ; %for.body ; in Loop: Header=BB0_5 Depth=2 inc d ld a, d cp 8 ld e, c jp z, .BB0_2 jp .BB0_5 .BB0_1: ; %while.end ld a, c ret![]()




Ответить с цитированием