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

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 20.01.2016
Размер файла 515,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru

Размещено на http://allbest.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Размещено на http://allbest.ru

Размещено на http://allbest.ru

Как мы можем заметить, в переменной res с адресом 020 лежит значение 000020 в хексе, в десятичной это 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):

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

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

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

Схема алгоритма решения задачи: (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

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

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

Размещено на Allbest.ru


Подобные документы

  • Изучение архитектуры персонального компьютера на примере микропроцессора фирмы Intel. Регистры общего назначения. Оперативная память; форматы данных и команд. Команд пересылки с различными способами адресации операндов. Структура программы на Ассемблере.

    курс лекций [506,4 K], добавлен 03.05.2014

  • Моделирование цифровых узлов комбинационного и последовательностного типа electronic work bench. Основы программирования на Ассемблере: арифметические команды, манипуляции над битами, строковые операции. Программирование с использованием пакета MASM.

    отчет по практике [1,9 M], добавлен 10.01.2015

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

    курсовая работа [248,0 K], добавлен 25.12.2012

  • Анализ технического задания. Разработка программы по вычислению функции на языке ассемблер для микропроцессора Кр580ВМ80. Алгоритмы программного умножения, деления, сложения, вычитания и сдвига влево многобайтных чисел. Расчет времени работы программы.

    курсовая работа [88,2 K], добавлен 19.09.2012

  • Команды, необходимые для организации разветвлений и циклических структур в программах, условных переходов, изменения признака переноса, изменения содержимого аккумулятора. Логические команды над аккумулятором и регистром. Программа на ассемблере.

    лабораторная работа [25,2 K], добавлен 03.03.2009

  • Программирование оконных Windows-приложений, средства TASM для их разработки. Углубленное программирование на ассемблере для Win32, минимальная программа. Организация высокоуровневого консольного ввода-вывода. Наборы символов и функции Wlndows APL.

    курсовая работа [51,6 K], добавлен 23.06.2015

  • Введение в API-программирование. Транслирование клавиатурных сообщений в ASCII-коды. Текст программы на 32-битном ассемблере с применением API-функций. Функция для создания диалогового окна. Определение открываемого диска, каталога и имени файла.

    курсовая работа [40,6 K], добавлен 18.05.2014

  • Описание использованного набора макросредств. Список использованных констант и структур. Основы вызова API-функций. Основы программирования на 32-битном ассемблере. Формирование объектного кода, содержащего текст исходной программы в машинном виде.

    курсовая работа [150,4 K], добавлен 18.05.2014

  • Изучение 32-х битного программирования на ассемблере. Рассмотрение ресурса как некого визуального элемента с заданными свойствами, его выгоды, примеры использования. Используемые функции. Редакторы и трансляторы ресурсов. Результат работы программы.

    курсовая работа [719,5 K], добавлен 18.05.2014

  • Структурное программирование, схема алгоритма. Программа на языке Си для int, float. Подпрограмма ввода и вывода целых чисел на Ассемблере IBM. Тестирование и отладка, инструкция пользователя. Язык программирования Си (для int и float), этапы трансляции.

    курсовая работа [1,5 M], добавлен 21.10.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.