1.3 Задание курсового проекта

Вариант номер один. Следовательно, арифметическое выражение имеет следующий вид:

(a – b) / a + 1, если a>b

Y = 25, если a=b

(a – 5) / b, если a<b

Необходимо:

– написать модуль на языке Ассемблера для вычисления значения выражения (в виде процедуры или макроса);

– написать на языке Ассемблера программу корректного ввода исходных данных (с контролем допустимого диапазона) в таблицу и вывода полученного результата в виде таблицы;

– произвести тестовые проверки, сделать анализ результатов;

– ввести строку символов. Вывести номер первой цифры в строке, если она там есть;

– написать модуль на языке Ассемблера для обработки строк (в виде процедуры или макроса);

– написать на языке Ассемблера программу корректного ввода исходных данных;

– произвести тестовые проверки, сделать анализ результатов.


2. Арифметика

При запуске программы пользователю выводятся указания, что нужно делать. Это происходит при помощи вызова прерывания 21h c ah=09h.

Вот соответствующий код:

mov ah, 09h

mov dx, offset str1

int 21h

2.1 Считывание исходных данных и проверка на диапазон

Далее в цикле три раза считываем исходные данные в переменные a и b. И проверяем, чтобы они были в диапазоне от 0 до 65535. В противном случае переходим на следующий проход цикла и выдаем соответсвующее предупреждение на дисплей.

Это делается в следующем фрагменте кода:

k3:

cmp i, 3

je k2

mov di, 0; Пока ничего не введено, считаем что 0

mov si, 0; Номер позиции в числе

mov bp, 10; Потом будем умножать на 10

z1: mov ah, 01h

int 21h; Читаем символ

cmp al, '0'; Если это служебный символ -> r3

jb z2

cmp al, '9'; Если это не цифра -> r1

ja z5

mov bl, al; Сохраним символ в bl

mov ax, di

mul bp; Умножаем на 10

cmp dx, 0

jne z5; Если не 0 в DX -> переполнение

mov dl, bl

sub dl, '0'; Преобразуем символ в цифру

mov dh, 0; DX – цифра

add dx, ax

jc z5; Если перенос -> переполнение

inc si

mov di, dx

jmp z1

z2:

cmp si, 0

je z5

cmp al, 13

je enter1

jmp z1

enter1:

mov ah, 2h

mov dl, 13

int 21h

mov ah, 2h

mov dl, 10

int 21h

mov a, di

jmp z6

z5:

mov ah, 2h

mov dl, 13

int 21h

mov ah, 2h

mov dl, 10

int 21h

mov ah, 09h

mov dx, offset str2

int 21h

mov ah, 2h

mov dl, 13

int 21h

mov ah, 2h

mov dl, 10

int 21h

inc i

jmp k3

z6:

mov di, 0; Пока ничего не введено, считаем что 0

mov si, 0; Номер позиции в числе

mov bp, 10; Потом будем умножать на 10

x1: mov ah, 01h

int 21h; Читаем символ

cmp al, '0'; Если это служебный символ -> r3

jb x2

cmp al, '9'; Если это не цифра -> r1

ja x5

mov bl, al; Сохраним символ в bl

mov ax, di

mul bp; Умножаем на 10

cmp dx, 0

jne x5; Если не 0 в DX -> переполнение

mov dl, bl

sub dl, '0'; Преобразуем символ в цифру

mov dh, 0; DX – цифра

add dx, ax

jc z5; Если перенос -> переполнение

inc si

mov di, dx

jmp x1

x2:

cmp si, 0

je z5

cmp al, 13

je enter2

jmp z1

enter2:

mov ah, 2h

mov dl, 13

int 21h

mov ah, 2h

mov dl, 10

int 21h

mov b, di

jmp x6

x5:

mov ah, 2h

mov dl, 13

int 21h

mov ah, 2h

mov dl, 10

int 21h

mov ah, 09h

mov dx, offset str2

int 21h

mov ah, 2h

mov dl, 13

int 21h

mov ah, 2h

mov dl, 10

int 21h

inc i

jmp k3

x6:

Вначале считываем переменную A, а затем, если предыдущее чтение закончилось успешно, то считываем переменную B.

Рассмотрим их.

2.2 Запись данных в массивы

Передаем в стек параметры, т.е. переменные а и b, и вызываем процедуру находящуюся в модуле.

Исходный текст модуля представлен в приложении А.

Делаем сравнение переменных выполняем соответствующие арифметически операции, результат заносим в переменную y1 и возвращаемся в вызывающую программу.


Информация о работе «Разработка модуля проверки диапазона исходных данных и нахождения номера первого символа в строке»
Раздел: Информатика, программирование
Количество знаков с пробелами: 13726
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
37860
11
5

... какой либо ситуации -          Определить результат действия программы. На основании сделанных выводов решено создать дополнительное обучаю­щее средство в виде обучающей программы, поддерживающей индивидуаль­ное изучение всех вопросов темы, а также, дополнительные сведения о типах данных. Кроме того, в программу будет встроен блок самоконтроля, поддер­живающий проверку усвоения каждой изучаемой ...

Скачать
119077
15
0

... y.tab.c и стандартных библиотек.  Порядок работы с программой-транслятором nroff2html таков: на вход программы подается текстовый файл в формате nroff, а на выходе получаем текстовый файл в формате HTML. Конкретные шаги при разработке транслятора. Для построения конвертора выбран следующий подход: Сначала, с помощью генератора программ "Lex" строится лексический анализатор. В задачу ...

Скачать
285324
13
0

... -e[x,n,s] =Изменить метод сжатия -<p|P> = История пути | p=recursed into | P=specified & recursed into -<w|W><H,S> = | w=include | W=don't include | Показывает ход работы -<j|J><H,S,R> = | j=mask | J=don't mask | Hidden/System/Readonly attributes -v[b,c,d,e,n,p,s,r,t] = Просмотр архива Date/Ext/Name/Percentage/Size/sort Reverse/Technical (long) listing] ...

Скачать
668870
13
0

... программе. В данном разделе они перечислены в алфавитном порядке и приводятся с объяснениями. Эти ошибки могут являться следствием случайного затирание памяти программой. Abnormal program termination Аварийное завершение программы Данное сообщение может появляться, если для выполнения программы не может быть выделено достаточного количества памяти. Более подробно оно рассматривается в конце ...

0 комментариев


Наверх