Учись, учись... ассемблеру
Ты говоришь на ассемблере? (часть вторая)
Снова приветствую тех, кому интересно заглянуть в самую глубину.
Сегодня на лекции я постараюсь рассказать о командах, предназначенных для изменения и чтения содержимого ячеек оперативной памяти.
Как мы помним, в предыдущей статье я писал, что у Z80 есть семь восьмибитных регистров (значения от 0 до 255): A, B, C, D, E, H, L. Однако адресная шина — то, что отвечает за доставку значения в нужную ячейку памяти, одну из 65535, — шестнадцатибитная.
Поэтому, чтобы можно было загружать значения в ячейки памяти с помощью регистров, пришлось объединять регистры в пары. Два регистра вместе образуют «один шестнадцатибитный регистр».
Но всё не совсем так. Например, пару HL можно изменить, поменяв только один регистр — H или L.
К сожалению, нельзя произвольно объединять регистры в пары. Существуют три основные пары, с помощью которых можно адресовать память: BC, DE и HL.
Подробнее мы разберём эту тему в одной из ближайших статей.
Пока нам достаточно понимать, как адресуются ячейки памяти. Допустим, мы хотим, чтобы первый байт атрибутов экрана получил цвет с чёрным фоном и зелёным символом (см. «Путеводитель по ZX SPECTRUM», стр. 74). Этого можно добиться разными способами:
LD (HL),A
или
LD (адрес),A
Какой способ лучше, зависит от программы в целом. Следует также заметить, что непосредственная запись в ячейку — с помощью регистров или номера (адреса) — выполняется с использованием скобок.
Если в программе что-либо записано в скобках, это означает запись в ячейку по адресу, содержащемуся в паре регистров или заданному числом. То же относится и к чтению из ячейки:
LD A,(HL)
или
LD A,(адрес)
Чтобы нагляднее показать, о чём идёт речь, напишем программу, которая нарисует полоску заданного цвета в памяти атрибутов.
ORG 40000 ; размещение программы начиная с адреса 40000
LD HL,22528 ; начало полоски
LD B,32 ; длина полоски
LD A,79 ; цвет
PETLA LD (HL),A ; рисование полоски
INC HL ; следующий байт
DJNZ PETLA ; уменьшить B и, если он не равен 0, перейти к PETLA
RET ; возврат
Эта программка, возможно, примитивна, но должна объяснить, в чём смысл изученных команд и связанных с ними возможностей.
По мере знакомства с новыми командами примеры, которые будут появляться в рамках этого цикла, станут всё интереснее.
Если мои рассуждения и наблюдения покажутся слишком сложными, прошу связаться со мной.
SCALMAN
Поделитесь вашим мнением о статье