Микро ЭВМ "ZX Spectrum" 1969 г.

Демонстрационные программы на машинном языке - выполнение пользовательской программы, написанной на машинном языке. Команды сравнения.


Группа 8. Команды сравнения.

Команды сравнения действуют так же, как команды SUB, за исключением того, что содержимое регистра А остается неизменным. При этом используется флажок ПЕРЕНОС.

Действие команды "CP B" можно показать, внеся соответствующие изменения в программу 12. Для этого нужно изменить строки 51 и 10 0 следующим образом.

51 DATA "06","00","B8" Шестнадцатиричный код

команды "CP B" - B8.

10 0 PRINT AT 10,0;F;

CHR$3 2;"CP";CHR$3 2;S;CHR$3 2;"gives carry";CHR$32 и прибавить строки 101 и 102 :

101 RANDOMIZE USR 32000

102 PRINT "re" AND NOT PEEK 31999;"set"

Команды этой группы позволяют пользователю производить логические операции AND (И), OR (ИЛИ) и XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ) с двумя 8-разрядными числами.

В приведенной ниже программе показано использование логической команды AND с двумя числами, введенными пользователем .

Адрес Машинный Мнемокод Комментарии

код

7D00 3E 00 LD A,+xx Ввести в указанные

7D02 06 00 LD B,+xx регистры числа

7D04 A0 AND B Логическое И

7D0 5 32 FF 7C LD (STORE),A Копирование результата

в "STORE"

7D0 8 C9 RET "Возврат к Бейсику"

Этой программе соответствует написанная на Бейсике программа 15. После введения каждого числа оно отображается в двоичном виде. Результат извлекается из STORE с помощью команды PEEK и также отображается в двоичном виде.

Программа 15. AND B ^роки 10-40. Шестнадцатиричный загрузчик, приведенный на стр.92

5 0 DATA "3E","00"

51 DATA "06" ,"00"

52 DATA "A0"

53 DATA "32","FF","7C"

54 DATA "C9"," "

60 INPUT "Enter a first value (0-255)";CHR$32;F 70 CLS

8 0 POKE 3 2 0 01,F

9 0 PRINT AT 8,4;:GO SUB 300

10 0 PRINT AT 10,8;"AND"

110 INPUT "Enter a second value (0-255)";CHR$32;S 120 POKE 32003,S

13 0 PRINT AT 12,4; :LET F=S: GO SUB 300

14 0 PRINT AT 14,7;"givas" 150 RANDOMISE USR 32000

160 PRINT AT 16,4; : LET F=PEEK 31999: GO SUB 300

170 GOTO 60

300 REM Binary of F

310 FOR N=7 TO 1 STEP -1

320 LET P=2**N

330 PRINT CHR$(4 8+INT(F/P));CHR$32;

340 LET F=F-INT(F/P)*P

350 NEXT N

360 PRINT INT F

370 RETURN

Программу 15 можно приспособить для демонстрации команд "OR B" и "XOR B". В частности, следует внести следующие изменения в строки 52 и 100 для демонстрации команды "OR B":

52 DATA "B0"

100 PRINT AT 10,8;"OR" и для демонстрации команды "XOR B":

52 DATA "A8"

100 PRINT AT 10,8;"XOR B"

Советуем, читатель, хорошо изучить эти три логические команды.

Группа 10. Команды перехода.

Семнадцать команд этой группы позволяют пользователю совершать переходы между частями программы, написанной на машинном языке. Переходы могут быть относительными, т.е. на указанное число ячеек (от-128 до+127) от ячейки с текущим адресом, расположенным в счетчике команд, или абсолютными, т.е. в ячейку с указанным адресом. Также разрешены условные переходы по состоянию одного из основных флажков - но только с имеющимися командами безусловного перехода.

Для демонстрации команд этой группы в программе 16 можно использовать следующую программу , написанную на машинном языке.

NEXT равно 7D0F Адрес Машинный Мнемокод Комментарии

код

7D00 3E 00 LD A,+xx Ввести два числа и сравнить

7D02 FE 0 0 CP +xx их для установки флажков

7D04 01 00 00 LD BC,+0000 Обнулить BC

7D0 7 18 06 JR NEXT Переход вперед к NEXT

7D0 9 0 0 NOP Для последующего исполь-

7D0A C9 RET зования

7D0B 00 00 00 00 - 4 неиспользуемые ячейки

7D0F 03 INC BC Увеличить после перехода

содержимое BC на 1 7D10 C9 RET "Возврат к Бейсику"

В результате выполнения этой программы в регистре BC будет содержаться 0, если перехода не было, и 1 - если переход был.

В программе 16 показано, как эта программа, написанная на машинном языке, используется для демонстрации команды "JR e". Это - команда безусловного перехода, так что переход не будет зависеть от результата проверки, заданной пользователем .

Программа 16. JR e

