Информатика. Ассемблер для процессора I8086 (Е.А. Потапова, 2013 г., 50 с.)ЛАБОРАТОРНАЯ РАБОТА № 1. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ, ВЫВОД СИМВОЛОВ, ВЫВОД ДВОИЧНЫХ ЧИСЕЛЦель работы Целью настоящей работы является первоначальное знакомство с программой Debug — важнейшим помощником разработчика программ на языке Ассемблер. С помощью этой программы производится анализ и заполнение ячеек регистровой и оперативной памяти, осуществляется пошаговое выполнение программы. Другая цель: знакомство с некоторыми инструкциями Ассемблера, выполняющими арифметические операции, знакомство с инструкциями программного прерывания, с инструкциями пересылки данных, операторами сдвигов, операторами циклов. В процессе выполнения работы решается практически важная задача вывода чисел на экран, осуществляется вывод на экран двоичного числа в виде последовательности единиц и нулей. Задание Разработать с помощью 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, выполняя пошаговое выполнение инструкций. Вместо точек должны выводиться заданные числа (в шестнадцатеричной системе). X1 X2 X3 X4 X5 1 275 361 15 2250 10 11 427 135 14 3221 15 2 413 228 14 4353 13 12 327 393 13 1929 12 3 199 328 16 3833 11 13 562 248 11 2520 17 4 355 436 13 4318 20 14 682 133 10 3563 22 5 359 537 11 5413 15 15 269 331 18 4151 14 6 227 199 19 2873 12 16 361 483 13 5621 22 7 436 327 13 3315 18 17 568 329 17 6209 21 8 521 263 12 2544 21 18 249 325 15 4683 16 9 324 391 17 4561 19 19 189 459 19 5394 19 10 614 134 17 8236 23 20 288 274 18 4815 20 Примечание 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) ввод с клавиатуры двух 4-значных шестнадцатеричных чисел (для ввода с клавиатуры можно использовать любые числа), которые записываются в качестве содержимого регистров BP и DI; 2) вывод на экран содержимого регистров, заполненных на шаге 1, в виде шестнадцатеричных чисел; 3) вывод на экран содержимого регистров, заполненных на шаге 1, в виде десятичных чисел; 4) вывод на экран содержимого регистров, заполненных на шаге 1, в виде двоичных чисел. Пример информации на экране: ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА BP AD56 ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА DI 7F09 ЧИСЛА В ШЕСТНАДЦАТЕРИЧНОЙ СИСТЕМЕ (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] рис. 56 и 57. На проверку необходимо отправить каталог LAB2, в который нужно поместить: 1. Исходный файл программы, то есть файл с расширением .asm. Имя файла может быть выбрано по Вашему усмотрению, но придерживайтесь правил именования файлов для DOS — имя должно состоять не более чем из 8 символов. 2. Исполнимый файл программы, то есть файл с расширением .com 3. Отчет к лабораторной работе, выполненный с помощью редактора Word. КОНТРОЛЬНАЯ РАБОТА № 2. РАЗРАБОТКА ПРОГРАММЫ НА АССЕМБЛЕРЕ Целью выполнения данной работы является комплексная проверка навыков программирования на языке ассемблера. Результаты работы представляются в виде совокупности следующих документов: 1) титульный лист; 2) дерево подпрограмм; 3) файловая структура программы; 4) блок-схемы алгоритмов процедур; 5) исходный файл (файлы) программы; 6) загрузочный модуль программы. Пример титульного листа приведен в Приложении 4. Пример дерева подпрограмм приведен в Приложении 3 (рис. 4). Примеры файловой структуры программы приведены в [1] рис. 56 и 57. Основным требованием к блок-схемам алгоритмов процедур является выполнение требований структурного программирования [приложение 3]. Примеры алгоритмов процедур приведены в [1] на рис. 54. Основным требованием к исходным модулям (файлам) программы является наличие комментариев. Дерево подпрограмм, файловая структура программы и блок-схемы процедур представляются в виде файлов, полученных с помощью текстового редактора Word. Остальные документы представляются в виде файлов с расширениями .asm и .com и помещаются в папку CONTR2. Варианты заданий контрольной работы № 2 Вариант 1. По запросу программы пользователь вводит с клавиатуры последовательность целых двузначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием Программа выводит на экран сумму этих чисел, представленную в десятичной и шестнадцатеричной системах счисления. Вариант 2. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит на экран сумму этих чисел, представленную в десятичной и «троичной» системах счисления. Вариант 3. По запросу программы пользователь вводит с клавиатуры последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием Программа выводит наибольшее число из введенных, представленное в десятичной и «пятиричной» системах счисления. Вариант 4. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит наибольшее число из введенных, представленное в десятичной и шестнадцатеричной системах счисления. Вариант 5. По запросу программы пользователь вводит с клавиатуры последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием Программа выводит наименьшее число из введенных, представленное в десятичной и восмеричной системах счисления. Вариант 6. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит наименьшее число из введенных, представленное в десятичной и «шестиричной» системах счисления. Вариант 7. По запросу программы пользователь вводит с клавиатуры последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием Программа выводит последовательность этих же чисел, но записанных в обратном порядке и в шестнадцатеричной системе счисления. Вариант 8. По запросу программы пользователь вводит с клавиатуры последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием Программа выводит эти же числа на экран в порядке убывания величины числа, причем в двоичной системе счисления. Вариант 9. По запросу программы пользователь вводит с клавиатуры последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием Программа выводит эти же числа на экран в порядке возрастания величины числа, причем в «девятиричной» системе счисления. Вариант 10. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит эти же числа на экран в порядке возрастания величины числа, причем в «троичной» системе счисления. Вариант 11. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит последовательность этих же чисел, но записанных в обратном порядке и в восьмеричной системе счисления. Вариант 12. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит эти же числа на экран в порядке убывания величины числа, причем в шестнадцатеричной системе счисления. Вариант 13. По запросу программы пользователь вводит с клавиатуры сообщение на русском языке, заканчивающееся символом «.» или «!». Программа выводит на экран это же сообщение, записанное только заглавными буквами. Вариант 14. По запросу программы пользователь вводит с клавиатуры сообщение на русском языке, заканчивающееся символом «.» или «?». Программа выводит на экран это же сообщение, записанное только строчными (малыми) буквами. Вариант 15. По запросу программы пользователь вводит с клавиатуры сообщение на английском языке, заканчивающееся символом «.» или «?». Программа выводит на экран это же сообщение, записанное только заглавными буквами. Вариант 16. По запросу программы пользователь вводит с клавиатуры сообщение на английском языке, заканчивающееся символом «.» или «!». Программа выводит на экран это же сообщение, записанное только строчными (малыми) буквами. Вариант 17. По запросу программы пользователь вводит с клавиатуры два целых четырехзначных положительных десятичных числа, разделенных знаком операции «+» или «–». Программа выводит на экран результат операции в двух системах счисления — в десятичной и в двоичной (в дополнительном коде). Вариант 18. По запросу программы пользователь вводит с клавиатуры два целых четырехзначных положительных десятичных числа, разделенных знаком операции « * ». Программа выводит на экран результат операции умножения. Вариант 19. По запросу программы пользователь вводит с клавиатуры два целых четырехзначных положительных десятичных числа, разделенных знаком операции « / ». Программа выводит на экран результат операции деления (частное и остаток). Вариант 20. По запросу программы пользователь вводит с клавиатуры два целых трехзначных положительных десятичных числа. Программа выводит на экран сообщение о том, делится ли первое число на второе без остатка, а затем сообщение — делится ли без остатка второе число на первое. Примечание 1 При вводе с клавиатуры десятичного числа следует учесть, что получение двоичного представления такого числа выполняется иначе по сравнению с шестнадцатеричным числом. При этом каждую очередную десятичную цифру следует умножить на вес позиции числа, а затем просуммировать результаты умножения. Например, при вводе 3-значного числа первая цифра умножается на сто, вторая — на десять, а третья цифра берется без изменения. Примечание 2 Для перевода числа из десятичной системы счисления в любую другую воспользуйтесь алгоритмом вывода на экран десятичных и шестнадцатеричных чисел, тема в пособии 14. ВЫВОД НА ЭКРАН ДЕСЯТИЧНЫХ И ШЕСТНАДЦАТЕРИЧНЫХ ЧИСЕЛ.
ОТПРАВИТЬ ЗАЯВКУ |
---|