Лабораторная 5 (2 сем)
.docxСанкт-Петербургский политехнический университет Петра Великого
Институт компьютерных наук и технологий
Высшая школа интеллектуальных систем и суперкомпьютерных технологий
ЛАБОРАТОРНАЯ РАБОТА №5
«Составление ассемблерной программы ввода символов»
по дисциплине «Архитектура вычислительных систем»
Выполнил
студент гр. 3530903/80001 А. В. Шильникова
Руководитель Н. М. Вербова
«___» __________ 2021 г.
Санкт-Петербург
2021
Цель работы: изучить элементы и принципы составления линейных программ.
Задачи:
1. Разработать программу на ассемблере, считывающую символы, вводимые с клавиатуры
2. Составить комментарий к программе
3. Ввести программу и проверить ее работу
Код, написанной программы в FASM:
Программа в WinHex:
Разбор кода:
«use16» – сообщает, что нужно генерировать 16-битный код.
«org 100h» – объясняет, что следующие команды и данные будут располагаться в памяти, начиная с адреса 100h. Дело в том, что при загрузке программы в память, DOS размещает в первых 256 байтах (с адресов 0000h — 00FFh) свои служебные данные.
B4 01 |
mov ah, 01h |
Команда DOS - 01H: ввод с клавиатуры с эхо (отображением символа на экране). Считывает (ожидает) символ со стандартного входного устройства. |
CD 21 |
int 21h |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
B4 08 |
mov ah, 08h |
Команда DOS - 08H: Консольный ввод без эха. Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. |
CD 21 |
int 21h |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
88 C2 |
mov dl, al |
Команда 88 указывает, что это команда mov между регистрами, а за ней идет байт ModR/m. C2 = 1100 0010 MOD: 11 – регистровая адресация REG: 000 - источник al R/M: 010 - приемник dl |
B4 02 |
mov ah, 02h |
Команда DOS - 02H: вывод на дисплей. Посылает символ из DL на стандартный вывод. обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. |
CD 21 |
int 21h |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
B4 4C |
mov ah, 4Ch |
Копирование значения 4С16 в регистр ah, 4С – функция DOS завершения программы. |
CD 21 |
int 21h |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
Выводы:
При разработке данных программ удалось отработать посимвольное чтение из консоли, как с отображением, так и без него с помощью ассемблера. Чтение без отображения может пригодиться при создании интерфейса (чтобы меньше ресурсов тратить на перерисовку экрана).