Строки 10- 40. Шестнадцатиричный загрузчик, приведенный на стр. 92 .

5 0 DATA "3E","00"

51 DATA "FE","00"

52 DATA "01","00","00"

53 DATA "18" ,"06","00"

54 DATA "C9"

55 DATA "00","00","00" ,"00"

56 DATA "03","C9"

60 PRINT AT 4,0;"Instruction -"

70 PRINT "JR e"

8 0 PRINT AT 8,0;"Test-"

90 INPUT "Enter a first value (0-255) ";CHR$32;F

10 0 PRINT F;CHR$3 2;"CP";CHR$3 2;

110 INPUT "Enter a second value (0-255) ";CHR$32;S

12 0 PRINT S

13 0 PRINT at 12,0; "jump -"

140 POKE 3 2 0 0 01,F: POKE 32003,S

150 LET R=USR 32003: PRINT "N" AND NOT R; "YES" AND R

160 PRINT AT 21,0;"Any key to continue"

170 PAUSE 50

18 0 IF INKEY$="" THEN GO TO 18 0

190 CLS: GO TO 60

В этой программе пользователь должен ввести два числа. Затем, после операции сложения, в случае необходимости осуществляется переход. При отсутствии перехода переменная R приравнивается 0; в случае перехода она равняется 1.

Программа написана таким образом, что пользователь может, изменив строки 53 и 70, демонстрировать четырнадцать из семнадцати команд перехода.

Для демонстрации команд относительного перехода следует внести следующие изменения.

'JR NZ,e' 53 DATA "20","06","00"

7 0 PRINT "JR NZ,e"

'JR Z,e' 53 DATA "28", "06", "00"

7 0 PRINT "JR Z,e"

'JR NC,e' 53 DATA "30","06","00"

7 0 PRINT "JR NC,e"

'JR C,e' 53 DATA "38", "06", "00"

7 0 PRINT "JR C,e"

Для демонстрации команд абсолютного перехода нужно изменить программу, написанную на машинном языке, таким образом, чтобы задавался переход в ячейку памяти NEXT с шестнадцатиричным адресом 7D0F.

Соответствующая строка команды на машинном языке будет выглядеть так:

Адрес Машинный Мнемокод Комментарии

код

7D07 03 0F 7D JP NEXT Переход вперед к NEXT

В программу 16 следует внести следующие изменения.

'JP addr' 53 DATA "C3","0F","7D"

7 0 PRINT "JP addr"

'JP NZ,addr' 53 DATA "C2","0F","7D"

7 0 PRINT "JP NZ,addr"

'JP Z,addr' 53 DATA "CA","0F","7D"

7 0 PRINT "JP Z,addr"

'JP NC,addr' 53 DATA "D2","0F","7D"

7 0 PRINT "JP NC,addr"

'JP C,addr' 53 DATA "DA","0F","7D"

7 0 PRINT "JP C,addr"

'JP PO,addr' 53 DATA "E2","0F","7D"

7 0 PRINT "JP PO,addr"

'JP PE,addr' 53 DATA "EA","0F","7D"

7 0 PRINT "JP PE,addr"

'JP P,addr' 53 DATA "F2","0F","7D"

7 0 PRINT "JP P,addr"

'JP M,addr' 53 DATA "FA","0F","7D"

7 0 PRINT "JP M,addr"

В остальных трех командах этой группы используется косвенная адресация; читателю предлагается самому внести изменения

в программу, позволяющие демонстрировать действие этих команд .

Группа 11. Команда "DJNZ,e"

Команда "DJNZ,e" очень часто оказывается довольно полезной, поскольку ее легко использовать для организации простых циклов в программе, написанной на машинном языке.

Для использования команды "DJNZ,e" программист должен вначале задать число необходимых циклов, затем скопировать это число в регистр B. После этого задается тело цикла, а потом - команда "DJNZ,e", действующая подобно "NEXT B".

Ниже приводится программа, состоящая из четырех строк, написанная на Бейсике, и предназначенная для вывода алфавита (заглавных букв). После заполнения экрана появляется сообщение "scroll?".

10 FOR A 6 5 TO 9 0

2 0 PRINT CHR$ A;

30 NEXT A

40 GO TO 10

Такую же операцию можно задать с помощью приведенной ниже программы на машинном языке. Заметим, что программист может использовать лишь "STEP - 1".

LOOP равно 7D02 Адрес Машинный Мнемокод Комментарии код

7D0 0 06 1A LD B,+1A Задается 25 циклов -

обратно от команды 7D02 3E 5B LD A,+5B "A" соответствует шестнад-

7D04 90 SUB B цатиричное 5B - 1A

Значение находится в рег. А 7D0 5 D7 RST 0010 Печать символа - см. дальше

7D0 6 10 FA DJNZ,LOOP Обратно для печати следующей

буквы (если нужно), иначе -7D0 8 C9 RET "возврат к Бейсику"

