Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная 6 (2 сем)

.docx
Скачиваний:
2
Добавлен:
18.07.2022
Размер:
91.71 Кб
Скачать

Санкт-Петербургский политехнический университет Петра Великого

Институт компьютерных наук и технологий

Высшая школа интеллектуальных систем и суперкомпьютерных технологий

ЛАБОРАТОРНАЯ РАБОТА №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 и закреплены навыки ввода символов и вывода символьных строк и символов.