Разработка и отладка подпрограмм на языке Ассемблера
Краткое сожержание материала:
Размещено на
Введение
Язык ассеммблера (англ. assemblylanguage) -- машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд[1]; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ[2].
Автокод -- язык программирования, предложения которого по своей структуре в основном подобны командам и обрабатываемым данным конкретного машинного языка[2].
Язык ассемблера -- система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления)[3].
Перевод программы на языке ассемблера в исполнимый машинный код (вычисление выражений, раскрытие макрокоманд, замена мнемоник собственно машинными кодами и символьных адресов на абсолютные или относительные адреса) производится ассемблером -- программой-транслятором, которая и дала языку ассемблера его название.
Команды языка ассемблера один к одному соответствуют командам процессора. Фактически, они и представляют собой более удобную для человека символьную форму записи -- мнемокоды -- команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора[4].
Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на вычисляемые ассемблером или компоновщиком абсолютные или относительные адреса, а также так называемые директивы (команды ассемблера, не переводимые в машинные команды процессора, а выполняемые самим ассемблером).
Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макрокоманды с параметрами.
Каждая модель (или семейство) процессоров имеет свой набор -- систему -- команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы языков ассемблера -- Intel-синтаксис и AT&T-синтаксис.
Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Форт, Лисп, Эль-76). Фактически, в таких компьютерах они выполняют роль языков ассемблера.
1. Системный анализ
Целью курсового проекта является закрепление полученных знаний и профессиональных навыков разработки и отладки подпрограмм на языке Ассемблера. Курсовой проект выполняется в соответствии с этапами разработки программного обеспечения: анализ и постановка задачи для решения на ЭВМ, проектирование, кодирование, отладка и тестирование разработанной программы. Проектирование ведется в соответствии с методологией структурного программирования.
Требуется рассчитать выражение (1):
(1)
Необходимо разработать программы для её вычисления на языках Си, Ассемблер УМ и Ассемблер IBMPC. С клавиатуры вводятся 2 переменные и значения массива, после выполняется расчет 2 констант 2c и (a*a+1) данной функции и расчет z. Далее выполняется вывод результата на экран монитора. Программа состоит из 4-х функций: функция ввода переменных, две функция расчета констант, функция вывода результата.
2. Структурное программирование. Схема алгоритма. Программа на языке Си для int, float
Программа на языке программирования Си для int
#include"stdafx.h"
#include<iostream>
#include<conio.h>
usingnamespacestd;
constint N = 4;
voidraschet(int a, int c, int d[])
{int g, k, l, z;
int Y = 0;
g = 2 * c;
k = a*a + 1;
cout<<"g = "<<"2 * "<< c <<" = "<< g <<endl;
cout<<"k = "<< a*a <<" + 1"<<" = "<< k <<endl;
for (inti = 1; i<= N; i++)
{l = d[i] / 4;
cout<<i<<") "<<"l["<< d[i] <<"] = "<< d[i] <<" / 4 = "<< l <<endl;
z = (g - l) / k;
cout<<" z["<< d[i] <<"] = "<< z <<endl;
Y = Y + z;
cout<<endl;}
cout<<"Y = "<< Y <<endl;}
int main()
{setlocale(LC_ALL, "Russian");
int a, c, d[N];
cout<<"Введите a = ";
cin>> a;
cout<<"Введитес = ";
cin>> c;
cout<<"Введите элементы массива"<<endl;
for (inti = 1; i<= N; i++)
{cout<<"d["<<i<<"] = ";
cin>> d[i];}
raschet(a, c, d);
_getch();
return 0;}
Программа на языке программирования Си для float
#include"stdafx.h"
#include<iostream>
#include<conio.h>
usingnamespacestd;
constint N = 4;
voidraschet(floata, floatc, floatd[])
{float g, k, l, z;
float Y = 0;
g = 2 * c;
k = a*a + 1;
cout<<"g = "<<"2 * "<<c<<" = "<< g <<endl;
cout<<"k = "<<a*a<<" + 1"<<" = "<< k <<endl;
for (inti = 1; i<= N; i++)
{l = d[i] / 4;
cout<<i<<") "<<"l["<<d[i] <<"] = "<<d[i] <<" / 4 = "<< l <<endl;
z = (g - l) / k;
cout<<" z["<<d[i] <<"] = "<< z <<endl;
Y = Y + z;
cout<<endl;}
cout<<"Y = "<< Y <<endl;}
int main()
{setlocale(LC_ALL, "Russian");
float a, c, d[N];
cout<<"Введите a = ";
cin>> a;
cout<<"Введитес = ";
cin>> c;
cout<<"Введите элементы массива"<<endl;
for (inti = 1; i<= N; i++)
{cout<<"d["<<i<<"] = ";
cin>> d[i];}
raschet(a, c, d);
_getch();
return 0;}
Блок схема
Рис. 1
3. Программирование
3.1 Программа на Ассемблере УМ
Ex77 start 0
lda c
mul c2
sta p
ldx c0
lda c0
usl comp c12
jgt art
jeq art
jsubinc
rmox,a;i:=i+1
add c3
rmoa,x
jusl
art lda y
hlt
c word 20
e word 2
c0 word 0
c1 word 1
c3 word 3
c4 word 4
c12 word 12
c2 word 2
y word 0
d word 20
word 12
word 4
word -16
oresb 3
kresb 3
presb 3
inclda e
mul e
add c1
sta k
ldad,x
div c4
sta o
lda p
sub o
div k
add y
sta y
rsub
end Ex77
Блок схема
inc
Рис. 2
3.2 Подпрограмма ввода и вывода целых чисел на Ассемблере IBM
Подпрограмма ввода
Блок схема
Рис. 3
Подпрограмма на языке программирования Ассемблер IBMPC
InputIntproc
mov ah, 0ah
xor di, di
Ассемблер для IBM PC
Изучение команд для обработки строк, приемов, используемых в работе со строками, приемы их использования. Команды префикса повторения. Приемы программ...
Программирование с использованием подпрограмм на языке С
Разработка прикладного программного обеспечения для решения задачи для персонального компьютера. Структура подпрограммы, механизмы передачи параметров...
Программирование с использованием подпрограмм на языке С
Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрогра...
Цифровой фильтр нижних частот
Функционирование рекурсивного цифрового фильтра нижних частот. Определение его быстродействия, импульсной и переходной характеристик. Составление и оп...
Компилятор языка Си для микроЭВМ
В книге американского автора приведены полный исходный текст компилятора языка Смолл-Си (подмножество языка Си), написанный на языке Смолл-Си, а такж...