Контрольная работа по "Программированию"
Автор: Lbrf2406 • Декабрь 20, 2021 • Контрольная работа • 1,676 Слов (7 Страниц) • 184 Просмотры
1. Текст задачи
Написать программу на языке Ассемблера, которая позволяет ввести с клавиатуры строку символов на русском языке, подсчитать количество гласных букв во введенной строке и вывести соответствующую информацию на экран.
2. Словесное описание работы программы
Перед описанием алгоритма работы программы стоит отметить, что при использовании эмулятора DOS-окружения для Windows “DosBox”, на современных операционных системах, таких как Window 10, отображение русских букв будет некорректным. Чтобы это исправить, нам необходимо русифицировать DosBox. Для этого нам необходимо с официального сайта DosBox “https://www.dosbox.com/” необходимо скачать архив “ DOSBox-russian-lang-074.zip” и всё его содержимое перекинуть в коренную папку DosBox (по умолчанию “C:\Program Files (x86)\DOSBox-0.74-3”). После открыть dosbox.conf. Найти секцию [dosbox]. В этой секции есть параметр “language=”. После знака "=" допишите путь к файлу russian.txt. Также в секции [dos] будет параметр “keyboardlayout=auto”. Необходимо “auto” испранить на “ru”. После проделанных шагов DosBox будет корректно отображать русские символы.
Сам алгоритм может переключаться между русской и английской раскладкой, клавишей Tab. Это сделано в связи с тем, что в русской раскладке есть не все символы. Также алгоритм распознаёт регистр.
Алгоритм начинает работать в русской раскладке. Сначала он считывает символ, и проверяет, какая кнопка была нажата. Если был нажат Enter, то программа перепрыгивает на метку вывода результата. В связи с тем, что код программы получился очень обширным, а условный переход jz имеет ограничение на 128 байт, данный прыжок был реализован через “станции/остановки”, которые расположены через каждые 64-72 строки.
Считав символ, мы проверяем, какая клавиша была нажата. Делается это с помощью команды cmp. Мы прыгаем на первую метку b1. Если символ не соответствует нужному, мы прыгаем на следующую метку b2, и т. д. Если мы не находим нужный символ, то мы возвращаемся к вводу символа (это реализовано точно также, как нажатие клавиши Enter). Когда мы находим нужный символ, мы заносим в регистр dl символ, соответствующий расширенной таблице ASCII в кодировке CP-866 (именно в этой кодировке работает DosBox), и совершаем прыжок ко вводу символа.
Если была нажата клавиша Tab, то мы прыгаем на метку “eng” (меняем раскладку). Там мы считывает символ, и если были нажаты клавиши Enter или Tab, то мы поступаем точно также, как и в случае с русской раскладкой. Если же была нажата иная клавиша, то печатается уже считанный символ.
Когда считывается нажатие русской гласной буквы, то счётчик (находящейся в сегменте данных) увеличивается на единицу.
После нажатия Enter, наш посредством постоянного деления на 10, и откладывания остатка в заранее заготовленные переменные (также находящиеся в сегменте данных) раскладывается на цифры, из которых число счётчика состоит. Таких переменных всего 6 штук, но 6-я для того, чтобы понять, больше ли число счётчика, чем 100000. Если число больше (т. е. в 6-ю переменную попал остаток от деления), то у нас выводится сообщение о том, что в тексте 100000 или больше гласных букв. Иначе каждая переменная увеличивается на 30h (чтобы соответствовать необходимой цифре, согласно таблице ASCII) и выводится результат. Таким образом точно возможно определить количество гласных в тексте до 99999.
Приложение А
(обязательное)
Текст программы
d_s segment
c db 0
c_1 db 0
c_2 db 0
c_3 db 0
c_4 db 0
c_5 db 0
c_6 db 0
final_text1 db 10,13,'There are ','$'
final_text2 db ' vowels in the text',13,10,'$'
final_text3 db '100000 or more vowels in the text',13,10,'$'
...