Блин. Есть у меня проблема с постепенным расширением ТЗ.
В общем эта программа
Код:
void print(uchar x, uchar y, uchar* text) {
uchar* d;
d = (uchar*)(0xA000 + ((ushort)x) + ((ushort)y) * 78); // Автопреобразования пока нет.
while(*text) { *d = *text; d++; text++; }
}
void main() {
print(5, 5, "HELLO");
print(5, 7, "WORLD");
}
на выходе
print_text dw 0 ; Переменные разных функций будут занимать одну память.
print_d dw 0
print_x db 0
print_y db 0
print:
ld de, 78
ld hl, (print_y)
ld h, 0
call mul_ushort
ex de, hl
ld hl, (print_x)
ld h, 0
add hl, de
ld de, 40960
add hl, de
ld (print_d), hl
l0:
ld hl, (print_text)
ld a, (hl)
or a
jp z, l1
ld hl, (print_d)
ld (hl), a
inc hl
ld (print_d), hl
ld hl, (print_text)
inc hl
ld (print_text), hl
jp l0
l1:
ret
main:
ld a, 5
ld (print_x), a
ld (print_y), a
ld hl, text1 ; "HELLO"
ld (print_text), hl
call print
ld a, 5
ld (print_x), a
ld a, 7
ld (print_y), a
ld hl, text2 ; "WORLD"
ld (print_text), hl
call print
ret
---------- Post added at 17:58 ---------- Previous post was at 17:56 ----------
Регистровая пара BC не используется. Её можно будет использовать для хранения какого то значения.
---------- Post added at 18:00 ---------- Previous post was at 17:58 ----------
А вот такая конструкция
Код:
while(*text) *d++ = *text++;
раскрывается в
l0:
ld hl, (print_text)
ld a, (hl)
or a
jp z, l1
ld hl, (print_d)
ld (tmp3), hl
inc hl
ld (print_d), hl
ld hl, (print_text)
ld (tmp4), hl
inc hl
ld (print_text), hl
ld hl, (tmp4)
ld a, (hl)
ld hl, (tmp3)
ld (hl), a
jp l0
l1: