Программирование на ассемблере

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    410 Кб
  • Опубликовано:
    2016-01-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программирование на ассемблере














Найти скалярное произведение двух векторов

Язык ассемблера - система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления).

Ассемблер - компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

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

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

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

ЦЕЛИ КУРСОВОГО ПРОЕКТА

Исследование возможностей систем программирования, закрепление навыков полученных в ходе лабораторного практикума. Разрабатываются программы на языке ассемблера, и выполняется анализ реализованных программ.

Текст индивидуального задания по варианту:

Найти скалярное произведение двух векторов.

Алгоритм решения на ЯВУ(java):


Схема алгоритма решения задачи: (i - индекс (сдвиг), res - результат)


Текст программы на языке ассемблера

 









Дамп памяти, для проверки результата:


Как мы можем заметить, в переменной res с адресом 020 лежит значение 000020 в хексе, в десятичной это 32, проверим: 1*4+2*5+3*6 = 4+10+18 = 32, следовательно, программа работает верно.

Выводы по работе

Текст индивидуального задания по варианту:

Определить n-й член ряда Фибоначчи:

[1]=1, F[2]=1, F[n]=F[n-1]+F[n-2].

Алгоритм решения на ЯВУ(java):


Спецификации всех разработанных методов:

Метод fe (Fibonacci Element):

Входные параметры: адрес ТАЗ

Алгоритм: прибавляем к значению первой переменной ТАЗ значение второй, сохраняем во временную переменную, затем меняем местами значения переменных и сохраняем нашу временную переменную во вторую переменную ТАЗ.

Выходные данные: отсутствуют (т.к. метод работает с адресами)

Схема алгоритма решения задачи: (n - член ряда который надо найти, fe - подпрограмма, f - первый член ряда, s - второй член ряда, res - результат)


Текст программы на языке ассемблера

1)      2)










 



Дамп памяти, для проверки результата:










Как мы можем заметить, в переменной res с адресом 03D лежит значение 00000D в хексе, в десятичной это 13, что является 7-мым членом ряда Фибоначчи, в данном коде у нас n = 7, следовательно, программа работает верно.

Выводы по работе

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

Найти скалярное произведение двух векторов

Алгоритм решения на ЯВУ(java):


Схема алгоритма решения задачи: (i - индекс (сдвиг), res - результат)

Текст программы на языке ассемблера









Результат перед завершением сохраняется в регистре ax:

 

Как мы можем заметить, в регистре ax лежит значение 0020 в хексе, в десятичной это 32, проверим: 1*4+2*5+3*6 = 4+10+18 = 32, следовательно, программа работает верно.

Выводы по работе:

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

Текст индивидуального задания по варианту:

Определить n-й член ряда Фибоначчи: F[1]=1, F[2]=1, F[n]=F[n-1]+F[n-2].

Алгоритм решения на ЯВУ(java):


Спецификации всех разработанных методов:

Метод fe (Fibonacci Element):

Входные данные: задаются неявно (находятся в регистрах)

Алгоритм: прибавляем к значению регистра ax значение регистра dx ,сохраняем в регистр bx , затем в регистр ax ложем значение регистра dx, а в регистр dx ложем значение регистра bx.

Выходные данные: отсутствуют (т.к. метод работает с регистрами)

Схема алгоритма решения задачи: (ax, cx, dx - регистры)















Результат перед завершением сохраняется в регистре dx:

 

Как мы можем заметить, в регистре dx лежит значение 000D в хексе, в десятичной это 13, что является 7-мым членом ряда Фибоначчи, в данном коде у нас n = 7, следовательно, программа работает верно.

Выводы по работе

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

ОБЩИЙ ВЫВОД ПО ПРОЕКТУ

программирование ассемблер алгоритм

В ходе выполнения проекта, мы работали с двумя разновидностями языков ассемблера: учебный язык ассемблера, разработанный на факультете информационных технологий Владимирского Государственного Университета имени Александра Григорьевича и Николая Григорьевича Столетовых и языком ассемблера на базе архитектуры Intel 8086, так же известный как asm x86. Сначала мы пользовались учебным языком ассемблера, где многие аспекты языка были значительно упрощены либо переделаны, но, тем не менее, основная концепция языка сохранилась. В ходе проекта были изучены некоторые аспекты языков ассемблера, и ЭВМ в целом. Ассемблер является символическим аналогом машинного языка. По этой причине программа, написанная на ассемблере, должна отражать все особенности архитектуры микропроцессора: организацию памяти, способы адресации операндов, правила использования регистров и т. д. Из-за необходимости учета подобных особенностей ассемблер уникален для каждого типа микропроцессоров.

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

ЛИТЕРАТУРА

1.  Программирование на языке высокого уровня. Часть II: практикум/ Сост. О. В. Шестопал, О. В. Сташкова. - Тирасполь, 2010. - 83 с.

2.  Абрамов С. А. Начала информатики, - М.: Наука, 2005

3.      Гусева А. И. Учимся информатике: задачи и методы их решения, - М.: Диалог МИФИ, 2008

.        Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.: Энтроп, 2008. - 352 с.

.        Бьярн Страуструп. Язык программирования в двух частях. Пер. с англ. Киев:"ДиаСофт",2010. -296 с.,

Похожие работы на - Программирование на ассемблере

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!