Главная страница

Информатика КОНТРОЛЬНАЯ РАБОТА № 2 РАЗРАБОТКА ПРОГРАММЫ НА АССЕМБЛЕРЕ. контролная 2. Томский государственный университет


Скачать 115.21 Kb.
НазваниеТомский государственный университет
АнкорИнформатика КОНТРОЛЬНАЯ РАБОТА № 2 РАЗРАБОТКА ПРОГРАММЫ НА АССЕМБЛЕРЕ
Дата09.11.2021
Размер115.21 Kb.
Формат файлаdocx
Имя файлаконтролная 2.docx
ТипКонтрольная работа
#267114

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего образования


ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра компьютерных систем в управлении и проектировании (КСУП)

Контрольная работа № 2

по дисциплине

«Информатика»

Выполнил студент:

специальности
2021 г.
КОНТРОЛЬНАЯ РАБОТА № 2 РАЗРАБОТКА ПРОГРАММЫ НА АССЕМБЛЕРЕ

Вариант 9. По запросу программы пользователь вводит с клавиатуры последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием . Программа выводит эти же числа на экран в порядке возрастания величины числа, причем в «девятеричной» системе счисления.

Перед началом написания программы запишем:

-e 500 c; в ячейку памяти 500 заносим число С, (ограничитель на 12 вводимых с клавиатуры символов, включая пробелы) пробелов, в ячейке памяти 501 будет находиться счетчик введенных с клавиатуры символов, поэтому первый введенный c клавиатуры символ будет находиться по адресу [502]

-e 580 0d 0a 24; в ячейку памяти 580 заносим данные: начало новой строки, каретку в начло строки, конец строки.

Внесем в ячейку памяти трехзначные числа используя функцию DOS 0Ah



В ячейке памяти [502] находится символ ASCII, который необходимо преобразовать в шестнадцатеричное число (сотни)



С помощью команды CALL 400 вызываем процедуру преобразования символ ASCII в сотни шестнадцатеричного числа.



Команда RET возвращает из подпрограммы в основную программу



С помощью команды CALL 420 вызываем процедуру преобразования символ ASCII в десятки шестнадцатеричного числа





С помощью команды CALL 440 вызываем процедуру преобразования символ ASCII в еденицы шестнадцатеричного числа



Заносим полученное трехзначное шестнадцатеричное число в ячейку памяти по адресу [550]



Подпрограмма CALL 460 обнуляет регистры AX,BX,CX,DX с помощью команды XOR.



Повторяем вышеперечисленные действия для двух других чисел.



Все трехзначные шестнадцатеричные числа хранятся в ячейках памяти [550], [560], [570]. Перенесем их в регистры памяти AX, BX,CX, для дальнейшей операцией сравнения и ранжирования.

Сравнение будем производить с помощью команды CMP. Для ранжирования будем использовать команду JB-переход если меньше и команду XCHG-обмен содержимым регистров.



Теперь содержимое ячеек отсортировано [570]наименьшее, [560] , [550]наибольшее.



Подпрограмма CALL 200 преобразует шестнадцатеричное число, находящееся в ячейке памяти [570] в девятеричное и выведем его на экран







Подпрограмма CALL 230 выводит пробел на экран



Повторим подпрограмму преобразования и вывода на экран для чисел находящихся в ячейках памяти [560] , [550]



Завершим программу вектором прерывания INT 20.

Протестируем программу



Программа корректно преобразуем шестнадцатеричные числа в девятеричную систему счисления и выводит на их на экран в порядке возрастания.


MAIN





CALL 400

CALL 420

CALL 440

CALL 460

CALL 200

CALL 230



CALL 240



CALL 220


1. CALL 400 - преобразование первого символа ASCII (сотни в десятичном исчислении) в шестнадцатеричное число

2.CALL 420 - преобразование первого символа ASCII (десятки в десятичном исчислении) в шестнадцатеричное число

3.CALL 440 - преобразование первого символа ASCII (единицы в десятичном исчислении) в шестнадцатеричное число

4.CALL 460 - процедура обнуления регистров

5.CALL 200 - процедура перевода шестнадцатеричного числа в девятеричное число

6.CALL 240 - процедура определения символа необходимого вывести на экран

7.CALL 220 - процедура вывода символа на экран

8.CALL 230 - процедура вывода пробела на экран

Б
Начало подпрограммы
лок-схема алгоритма преобразования символов ASCII в шестнадцатеричное число.


извлекаем символ ASCII из ячейки памяти



al - 30

регистров ax,bx

преобразования символа ASCII в сотню шестнадцатеричного числа



64 в bl

регистров ax,bx

извлекаем символ ASCII из ячейки памяти



al*bl

регистров ax,bx


.
помещаем ax в dx

преобразования символа ASCII в десятки шестнадцатеричного числа



al - 30

регистров ax,bx



0А в bl

регистров ax,bx

извлекаем символ ASCII из ячейки памяти



al*bl

регистров ax,bx

ax + dx→ax

преобразования символа ASCII в единицы шестнадцатеричного числа

al - 30

регистров ax,bx

ax + dx→ax

перемещаем содержимое регистра аx (трехзначное шестнадцатеричное число) в ячейку памяти

конец подпрограммы


Блок-схема алгоритма ранжирования чисел


начало подпрограммы



сравниваем ax


д а нет


меняем местами содержимое регистров ax,bx

сбрасываем флаг переноса CF

регистров ax,bx





сравниваем bx

меняем местами содержимое регистров сx,bx


да


сбрасываем флаг переноса CF

регистров ax,bx
нет




сравниваем ax

меняем местами содержимое регистров ax,bx


да

нет


сбрасываем флаг переноса CF

регистров ax,bx



помещаем данные в ячейку памяти

регистров ax,bx



конец подпрограммы


Блок-схема алгоритма преобразования шестнадцатеричного числа в девятеричное счисление и его вывод на экран.


начало подпрограммы



cx←0



разделить число на 9



записать остаток в стек



cx←cx+1



частное =0


нет


взять цифру из стека



вывод цифры



cx←cx-1



сx=0
нет


конец


написать администратору сайта