Разработка программного обеспечения на языке низкого уровня - ассемблер

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ХАРЬКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ










КУРСОВАЯ РАБОТА

по дисциплине: программирование

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Тема: "Разработка программного обеспечения на языке низкого уровня - ассемблер"




Выполнил: Руководитель:

Ст. гр. ИБ-05-1 Олешко О.И.

Могила Сергей Виталиевич






Харьков 2007

Реферат


Пояснительная записка содержит в себе стр., 2 приложения.

При выполнении курсовой работы на тему "Разработка программного приложения на языке низкого уровня - ассемблер" ставилась обучения программированию на уровне процессора с использованием стандартных функций.

Объект исследования - Изучить язык ассемблер для написания примера программы на ассемблере для 16 битного приложения (DOS приложение) реализации алгоритма поднесения чисел к степени чисел над полем за основанием 2 (mod 2)

Метод исследования - изучение литературы, составления и отладка приложения

Разработанная программа служит наглядной иллюстрацией техники создания DOS приложения.

Для программной реализации проекта использовалась среда программирования MS-DOS

КЛЮЧЕВЫЕ СЛОВА: процедура, оператор, ячейка, отладчик программы, приложение, адрес , директива.


СОДЕРЖАНИЕ


ВВЕДЕНИЕ

1. Анализ, постановка задачи, этапы создания

. история развития ассемблера

. определения которые будут встречатьса в программе

. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

4.1 Установка программы и запуск программы

4.2 Работа с программой

.3 Системные требования

5. ПРИМЕР ВЫПОЛНЕНОЙ ПРОГРАММЫ

Заключение

Список использованной литературы

Приложение


Введение


После создания процессора 8086 фирма Intel разработала более совершение процессоры объединенные под названием I 80x86, такое название означает, что все команды микропроцессора, которые выполняются на младших моделях обязательно , значит все ПО, которые разработаны для процессора 8086 успешно будут работать и на последних моделях 80486 и Pentium. Ми будем рассматривать процессоры с точки зрения программиста. Не смотря на разнообразность моделей процессоров, наиболее важным с точки зрения биологии программирования, есть 8086 як базовая модель и 80386 , як перший процессор фирмы Intel, который в полном объеме реализовал принцип многозадачности.


1. Анализ, постановка задачи


Программирование на языке ассемблер

Программирование на языке ассемблер считается сложною задачею, причины его такие:

  1. Язык ассемблер любого процессора существенно сложнее любого языка высокого уровня. Чтоб воспользоваться всеми возможностями языка ассемблер, нужно, по крайней мере, найти команды микропроцессора, а их число со всеми возможными вариантами перевешает 100, их количество значительно превышает количество операторов и ключевых слов других языков высокого уровня. Проблема усложняется еще тем, что изменения в ассемблере возникают намного быстрее, чем в языках высокого уровня, это связано с появлением новых микропроцессоров и соответственно новых команд.
  2. Программист, который использует язык ассемблер должен сам следить за распределением памяти и вместо регистров, чтоб корректно разделять и управлять памятью. В языках высокого уровня это делается автоматически с помочью компилятора, но это обстоятельство имеет преимущество: можно оптимально расположить данные в памяти, обеспечить максимальную скорость выполнения и минимальную длину программы.
  3. Программы на языке ассемблер тяжелее проектировать и настраивать, нужно все время помнить, что конкретно находиться в каждом из регистров в данной ячейки памяти. Принято считать, что разработка программы только на языке ассемблер, некоторого процессора, даже если он распространенный не рекомендуется. Понятно, что любую программу можно написать только с помощью ассемблера, но для этого нужно использовать намного больше количество команд и время, которое пойдет на ее выполнение и настройку будет намного больше, чем для языка высокого уровня. Намного выгодней написать программу на языке высокого уровня, а наиболее критические части быстрого действия писать на языке ассемблер.

Постановка задачи:

Реализовать программы поднесения чисел к степени чисел над полем за основанием 2 (mod 2) на С++ на Ассемблере и сравнить время выполнения задачи в обоих кодах, и сделать вывод.

Возведение в степень может быть выполнено эффективно двойным методом, выделенным ниже.

Вход положительное целое число , полевой элемент

Выход a k.

. Пусть k = kr kr-1 ... k1 k0 будет двоичным представлением числа , где старший бит равен 1.

. Устанавливаем x ¬ a.

. Для i от r - 1 до 0 do

3.1 Установить x ¬ x2.

.2 Если ki = 1 тогда установить x ¬ a x.

. Выход x.

Этапы создания программы.

Разработка программы на языке ассемблер включает в себя.

) Создание кода программы на С++;

  1. Подготовка начального текста программы на ассемблере;
  2. Ассемблирование программы (получение объектного кода);
  3. Компоновка программы (получение выполненного файла);
  4. Отладка программы (нахождение ошибок).

Эти этапы циклически повторяются.


2. История развития асемблера. Характеристика машинного языка


Первые компьютеры "знали" один язык - машинный. Рассмотрим характеристики этого языка. Конструкциями машинного языка являются константы и команды. Команды содержат код команды и адреса данных, которые используются в командах. Структура 4-х адресной команды


