48596 (Разработка модуля проверки диапазона исходных данных и нахождения номера первого символа в строке)

2016-07-30СтудИзба

Описание файла

Документ из архива "Разработка модуля проверки диапазона исходных данных и нахождения номера первого символа в строке", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48596"

Текст из документа "48596"

Введение

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

В ассемблере удобно то, что мы сами решаем какого типа числа мы храним в ячейках памяти (знаковые или беззнаковые, упакованные).

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

1. Теоретические сведения

1.1 Преимущества написания программы на ассемблере

Так как язык ассемблера для компьютера «родной», то и самая эффективная программа может быть написана только на нем (при условии, что ее пишет квалифицированный программист). Здесь есть одно маленькое «но»: это очень трудоемкий, требующий большого внимания и практического опыта процесс. Поэтому реально на ассемблере пишут в основном программы, которые должны обеспечить эффективную работу с аппаратной частью. Иногда на ассемблере пишутся критичные по времени выполнения или расходованию памяти участки программы. Впоследствии они оформляются в виде подпрограмм и совмещаются с кодом на языке высокого уровня.

Язык ассемблера будет существовать, пока будут существовать процессоры. Это не преходяще и не подвержено моде. Владение языком ассемблера дает ощущение полного обладания компьютером, власти над ним.

С помощью ассемблера можно создавать самый компактный и быстрый код. Ни один компилятор языков высокого уровня не может давать таких результатов. Многие модули операционных систем или даже операционные системы целиком было написано на языке ассемблера.

1.2 Типы данных

При программировании на языке ассемблера используются данные следующих типов:

– Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды.

Непосредственные данные формируются программистом в процессе написания программы для конкретной команды ассемблера.

– Данные простого типа, описываемые с помощью ограниченного набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации. При обработке этих директив ассемблер сохраняет в своей таблице символов информацию о местоположении данных (значения сегментной составляющей адреса и смещения) и типе данных, то есть единицах памяти, выделяемых для размещения данных в соответствии с директивой резервирования и инициализации данных.

Эти два типа данных являются элементарными, или базовыми; работа с ними поддерживается на уровне системы команд микропроцессора. Используя данные этих типов, можно формализовать и запрограммировать практически любую задачу. Но насколько это будет удобно – вот вопрос.

– Данные сложного типа, которые были введены в язык ассемблера с целью облегчения разработки программ. Сложные типы данных строятся на основе базовых типов, которые являются как бы кирпичиками для их построения. Введение сложных типов данных позволяет несколько сгладить различия между языками высокого уровня и ассемблером. У программиста появляется возможность сочетания преимуществ языка ассемблера и языков высокого уровня (в направлении абстракции данных), что в конечном итоге повышает эффективность конечной программы.

Обработка информации, в общем случае, процесс очень сложный. Это косвенно подтверждает популярность языков высокого уровня. Одно из несомненных достоинств языков высокого уровня – поддержка развитых структур данных. При их использовании программист освобождается от решения конкретных проблем, связанных с представлением числовых или символьных данных, и получает возможность оперировать информацией, структура которой в большей степени отражает особенности предметной области решаемой задачи. В то же самое время, чем выше уровень такой абстракции данных от конкретного их представления в компьютере, тем большая нагрузка ложится на компилятор с целью создания действительно эффективного кода. При программировании на языке ассемблера используются данные следующих типов:

Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды.

Непосредственные данные формируются программистом в процессе написания программы для конкретной команды ассемблера.

Данные простого типа, описываемые с помощью ограниченного набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации. При обработке этих директив ассемблер сохраняет в своей таблице символов информацию о местоположении данных (значения сегментной составляющей адреса и смещения) и типе данных, то есть единицах памяти, выделяемых для размещения данных в соответствии с директивой резервирования и инициализации данных.

Эти два типа данных являются элементарными, или базовыми; работа с ними поддерживается на уровне системы команд микропроцессора. Используя данные этих типов, можно формализовать и запрограммировать практически любую задачу. Но насколько это будет удобно – вот вопрос.

Данные сложного типа, которые были введены в язык ассемблера с целью облегчения разработки программ. Сложные типы данных строятся на основе базовых типов, которые являются как бы кирпичиками для их построения. Введение сложных типов данных позволяет несколько сгладить различия между языками высокого уровня и ассемблером. У программиста появляется возможность сочетания преимуществ языка ассемблера и языков высокого уровня (в направлении абстракции данных), что в конечном итоге повышает эффективность конечной программы.

Обработка информации, в общем случае, процесс очень сложный. Это косвенно подтверждает популярность языков высокого уровня. Одно из несомненных достоинств языков высокого уровня – поддержка развитых структур данных. При их использовании программист освобождается от решения конкретных проблем, связанных с представлением числовых или символьных данных, и получает возможность оперировать информацией, структура которой в большей степени отражает особенности предметной области решаемой задачи. В то же самое время, чем выше уровень такой абстракции данных от конкретного их представления в компьютере, тем большая нагрузка ложится на компилятор с целью создания действительно эффективного кода.

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

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

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

Y = 25, если a=b

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

Необходимо:

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

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

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

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

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

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

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

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 и возвращаемся в вызывающую программу.

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;

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5120
Авторов
на СтудИзбе
444
Средний доход
с одного платного файла
Обучение Подробнее