Введение
Язык ассемблера — система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления).
Ассемблер — компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык (ассемблер), ассемблеры, как правило, специфичны конкретной архитектуре, операционной системе и варианту синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.
Ассемблирование – процесс перевода программы написанной на языке ассемблера в машинный код. Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. Также результатом ассемблирования может быть не исполнимый, а объектный модуль, содержащий разрозненные и непривязанные друг к другу части машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью программы-компоновщика («линкера») может быть скомпонован исполняемый файл.
Знание ассемблера дает глубокое понимание работы компьютера и операционной системы. Даже если вы пишете программу на языке высокого уровня, знание ассемблера поможет понять, как будет выполняться программа, как хранятся переменные, как вызываются функции. А это позволит избежать многих очень неприятных ошибок. Есть такие люди, которые знают программирование только на уровне языка. То есть знают, что надо написать, чтобы получить какой-то результат. А как оно работает, для них остается тайной, покрытой мраком. Человек, владеющий ассемблером, будет лучше программировать и на других языках.
ЦЕЛИ КУРСОВОГО ПРОЕКТА
Исследование возможностей систем программирования, закрепление навыков полученных в ходе лабораторного практикума. Разрабатываются программы на языке ассемблера, и выполняется анализ реализованных программ.
Текст индивидуального задания по варианту:
Найти скалярное произведение двух векторов.
Алгоритм решения на ЯВУ(java):
class
asm1 {
int[]
vec1
= {1, 2, 3};
int[]
vec2
= {1, 2, 3};
public
int
scalMul() {
int
res
= 0
for(int
i = 0; i < vec1.length;
i++)
res
+= vec1[i]*vec2[i];
return
res;
}
}
Схема алгоритма решения задачи: (i – индекс (сдвиг), res – результат)
начало
vec1
= {1, 2, 3}; vec2 = {4, 5, 6}; i = 0
да
нет
i
< 9
конец
res
= vec1[i]*vec2[i] i = i+3;
Текст программы на языке ассемблера:
H
Laba | Laba start 0
T
000 04003B | ldx null
T
003 100020 | stx res
T
006 008023 | m1 lda vec1,x
T
009 20802C | mul vec2,x
T
00C 180020 | add res
T
00F 0C0020 | sta res
T
012 AC10 | rmo x,a
T
014 180035 | add i
T
017 AC01 | rmo a,x
T
019 280038 | comp c9
T
01C 380006 | jlt m1
T
01F FF | hlt
|
;
T
020 | res resb 3
T
023 000001 | vec1 word 1
T
026 000002 | word 2
T
029 000003 | word 3
T
02C 000004 | vec2 word 4
T
02F 000005 | word 5
T
032 000006 | word 6
T
035 000003 | i word 3
T
038 000009 | c9 word 9
T
03B 000000 | null word 0
E
000 | end Laba