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.
... какой либо ситуации - Определить результат действия программы. На основании сделанных выводов решено создать дополнительное обучающее средство в виде обучающей программы, поддерживающей индивидуальное изучение всех вопросов темы, а также, дополнительные сведения о типах данных. Кроме того, в программу будет встроен блок самоконтроля, поддерживающий проверку усвоения каждой изучаемой ...
... y.tab.c и стандартных библиотек. Порядок работы с программой-транслятором nroff2html таков: на вход программы подается текстовый файл в формате nroff, а на выходе получаем текстовый файл в формате HTML. Конкретные шаги при разработке транслятора. Для построения конвертора выбран следующий подход: Сначала, с помощью генератора программ "Lex" строится лексический анализатор. В задачу ...
... -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] ...
... программе. В данном разделе они перечислены в алфавитном порядке и приводятся с объяснениями. Эти ошибки могут являться следствием случайного затирание памяти программой. Abnormal program termination Аварийное завершение программы Данное сообщение может появляться, если для выполнения программы не может быть выделено достаточного количества памяти. Более подробно оно рассматривается в конце ...
0 комментариев