Код операции1 данное2 данноеРезультатАдрес следующей команды

Большинство команд выполняется в том порядке, в котором они записаны в памяти (естественный порядок выполнения команды), поэтому задание четвертого адреса в большинстве команд не требуется. Так как переменная адресность для первых компьютеров не поддерживалась, вместо 4-х адресных стали использовать команды 3-х адресные. Структура 3-х адресной команды


Код команды1 данное2 данноеРезультат

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

Получаем 2-х адресную структуру команды.

Структура 2-х адресной команды

Код операции1 данное ( результат)2 данное

Или


Код операции1 данное2 данное (результат)

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

Заметим, что операторы языка С вида <Переменная> <Знак операции> <Выражение> как раз отражают эту ситуацию и программируются одной командой после вычисления <Выражения>. Оператор вида <Переменная> = <Переменная> <Знак операции> <Выражение> программируется несколькими командами (почему?).

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

Структура 1 адресной команды.


Код операцииАдрес данного

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

Так оператор С x++ означает использование одноадресной команды вместо двухадресной сложения (x+=1) или нескольких команд в случае x=x+1.

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

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

Структура безадресных команд

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

Для упрощения распределения памяти и запоминания кодов команд вместо машинных кодов используются их обозначения, а вместо конкретных адресов - символические адреса. Символические коды для основных операций заданы в табл. 4.1


Таблица 4.1 Мнемонические коды арифметических команд

КодОбозначение01 (+)ADD02 (-)SUB03 (*)MUL04 (/)DIVПусть данные занимают ячейки

+ 0 : X+ 1: Y+ 2 : Z+ 3 : U+ 4 : V + 5 : W


Пусть программа занимает ячейки P + 0, P + 1, …

Пусть в качестве ячеек для промежуточных данных используются R + 0, R + 1, …

Текст программы с учетом принятых обозначений задан в табл. 5.1.


Таблица 5.1. Текст программы

АдресКод1 данное2 данное РезультатКомментарийP+0ADDD+0D+1R+0X + Y ®R+0P+1SUBR+0D+2R+1X+Y-Z®R+1P+2MULR+1D+3R+1(X+Y-Z)*U®R+1P+3ADDR+!D+4R+1(X+Y-Z)*U + V®R+1P+4DIVR+1R+0D+5Результат

Пусть D= 0. В этом случае программа начинается с ячейки после D + 5, т.е. с ячейки 6. (P = 6). Промежуточные данные можно располагать, начиная с P + 5, т.е. R = 11. Преобразование кодов и адресов в машинные коды и адреса выполняется специальной программой.

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


3. Определения которые будут встречаться в программе

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

Tiny (файл *.com). модель памяти. При этом регистры CS, DS, SS содержат одинаковых значений. Это наиболее компактная модель памяти. Размер памяти не может превышавать 63Кб. Адресация происходит с помочью смещения и меток . Так как программы на ассемблере не большая, то это не есть большим ограничением . Эта модель широко используется, особливо в резидентных программах.-- длина строки ввода (5 символов)-- структура для строкового ввода (исп.в функции 0Ah прерывания 21h)

Данные:-- строка приглашения ввода данных_A / Msg_K -- ->>- ->>- ввода значения основания / степени_Res -- строка приглашения вывода числа-- последовательность перехода на новою строку_A / Str_K -- структура для хранения текстового значения основания / степени_A / Int_K -- ячейки памяти размерности СЛОВО для хранения двоичного значения основания / степени_Pow -- строка хранящая текстовое представление вычисленной степенной функции

Процедуры:

Процедура ожидания нажатия любой клавиши на клавиатуре

Процедура отображения строкового сообщения на экране (до символа '$').

В DS:DX передается адрес выводимой на экран строки.

Символ с кодом 13 (0Dh) осуществляет переход на начало строки.

Символ с кодом 10 (0Ah) осуществляет переход на новую строку.

Процедура ввода данных со клавиатуры в строковой буфер с ограничением длины ввода. В DS:DX передается адрес структуры ввода (см. определение структуры string)

Процедура проверки являются ли все символы строки десятичными цифрами. Уст. флаг CF при ошибке. Адрес строки для проверки в SI.I2

Процедура преобразования числа размерности в слово из строкового вида в двоичный. При выходе за границы размерности уст. флаг CF.

Адрес строки для проверки в SI. Результат в AX.Str

Процедура преобразования числа из двоичного вида в строковый.

Исходное число в регистровой паре BX:AX, сохранение в строку с адресом в SI.

Процедура возведения числа с основанием в SI в степень со значением в CX.

Результат сохраняется в регистровой паре BX:AX.


4. Руководство пользователя


4.1 Установка программы и запуск программы


Для работы с программой необходимо выполнить следующие шаги:

·скопировать в какой-либо каталог файл power.exe;

·запустить программу


4.2 Работа с программой


·Вводим значение полевого элемента A.

·Вводим значение степенного элемента k.

·Получаем результат.


4.3 Системные требования


Для нормальной работы данной программы требуется IBM :

