Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[23]

♦ 301: AD 01 10j~

♦304: 6D 03 10j~

♦307: 8D 05 10f"

♦30A: AD 00 10J~

♦30D: 6D 02 10j~

♦310: 8D 04 10J~

♦314: 00 j~

Эту же программу можно было занести в память следующим образом: * 300: 18 AD 01 10 6D 03 10 8D 05 10 AD 00 10 6D 02 10 8D 04 10 00 j~

Перед пуском программы на выполнение необходимо поместить в ячейки 1000 и 1001 соответственно старший и младшие байты первого числа, а в ячейки 1002 и 1003 аналогичным образом поместить второе число. Например, поместим числа ЗА27 и 4ВА1:

•1000: ЗА 27 j~

•1002: 4В Al j~

После чего можно выполнить программу: ♦300 G j~

Результат (число 85С8) будет находиться в ячейках 1004 и 1005: ♦1004.1005 J"

1004 - 85 СЗ

Эта программа, в отличие от первой, универсальна по отношению к данным. Если в первой программе данные зашиты в саму программу и их нельзя поменять, не изменив самой программы, то во второй программе данные располагаются независимо от программы. Их можно изменить перед пуском программы, поменяв содержимое соответствующих ячеек.

Рассмотрим пример составления еще более сложной задачи: заполнить произвольным символом весь экран ВКУ. Алгоритм этой задачи:

1. Поместить в ячейку И 300 код символа, а в ячейку Ц 301 код режима вывода его на экран ВКУ.

• 2. Поместить в ячейку Д 10 младший, а в Д 11 старший байты адреса первого байта выбранной текстовой страницы.


3.Поместить в ячейки Д 9 и # А соответственно младший и старший байты программного переключателя текстовой страницы.

4.Поместить в индексный регистр X число Д 8.

5.Обнулить индексный регистр Y.

6.Переместить код символа из ячейки д 300 в аккумулятор.

7.Занести содержимое аккумулятора по адресу Д 10, используя косвенно-индексную адресацию с регистром Y. Исполнительный адрес ячейки памяти, куда будет помещен код символа, сформируется следующим образом: к содержимому ячейки Д 10 добавляется содержимое индексного регистра Y (это младший байт исполнительного адреса); старший байт выбирается из ячейки Д 11.

8.Увеличить содержимое индексного регистра Y на единицу.

9.Переместить код режима вывода символа из ячейки # 301 в аккумулятор.

10.Занести содержимое аккумулятора по адресу Д 10, используя косвенно-индексную адресацию с регистром Y.

11.Увеличить содержимое индексного регистра Y на единицу.

12.Выполнить переход по ненулевому (Z=0) результату на п. 6.

13.Если после выполнения п. И результат (содержимое регистра Y) стал нулевым, т.е. Z=l, то увеличить содержимое ячейки Д 11 на единицу.

14.Уменьшить содержимое индексного регистра X на единицу. ,

15.Выполнить переход по ненулевому результату на п. 5.

16.Обратиться к программному переключателю, находящемуся в ячейках Д 9 и Д А, используя индексно-косвенную адресацию по X.

17.Конец.

При написании алгоритма была использована косвенно-индексная адресация по Y. Это позволяет изменять исполнительный адрес ячеек памяти, не изменяя самой программы. Например, можно записывать код символа в любую текстовую страницу.

В алгоритме использовано еще одно очень важное понятие - цикл. Цикл - это многократное повторение группы операторов. В приведенном алгоритме необходимо выполнить запись кода символа и кода режима в 2048 ячеек памяти. Используя регистр Y, каждый раз увеличивая его содержимое на единицу, алгоритм осуществляет запись в 256 ячеек. При этом в исполнительном адресе изменяется только младший байт, что и определяет перебор 256 ячеек (0 - FF). Чтобы заполнить все 2048 (0 - 7FF) ячеек, необходимо выполнить восемь таких переборов, каждый раз увеличивая старший байт исполнительного адреса на единицу.

Таким образом, в алгоритме организовано два цикла. Один из них внутренний, другой - внешний. Внутрений цикл изменяет содержимое 256 ячеек в пределах изменения младшего байта исполнительного адреса. Этого недостаточно для засветки всего экрана, поэтому, изменив старший адрес на единицу, следует опять повторить предыдущую процедуру перебора 256 ячеек (сбросив предварительно Y в 0) и т.д. Это и есть внешний цикл, определяющий число повторений внутреннего цикла. Переходы, организующие циклы, построены на операторах перехода по состоянию флажков.

Выбор той или иной команды перехода определяет сам программист.

На рис. 4.10 приведены текст программы на языке ассемблера и в машинных кодах. Программа может быть записана в любые ячейки памяти, лишь бы они не


LDX

#08

30A

: A2

08

:LDX

#00

30C

: AO

00

:LDA

пЗО

ЗОЕ

: AD

00

03

STA

(n10),Y

311

: 91

10

INY

313

: C8

IDA

П301

314

: AD

01

03

STA

(nl1),Y

317

: 91

10

INY

319

: C8

BNE

MET1

31A

: DO

F4

INC

nl 1

31C

: E6

11

DEX

31E

: CA

BNE

MBTO

31F

: DO

EE

LDA

(n9,X)

321

: A1

09

BRK

323

: 00

Рис. 4.10. Текст программы на ассемблере и в машинных кодах

пересекались с памятью выводимой текстовой страницы. Перед пуском программы нужно поместить в ячейки Д 300 и ft 301 код символа и режима вывода, в ячейки Д 10 и ft 11 - начальный адрес выбранной текстовой страницы, в ячейки И 9и Я А - адрес переключателя этой страницы.

Более сложные вопросы программирования в машинных кодах и на языке ассемблера рассмотрены в гл. 6.

Г л а в а 5. БАЗОВОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

5.1. СИСТЕМНЫЙ МОНИТОР

Программа "Системный монитор" управляет работой всей ПЭВМ и одновременно подчиняется ей. Она контролирует все программы, и все программы используют ее.

Вы научились с помощью монитора просматривать одну, две или все ячейки памяти и изменять их содержимое. Теперь познакомимся с тем, как можно писать и выполнять программы не только на машинном языке, но и на языке ассемблера, записывать на магнитные кассеты бесконечные массивы данных и программ и снова их считывать.

Программа "Системный монитор" начинается с адреса FF69f6 (в десятичном

представлении 65385 или -151). Монитор на языке БЕЙСИК может быть вызван командой:

CALL-151 или CALL 65385.

Знак готовности монитора (звездочка *) появляется слева на экране, а справа от него высвечивается мерцающий указатель - знак подчеркивания ( ). В ПЭВМ "Агат" имеются два монитора: один из них записан в ПЗУ компьютера,



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98]