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

Так как для типа переменных мы использовали 2 байта, то индексируем массив через один, чтобы на каждый элемент так же отводилось по два байта.

cmp i, 1

je t1

ja t2

mov ax, a

mov sourcea, ax

mov ax, b

mov sourceb, ax

mov ax, y1

mov dest, ax

jmp t3

t1:

mov ax, a

mov sourcea+2, ax

mov ax, b

mov sourceb+2, ax

mov ax, y1

mov dest+2, ax

jmp t3

t2:

mov ax, a

mov sourcea+4, ax

mov ax, b

mov sourceb+4, ax

mov ax, y1

mov dest+4, ax

t3:

inc i

Далее посимвольно выводим на дисплей содержимое переменной y1.


2.4 Вывод значения переменной на дисплей

При помощи деления на десять отделяем по одной цифре и выводим ее на дисплей.

mov ax, y1; Выводимое число в регисте AX

push -1; Сохраним признак конца числа

mov cx, 10; Делим на 10

l:mov dx, 0; Очистим регистр dx

div cx; Делим

push dx; Сохраним цифру

cmp ax, 0; Остался 0? (оптимальнее or ax, ax)

jne l; нет -> продолжим

mov ah, 2h

l2:pop dx; Восстановим цифру

cmp dx, – 1; Дошли до конца -> выход

je ex

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

int 21h; Выведем цифру на экран

jmp l2; И продолжим

ex:

mov ah, 02h перейдем на новую строчку

mov dl, 13

int 21h

mov dl, 10

int 21h

В конце делаем перевод каретки и следим за переполнениями.


3. Строки

При запуске программы выводим приглашение говорящее, что максимальное кол-во символов в строке 255.

3.1 Записываем введенную строку в массив байт

Делаем это в цикле, пока пользователь не нажмет Enter или не наберет 255 символов.

mov i, 0

mov si, 0

z0:

cmp i, 255

je z1

mov ah, 01h

int 21h;

cmp al, 13;

je z1

mov dest[si], al

inc i

inc si

jmp z0;

z1:

Далее вызываем процедуру.


3.2 Процедура подсчета первой цифры

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

Соответствующий код представлен в приложении B.

3.3 Вывод результата

Если результат нулевой, то символа нам нужного в строке не было. Выводим сообщение об этом.

cmp number, 0

je z5

mov al, number;

push -1;

mov cx, 10;

l:mov dx, 0;

div cx;

push dx;

cmp ax, 0;

jne l;

mov ah, 2h

l2:pop dx;

cmp dx, – 1;

je ex

add dl, '0';

int 21h;

jmp l2;

ex:

jmp z6

z5:

mov ah, 09h

mov dx, offset str2

int 21h

z6:

mov ax, 4c00h; Выход

int 21h

Иначе выводим номер символа.


4. Контрольный пример

Запускаем приложение для подсчета функции и вводим:

16

16

В ответ получаем – 25

0

1

В ответ получаем – -5

200000

В ответ получаем – Wrong input!!!

Значит программа работает корректно.

Запускаем приложение для подсчета номера цифры и вводим:

Abc1c

В ответ получаем – 4

Abcd

В ответ получаем – No digit in this line!

Значит программа работает корректно.


Заключение

В данной курсовой работе были реализованы две программы, одна для вычисления функции с вводом и выводом данных в таблицу и на дисплей, и проверки диапазона исходных данных, другая – для нахождения номера первого символа в строке с вводом исходных данных и проверки их корректности.

Так как основные действия были разбиты на модули – это значительно упростило модификацию и отладку программы.

Рассмотрены основные особенности языка ассемблера и низкоуровневых языков в частности.


Перечень литературы

1.   Юров В.И. «Assembler: учебный курс». – СПб: Питер, 2000.

2.   Пирогов В.Ю. «Ассемблер MASM32. Программирование». – СПб: Питер, 2002.

3.   Д. Кнут. «Искусство программирования». Том 1.

4.   Д. Кнут. «Искусство программирования». Том 2.

5.   Д. Кнут. «Искусство программирования». Том 3.


Информация о работе «Разработка модуля проверки диапазона исходных данных и нахождения номера первого символа в строке»
Раздел: Информатика, программирование
Количество знаков с пробелами: 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 комментариев


Наверх