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

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

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

2019-08-04 140
Преимущества написания программы на ассемблере 0.00 из 5.00 0 оценок
Заказать работу

Введение

 

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

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

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

 

 


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

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

 

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

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

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

 

Типы данных

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

Y = 25, если a=b

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

 

Необходимо:

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

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

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

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

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

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

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

 

 


Арифметика

 

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

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

mov ah, 09h

mov dx, offset str1

int 21h

 

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

 

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

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

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

 

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

 

Так как для типа переменных мы использовали 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.

 


Строки

 

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

 

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

 

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

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.

Введение

 

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

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

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

 

 


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

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

 

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

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

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

 

Типы данных

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

Y = 25, если a=b

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

 

Необходимо:

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

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

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

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

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

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

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

 

 


Арифметика

 

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

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

mov ah, 09h

mov dx, offset str1

int 21h

 


Поделиться с друзьями:

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.101 с.