Лабораторная 6 (2 сем)
.docxСанкт-Петербургский политехнический университет Петра Великого
Институт компьютерных наук и технологий
Высшая школа интеллектуальных систем и суперкомпьютерных технологий
ЛАБОРАТОРНАЯ РАБОТА №6
«Разработка ассемблерной программы ввода группы символов и вывода символьных строк»
по дисциплине «Архитектура вычислительных систем»
Выполнил
студент гр. 3530903/80001 А. В. Шильникова
Руководитель Н. М. Вербова
«___» __________ 2021 г.
Санкт-Петербург
2021
Цель работы: изучить элементы и принципы составления циклических программ.
Задачи:
1. Разработать программу на ассемблере, выдающую на дисплей строку текста, затем вводящую группу символов, после чего выдающую на дисплей следующую строку текста
2. Составить комментарий к программе
3. Ввести программу и проверить ее работу
Код, написанной программы в FASM:
Программа в WinHex:
Разбор кода:
«use16» – сообщает, что нужно генерировать 16-битный код.
«org 100h» – объясняет, что следующие команды и данные будут располагаться в памяти, начиная с адреса 100h. Дело в том, что при загрузке программы в память, DOS размещает в первых 256 байтах (с адресов 0000h — 00FFh) свои служебные данные.
BA 1C 01 |
mov dx, 1C 01 |
Копирование значения 11C16 в регистр dx, где 1Ch – адрес символа, с которого начинается текст, а 100h – это префикс программного сегмента. 100h – начало COM программы. |
B4 09 |
mov ah, 09 |
Копирование значения 916 в регистр ah, где 09h – функция DOS вывода строки. На вход функции поступает значение из регистра dx – адрес символа, с которого начинается вывод строки, заканчивающейся символом $ (24h). |
CD 21 |
int 21 |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
B9 0A 00 |
mov cx, 0A 00 |
запись 000Ah в cx в качестве счётчика цикла. Ah = 10. Для ввода 10 символов |
B4 01 |
mov ah, 01 |
Команда DOS - 01H: ввод с клавиатуры с эхо (отображением символа на экране). Считывает (ожидает) символ со стандартного входного устройства. |
CD 21 |
int 21 |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
E2 FC |
loop FC |
Цикл для повторного вызова функции ввода одного символа. FC = 1111 1100 Это дополнительный код. -1 => 1111 1011, инвертируем => 0000 0100 Получается метка -4. Которая возвращает на команду int 21 |
BA 2F 01 |
mov dx, 2E 01 |
Копирование значения 12F16 в регистр dx, где 2Fh – адрес символа, с которого начинается текст, а 100h – это префикс программного сегмента. 100h – начало COM программы. |
B4 09 |
mov ah, 09 |
Копирование значения 916 в регистр ah, где 09h – функция DOS вывода строки. На вход функции поступает значение из регистра dx – адрес символа, с которого начинается вывод строки, заканчивающейся символом $ (24h). |
CD 21 |
int 21 |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
B8 00 4C |
mov ax, 00 4C |
Копирование значения 4С16 в регистр ah, 4С – функция DOS завершения программы. |
CD 21 |
int 21 |
Вызов обработчика прерываний. Номер вектора прерываний = 2116. Это прерывание служит главным входом большинства функций DOS. |
Выводы:
При выполнении данной лабораторной работы были изучены принцип работы цикла loop и закреплены навыки ввода символов и вывода символьных строк и символов.