Этой программе соответствует программа 17 предназначенная для вывода алфавита на экран телевизионного дисплея. Для неоднократной печати алфавита используются повторные вызовы "USR 32000" .

Программа 17. DJNZ,e

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92 .

5 0 DATA "06","1A"

51 DATA "3E","5B"

52 DATA "90"

53 DATA "D7"

54 DATA "10","FA"

55 DATA "C9"

60 PRINT

70 RANDOMIZE USR 32000

80 GO TO 70

Замечание: Важным является введение строки 60, задающей открытие канала дачи данных в "основную" область памяти телевизионного дисплея. Если эта команда (или что-либо подобное) отсутствует, вывод производится в область редактирования .

Группа 12. Команды стека

В этой группе команд имеется пять подгрупп. В первую

подгруппу входят команды PUSH и POP, во вторую - команды обмена со стеком.

Для демонстрации команд первой группы в программе 18 используется следующий способ.

Адрес Машинный Мнемокод Комментарии код

7D0 0 21 0 0 0 0 LD HL,+хххх Ввод числа

7D03 E5 PUSH HL Занесение его в стек

7D04 C1 POP BC Теперь оно в BC

7D0 5 C9 RET "Возврат к Бейсику"

В программе 18 пользователь должен ввести число. Затем это число копируется в двойной регистр HL, и в дальнейшем пересылается в стек. Окончательно это число копируется из стека в двойной регистр BC.

Программа 18. PUSH HL; POP HL

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92 .

5 0 DATA "21","00","00"

51 DATA "E5","C1"

55 DATA "C9"," "

60 INPUT "Enter a value (0-255)";CHR$32;F

70 POKE 3 2 0 01,F-INT(F/2 56)*256: ROKE 32002,INT(F/256)

80 CLS

90 PRINT AT 10,0;"Value taken off stack=";CHR$32;

USR 32000

100 GO TO 60

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

В третью и четвертую подгруппы входят команды CALL и RET.

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

NEXT равно 7D0F

Адрес Машинный Мнемокод Комментарии код

7D00 3E 00 LD Aj+хх Ввести два числа и срав-

7D02 FE 00 CP +хх нить их

7D04 01 00 00 LD BC,+0000 Обнулить BC

7D07 CD 0F 7D CALL NEXT Вызов подпрограммы

7D0A C9 RET "Возврат к Бейсику"

7D0B 00 00 00 00 - 4 неиспользуемые ячейки

7D0F 03 INC BC Теперь в BC - 1

7D10 C9 RET Возврат из подпрограммы

Для других команд в программе 16 можно использовать этот блок со следующими изменениями.

13 0 PRINT AT 12,0; "CALL ",

'CALL addr' 53 DATA "CD","0F","7D"

7 0 PRINT "CALL addr"

'CALL NZ,addr' 53 DATA "C4","0F","7D" 7 0 PRINT "CALL NZ,addr"

'CALL Z,addr' 53 DATA "CC","0F","7D" 7 0 PRINT "CALL Z,addr"

'CALL NC,addr' 53 DATA "D4","0F","7D" 7 0 PRINT "CALL NC,addr"

'CALL C,addr ' 53 DATA "DC","0F","7D" 7 0 PRINT "CALL C,addr"

'CALL PO,addr' 53 DATA "E4","0F","7D" 7 0 PRINT "CALL PO,addr"

'CALL PE,addr' 53 DATA "EC","0F","7D" 7 0 PRINT "CALL PE,addr"

'CALL P,addr' 53 DATA "F4","0F","7D" 7 0 PRINT "CALL P,addr"

'CALL M,addr' 53 DATA "FC","0F","7D" 7 0 PRINT "CALL M,addr"

Для демонстрации действия команды RET можно использовать следующую программу, написанную на машинном языке. Однако соответствующие изменения в программе 16 читателю предлагается продумать самому.

Адрес Машинный Мнемокод Комментарии

код

7D00 3E 00 LD A,+xx Ввести два числа и срав-

7D02 FE 00 CP +xx нить их

7D04 01 01 00 LD BC,+0001 В регистр BC заносится 1

7D07 D8 RET C Возврат если флажок

7D08 0B DEC BC ПЕРЕНОС установлен

7D0 9 C9 RET обычный возврат

Замечания: В этой программе демонстрируется команда "RET C".

Логическая схема изменена так, что прогр.16 будет давать на выходе "YES" при условном переходе. Команда RST будут рассматриваться в главах 7 и 8 .




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Семь и 1/2 - Особенности национального рулеза или чисто Сибирский проект (повесть о Crazy Siberian Party 1999).
Демопати - первые полные результаты Chaos Construction'2000.
Новости - Близится к концу работа над созданием CD-диска.
Амига - Эмулятор Амиги на РС - это что-то...
Злоба дня - проект нового трекера для спектрума Master Tracker!

В этот день...   21 ноября