Программа ЛамПанель
Скачать 261.5 Kb.
|
И нформатика, 10 класс К.Ю. Поляков, Е.А. Еремин Практические работыДля выполнения этих работ используется учебный компьютер «ЛамПанель», который можно загрузить со страницы http://kpolyakov.spb.ru/prog/lamp.htm. |
A: 01000001 a: 01100001 | B: 01000010 b: 01100010 | C: 01000011 c: 01100011 | D: 01000100 d: 01100100 |
Оказывается, коды заглавных и соответствующих строчных букв отличаются одним битом (этот пятый бит выделен желтым фоном). Поэтому для того, чтобы получить из заглавной буквы строчную букву, нужно установить 5-й бит (сделать его равным 1). Для этого можно, например, использовать логическую операцию «ИЛИ» с маской 002016, в которой 5-й бит установлен, а остальные – сброшены:
OR 20,R2
Затем нужно записать результат обратно в память, по адресу, находящемуся в R0:
MOVB R2,(R0)
Для перехода к следующему символу просто увеличиваем R0 на единицу
ADD 1,R0
и выполняем те же самые команды. Отметим, что две команды
MOVB R2,(R0) ; записать байт в память
ADD 1,R0 ; к следующему байту
можно заменить на одну, которая делает то же самое:
MOVB R2,(R0)+ ; записать байт в память и перейти
; к следующему байту
Чтобы обработать 6 символов, можно организовать цикл со счётчиком в регистре R1:
MOV @D,R0 ; адрес данных – в R0
MOV 6,R1 ; счётчик шагов цикла (сделать 6 раз)
M:
MOVB (R0),R2 ; прочитать байт из памяти
OR 20,R2 ; заглавную – в строчную
MOVB R2,(R0)+ ; записать байт в память и перейти к следующему
SUB 1,R1 ; уменьшить счетчик
JNZ M ; если не все сделали – переход на метку M
STOP
D:
DATA "ABCDEFG"
Задание на практическую работу
Запустите тренажёр «ЛамПанель». Введите программу
DATA 01D0
DATA 3536
DATA 0101
DATA FFFF
Используя дизассемблер программы «ЛамПанель», запишите эту программу на языке ассемблера:
Программа:
Запишите код команды STOP:
Запишите содержимое памяти, в которой располагается эта программы, в виде последовательности символов:
Как вы думаете, какой код будет иметь команда MOV R1,R3? Проверьте свой ответ с помощью программы.
Блок данных программы выглядит так.
A:
DATA 1234
B:
DATA 4321
SUM:
DATA 0
Напишите программу, которая складывает переменные A и B и записывает результат в переменную SUM:
Программа:
Напишите программу, которая преобразует строчные буквы в заглавные, используя байтовые операции. Блок данных может выглядеть так:
D:
DATA "abcdefgh"
Программа:
Усовершенствуйте программу так, чтобы цикл останавливался не после заданного количества букв, а тогда, когда очередной прочитанный байт равен 0. Возможно, вам понадобятся другие команды условного или безусловного перехода – изучите их по справочной системе (клавиша F1).
Программа:
Поскольку в компьютере с архитектурой фон Неймана программа и данные расположены в одной области памяти, программа может менять свой собственный код. Напишите какую-нибудь программу, которая изменяет сама себя во время работы.
Программа:
Процессор и устройства вывода
Возможности программы «ЛамПанель»
Наконец, мы подошли к самой интересной возможности программы «ЛамПанель» - управлению ламповой панелью. Ламповая панель (цифра 1 на рисунке) – это устройство вывода.
Обмен данными процессора и внешнего устройства происходит через порты – регистры контроллера внешнего устройства. У ламповой панели 8 портов, которые называются P0, P1, P2, P3, P4, P5, P6 и P7. Каждый порт «отвечает» за одну строку лампочек, например, для того, чтобы «зажечь» всю верхнюю строку нужно записать в порт P0 код FFFF16 (все 16 бит – единичные). Для этого можно использовать, например, команды
MOV FFFF, R0
OUT R0, P0
К сожалению, записать число сразу в порт нельзя – сначала нужно записать его в регистр (в данном примере – в R0), а потом – из регистра в порт.
Для того, чтобы изменить второй сверху ряд лампочек, нужно записать новое значение в P1 и т.д.; последний ряд управляется портом P7. Например, для того, чтобы все ряды лампочек горели одинаково, можно записать нужный код сначала в регистр:
MOV AAAA, R0
а затем из этого регистра – во все порты:
OUT R0, P0
OUT R0, P1
…
OUT R0, P7
Здесь многоточие обозначает аналогичные команды записи содержимого регистра R0 в порты P2…P6. Однако вместо последней серии из 8 команд можно использовать всего одну:
SYSTEM 2
Эта команда вызывает системную процедуру с номером 2, находящуюся в ПЗУ компьютера. Для того, чтобы увидеть все процедуры, которые записаны в ПЗУ, нужно щелкнуть по кнопке или выбрать пункт верхнего меню Программа – Просмотр ПЗУ. После этого появляется окно, в левой части которого перечислены все системные процедуры (с их номерами), а в правой части показывается код выбранной процедуры:
В этом списке есть много полезных процедур, в том числе
0 – очистка экрана (погасить все лампочки);
1 – зажечь все лампочки на панели;
3-4 – прокрутка изображения вниз и вверх;
6-9 – логические операции;
A16-E16 – сдвиги битов;
1216 – вывод числа, записанного в регистр R0, в десятичной системе счисления;.
1316 – вывод числа, записанного в регистр R0, в шестнадцатеричной системе счисления.
Обратите внимание, что номер системной процедуры задается в шестнадцатеричной системе счисления.
Рассмотрим еще одну задачу: вывести на экран рисунок, закодированный в виде шестнадцатеричных чисел (бит, равный единице, обозначает горящую лампочку). Для этого нужно сначала записать коды рисунка в память. Поскольку наш компьютер основан на архитектуре фон Неймана, в нем программа и данные находятся в одной области памяти. Поэтому данные можно записать с помощью специальной команды DATA после команды STOP:
... ; здесь будет программа
STOP
M: ; метка – начало блока данных
DATA AAAA ; код первой строчки
DATA 5555
DATA AAAA
DATA 5555
DATA AAAA
DATA 5555
DATA AAAA
DATA 5555 ; код последней строчки
Для того, чтобы вывести этот рисунок на экран, нужно записать его адрес в регистр R0 и вызвать системную процедуру с номером 5:
MOV @M, R0 ; записать адрес метки M в регистр R0
SYSTEM 5 ; вывести на экран рисунок, адрес которого в R0
STOP
M:
DATA AAAA ; код первой строчки
...
Задание на практическую работу
Запишите в таблицу минимальное и максимальное числа, которые можно вывести на ламповую панель, если использовать шестнадцатеричную систему:
минимальное число | максимальное число | ||
десятичное | шестнадцатеричное | десятичное | шестнадцатеричное |
| | | |
Составьте программу, после выполнения которой ламповая панель выглядит так:
Программа:
Как вы думаете, что выведет приведенная выше (в теоретической части) программа, которая вызывает системную процедуру с номером 5? Проверьте ваш ответ с помощью тренажёра.
Ответ:
Закодируйте изображение домика и выведите его на экран.
Программа:
Добавьте в предыдущую программу команды, которые сначала шифруют изображение, используя операцию «исключающее ИЛИ» с маской BCA716, а затем – восстанавливают исходное изображение. При изменении маски программа не должна изменяться. Изучите текст системной процедуры, которую вы используете.
Программа:
Напишите программу, которая делает «бегущую строку» из рисунка-домика.
Программа:
Напишите программу, которая организует «обратный отсчет» от 100 до 0, а затем выводит рисунок с домиком и останавливается.
Программа:
http://kpolyakov.spb.ru