ТУСУР, информатика. Ассемблер для процессора i8086 (лабораторные работы)
| 08.06.2026, 10:44 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Выбор варианта контрольной работы № 2 и лабораторной работы № 1 осуществляется по общим правилам с использованием следующей формулы: V = (N*K) div 100, где V — искомый номер варианта, N — общее количество вариантов, div — целочисленное деление (после деления дробная часть отбрасывается), при V= 0 выбирается максимальный вариант, K — код варианта. При изучении данного курса Вам потребуется: 1) операционная система MSDOS. Допускается применение ее в самостоятельном режиме или под управлением операционной системы Windows; 2) Norton Commander или другая подобная утилита; 3) DEBUG — отладчик; 4) NASM — транслятор ассемблера i8086. Данный лабораторный курс состоит из двух частей. В процессе выполнения первой части (лабораторная работа № 1) производится знакомство с языком, занимающим промежуточное положение между машинным языком и ассемблером. Обладая ассемблерной формой записи кодов операций и регистров, данный язык не имеет ассемблерных псевдооператоров и использует численные (не символьные) адреса. Знакомство с данным языком производится с помощью отладчика Debug и прежде всего предназначено для изучения механизма выполнения процессором машинных программ. Кроме того, создается основа для последующего написания и отладки ассемблерных программ. Во второй части курса (лабораторная работа № 2) производится знакомство с основами программирования на языке ассемблера. При этом объектами рассмотрения являются не только операторы ассемблера, но и методы проектирования и отладки программ. Выполните задание: Без использования калькулятора выполните следующие действия над двумя четырехзначными целыми положительными десятичными числами: 1) запишите исходные числа в двоичной системе счисления; 2) найдите сумму двоичных чисел из п. 1; 3) найдите разность двоичных чисел из п. 1 (от меньшего числа отнять большее); 4) запишите исходные числа в шестнадцатеричной системе счисления; 5) найдите сумму шестнадцатеричных чисел из п. 4; 6) найдите разность шестнадцатеричных чисел из п. 4 (от большего числа отнять меньшее число). Примечание. В качестве проверки рекомендуется найти сумму результатов п. 3 и п. 6, предварительно представив их в одной и той же системе счисления (двоичной или шестнадцатеричной). Указанная сумма должна быть равна 0. В самом деле, если обозначим исходные числа как A и B, то результат п. 3: A – B, а результат п. 6: B – A. Найдем искомую сумму: (A – B) + (B – A) = 0. ЛАБОРАТОРНАЯ РАБОТА № 1 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ, ВЫВОД СИМВОЛОВ, ВЫВОД ДВОИЧНЫХ ЧИСЕЛ Цель работы Целью настоящей работы является первоначальное знакомство с программой Debug — важнейшим помощником разработчика программ на языке Ассемблер. С помощью этой программы производится анализ и заполнение ячеек регистровой и оперативной памяти, осуществляется пошаговое выполнение программы. Другая цель: знакомство с некоторыми инструкциями Ассемблера, выполняющими арифметические операции, знакомство с инструкциями программного прерывания, с инструкциями пересылки данных, операторами сдвигов, операторами циклов. В процессе выполнения работы решается практически важная задача вывода чисел на экран, осуществляется вывод на экран двоичного числа в виде последовательности единиц и нулей. Для успешного выполнения лабораторной работы № 1 нужно изучить из пособия [1] темы 3. ПРОГРАММИРОВАНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ, 4. ВЫВОД СИМВОЛОВ НА ЭКРАН, 5. ВЫВОД НА ЭКРАН ДВОИЧНЫХ ЧИСЕЛ. Для формирования строк символов и вывода их на экран воспользуйтесь значениями из таблицы 1 и таблицы 2. Таблица 1 — Коды ASCII
Таблица 2 — Коды букв русского алфавита
Задание Разработать с помощью Debug программу, выполняющую вывод на экран текстового сообщения и последующее вычисление выражения: Y=[(Х1+Х2)ХЗ–Х4]/Х5, где Х1—Х5 — десятичные целые числа, выбранные в соответствии с номером варианта из таблицы 3. Результат вычисления выражения программа помещает в регистры AX и DX. Нужно вывести эти результаты в двоичной системе счисления. Структура выходного сообщения программы: “Программа вычисления выражения Y=[(Х1+Х2)ХЗ–Х4]/Х5, где X1=..., X2=..., X3=..., X4=..., X5=...” AX=0011110111000101 DX=0000000000010101 Промежуточные результаты можно будет наблюдать при запуске программы в debug, выполняя пошаговое выполнение инструкций. Вместо точек должны выводиться заданные числа (в шестнадцатеричной системе). Таблица 3 — Варианты заданий к лабораторной работе № 1
Примечание 1. Загрузка в регистры заданных чисел (преобразованных вручную в шестнадцатеричную систему) должна производиться только с помощью инструкций MOV. Примечание 2. Рекомендуется выполнить проверку результата выполнения программы путем сравнения его с результатом ручного счета. Так как при ручном счете используется десятичная система счисления, то перед сравнением результатов их необходимо записать в одной и той же системе. Отчет по лабораторной работе должен содержать: 1. Титульный лист — форма титульного листа представлена в Приложении 4. 2. Задание на лабораторную работу. В задании должен быть указан номер варианта и представлены исходные данные из таблицы 3. На проверку необходимо отправить каталог LAB1, в который нужно поместить: 1. Исполнимый файл программы, то есть файл с расширением .com. Имя файла может быть выбрано по Вашему усмотрению, но придерживайтесь правил именования файлов для DOS — имя должно состоять не более чем из 8 символов. 2. Отчет к лабораторной работе, выполненный с помощью редактора Word. ЛАБОРАТОРНАЯ РАБОТА № 2 ВВОД-ВЫВОД ЧИСЕЛ, ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ Цель работы В процессе выполнения работы решается практически важная задача вывода чисел на экран и их ввода с клавиатуры. Данная задача решается в следующей последовательности. Вопервых, рассматривается задача вывода на экран шестнадцатеричных чисел. Вовторых, рассматривается ввод шестнадцатеричных чисел с клавиатуры. В ходе работы производится знакомство с очень важными понятиями флагов состояния, стека и процедуры. Изучаются инструкции для работы с этими объектами, а также инструкции сдвига, цикла, условных переходов и некоторые другие. Для успешного выполнения лабораторной работы № 2 нужно изучить из пособия [1] темы: 6. ВЫВОД НА ЭКРАН ЧИСЕЛ В ШЕСТНАДЦАТЕРИЧНОЙ ФОРМЕ, 9. ВВОД С КЛАВИАТУРЫ ШЕСТНАДЦАТЕРИЧНЫХ ЧИСЕЛ. Одной из целей работы является развитие навыков алгоритмизации задач и отладки программ. До сих пор нашим единственным помощником при написании и отладке машинных программ была системная программа Debug. Мы и далее будем широко использовать Debug при отладке своих программ. Что касается написания программы, то тут помощь Debug явно недостаточна, и процесс написания скольконибудь сложной программы скорее всего продлится очень долго. По этой причине мы переходим к написанию программ на языке ассемблера. Целью выполнения данной работы является получение начальных навыков по разработке программ на языке ассемблера. А именно — рассматриваются псевдооператоры, позволяющие разрабатывать простые ассемблерные программы, а также производится первоначальное знакомство с системными программами (EDIT, NASM), обеспечивающими преобразование программы на языке ассемблера в машинную программу. Для этого из пособия [1] изучите темы и выполните все задания к ним 11. ПРОСТЫЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ, 12. ОСНОВНЫЕ ОПЕРАТОРЫ АССЕМБЛЕРА, 13. Пример программы на ассемблере, 14. ВЫВОД НА ЭКРАН ДЕСЯТИЧНЫХ И ШЕСТНАДЦАТЕРИЧНЫХ ЧИСЕЛ. Задание Разработать на ассемблере и отладить программу, которая выполняет: 1) ввод с клавиатуры двух 4значных шестнадцатеричных чисел (для ввода с клавиатуры можно использовать любые числа), которые записываются в качестве содержимого регистров BP и DI; 2) вывод на экран содержимого регистров, заполненных на шаге 1, в виде шестнадцатеричных чисел; 3) вывод на экран содержимого регистров, заполненных на шаге 1, в виде десятичных чисел; 4) вывод на экран содержимого регистров, заполненных на шаге 1, в виде двоичных чисел. Пример информации на экране: ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА BP AD56<Enter> ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА DI 7F09<Enter> ЧИСЛА В ШЕСТНАДЦАТЕРИЧНОЙ СИСТЕМЕ (BP) = AD56 (DI) = 7F09 ЧИСЛА В ДЕСЯТИЧНОЙ СИСТЕМЕ (BP) = 44374 (DI) = 32521 ЧИСЛА В ДВОИЧНОЙ СИСТЕМЕ (BP) = 1010110101010110 (DI) = 0111111100001001 Примечание 1. Файловая структура программы должна включать два файла типа .asm. В одном из них содержатся главная подпрограмма и тексты выводимых сообщений. Все остальные процедуры содержатся во втором файле. Примечание 2. Все процедуры должны иметь вводные и текущие комментарии. Примечание 3. Рекомендуется дополнительно разработать процедуру, выполняющую ввод шестнадцатеричного числа в 16битный регистр, процедуру вывода содержимого такого регистра в шестнадцатеричном виде, а также процедуру вывода содержимого 16битного регистра в десятичной системе счисления и в двоичной системе счисления. Для того чтобы реализовать вывод на экран чисел в десятичной системе счисления, воспользуйтесь алгоритмом вывода десятичного числа из [1]. Примечание 4. При реализации вывода второй и третьей шестнадцатеричных цифр числа, сдвигу числа вправо должен предшествовать его сдвиг влево. Для выполнения сдвига влево используйте инструкцию SHL («Shift Left» — логический сдвиг влево). Использование этой инструкции аналогично SHR. Выполнение SHL имеет такой же эффект, как и умножение на два, четыре, восемь и так далее, в зависимости от числа (соответственно единицы, двойки или тройки), хранящегося в СL. Примечание 5. Для получения на экране достаточно хорошей формы представления информации выполняйте вывод промежуточных пробелов. Число пробелов определяйте опытным путем. Отчет по лабораторной работе № 2 должен содержать: 1. Титульный лист — форма титульного листа представлена в Приложении 4. 2. Задание на лабораторную работу, для ввода с клавиатуры можно использовать любые числа. 3. Дерево подпрограмм. Пример дерева подпрограмм приведен в приложении 3 (рис. 4). 4. Файловую структуру программы. Примеры файловой структуры программы приведены в [1] рис. 14.3 и 15.1. На проверку необходимо отправить каталог LAB2, в который нужно поместить: 1. Исходный файл программы, то есть файл с расширением .asm. Имя файла может быть выбрано по Вашему усмотрению, но придерживайтесь правил именования файлов для DOS — имя должно состоять не более чем из 8 символов. 2. Исполнимый файл программы, то есть файл с расширением .com 3. Отчет к лабораторной работе, выполненный с помощью редактора Word. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||