·8086, 80186, 80286, 80386, 80486, Р5 (Pentium), MMX, P6 (Pentium Pro и Pentium II).

·любая ОЗУ;

·видеокарта SuperVGA;

·операционная система MS DOS.


5. Пример выполненной программы


Пример на С++:

=A^k

А=128 Temp: 0.005cek=3

2097152.


Пример на ассемблере:

A ^ k

Enter A: 128 Temp: 0.001cekk: 3: 2097152


Заключение


В процессе курсовой работы была изучена техника программирования на языке ассемблер. В качестве системы программирования была использована MS DOS. В сравнительной характеристике с кодом С++, асемблерский код показал не значительно, но меньшее время выполнения задачи. Значит, язык ассемблер может использоваться в тех случаях, когда надо повысить скорость выполнения программ.


Список использованной литературы


.Конспект лекций с курса программирования на языке ассемблер;

.Глобальная сеть Internt;

. Абель - Ассемблер Для Ibm Pc;

4. IEEE P1363 / D13 (Draft Version 13). Standard Specifications for Public Key Cryptography.


Приложение А


//---------------------------------------------------------------------------

#include <vcl.h>

#include <iostream.h>

#include <conio.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsusedmain()

{A;int k;<<"Y=A^x"<<endl;<<"Put A: ";>>A;<<"Put k: ";>>k;r=0;long int Buffer=k;(Buffer){Buffer>>=1;r++;}-;=A;Mask=1;(int i=0;i<r-1;i++)Mask<<=1;(Mask)

{*=Buffer;(k&Mask)Buffer*=A;>>=1;

}<<Buffer;();

}

//---------------------------------------------------------------------------


Приложение В


;--------------------------------------------------------------------------

.model tiny

;--------------------------------------------------------------------------

.stack 100h

;--------------------------------------------------------------------------equ 5strucdb strlen+1dbdb strlen+1 dup (?)ends

;--------------------------------------------------------------------------

.data

;--------------------------------------------------------------------------db 13,10,"Operation: A ^ k",13,10,13,10,"$"_A db " ",13,"Enter A: ","$"_K db " ",13,"Enter k: ","$"_Res db 13,10,"Result: ","$"db 13,10,"$"_A string <>_K string <>_A dw 0_K dw 0_Pow db 16 dup (0)

;--------------------------------------------------------------------------

.code

;--------------------------------------------------------------------------procah,0 ;иначе - прочитать клавишуendp

;--------------------------------------------------------------------------proc ;[IN] DS:DX - adress of string with forwarding '$'

mov ah,9 ; Функция DOS 09h

inth ; вывести строку на экран

retnendp

;--------------------------------------------------------------------------proc ;[IN] DS:DX - adress of string structure ah,0Ah ;осуществляет переход на новую строку

inthendp

;--------------------------------------------------------------------------I2 proc ;[IN] SI - string type, [OUT] AX - value; CF - if falsech,chcl,[si].lendi,[si].valax,axbx,10

@@1:bxdx,0@@2dl,[di]dl,0Fhax,dx@@2di@@1

@@2:I2 endp

;--------------------------------------------------------------------------proc ;[IN] SI - string type; [OUT] CF - if falsech,chcl,[si].lendi,[si].val

@@1:byte ptr [di],'9'@@2byte ptr [di],'0'@@2di@@1

@@2:endp

;--------------------------------------------------------------------------Str proc ;[IN] BX:AX - number; SI - string to save ($)si

@@1:axdx,dxax,bxcx,10000cxbx,ax ;<- 1 chastnoe v bxaxcxaxax,dx cx,4 ;<- 4 cyfry@@Paxax,0@@1bx,0@@1

@@2:sibyte ptr [si],'0'@@2disicx,sicx,dicx,1@@4

@@3:al,[si]ah,[di][si],ah[di],aldisi@@3

@@4:sisibyte ptr [si],'$'

@@P:dx,dxdi,10didl,30h[si],dlsi@@PStr endp

;--------------------------------------------------------------------------proc ;[IN] SI - base; CX - power [OUT] BX:AX - numberax,axdx,dxsi,0@@exit

;bx,cxcx,15

@@0:bx,1@@1@@0

@@1:ax,si ;x=a

@@2:ax ;x=x*xbx,1 ;ki == 1 ?@@3 ;no -> jumpsi ;x=a*x

@@3:@@2

;

@@exit:bx,dxendp

;--------------------------------------------------------------------------:ax,@datads,axdx,MsgDispMsg

@@1:dx,Msg_ADispMsgdx,Str_AReadStrsi,Str_AIsDigit@@1Str2I2@@1Int_A,axdx,CrLfDispMsg

@@2:dx,Msg_KDispMsgdx,Str_KReadStrsi,Str_KIsDigit@@2Str2I2Int_K,ax@@2dx,CrLfDispMsg

@@3:dx,Msg_ResDispMsg

;si,Int_Acx,Int_K

;Power

;si,Str_PowInt2Strdx,Str_Pow DispMsg

call KeyPress

mov ax,4C00h ;конец программы и вывод данных из буфера

inthbegin


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ХАРЬКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ КУРСОВАЯ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