Конспект лекций по предмету "Системное программирование"


Структура программы

Программа на языке ассемблера состоит из строк, имеющих следующий вид:
Метка команда/директива операнды; комментарий.
Все поля необязательны. Метка может быть любой комбинацией букв английского алфавита, цифр и символов: _, $, @, ?, но цифра не может быть первым символом метки, а символы $ и ? иногда имеют специальное значение и не рекомендуются к использованию.
Большие и маленькие буква по умолчанию не распознаются, но различие можно включить при помощи опций при вызове ассемблера. Во втором поле, поле команды, может располагаться команда процессора, которая транслируется в исполняемый код, или директива ассемблера, которая не приводит к генерации кода, а управляет работой самого ассемблера. В поле операндов располагаются требуемые командой или директивой операнды. В поле комментария, начало которого отмечается символом ; (точка с запятой), можно написать все что угодно.
Если метка располагается перед командой процессора, сразу после нее всегда ставится оператор : (двоеточие), который указывает ассемблеру, что надо создать переменную с этим именем, содержащую адрес текущей команды:
mov cx, 10; занести в cx число элементов массива mas
xor si, si; обнулить индексный регистр si
xor ax, ax; обнулить регистр ax, в котором будет сумма элементов массива слов mas
m1: add ax, mas[si]; сложить содержимое ax и очередной элемент массива
inc si; увеличить индекс элемента массива на 2,
inc si; так как элемент массива - слово
loop m1; вернуться на начало цикла, если cx>0.
Если метка стоит перед директивой ассемблера, то двоеточие не ставится, так как метка в этом случае является операндом директивы. Рассмотрим директивы, работающие напрямую с метками и их значениями, - LABEL, EQU и =.
метка LABEL тип.
Директива LABEL определяет метку и задает ее тип: BYTE (байт), WORD (слово), DWORD (двойное слово), FWORD (6 байт), QWORD (учетверенное слово), TBYTE (10 байт), NEAR (ближняя метка), FAR (дальняя метка). Метка получает значение, равное следующим за ней данным (для всех типов, кроме двух последних) или равное адресу следующей команды (для типов NEAR и FAR). С помощью директивы LABEL удобно организовывать доступ к одним и тем же данным, как к байтам, так и словам, определив перед ними две метки с разными типами. Метки типа NEAR или FAR можно использовать для вызова процедуры:
call метка.
Директива EQU присваивает метке значение, которое определяется как результат целочисленного выражения в правой части. Результатом этого выражения может быть целое число, адрес или любая строка символов:
one equ 1
mes1 equ ‘Ошибка $’
var2 equ 4[si]
cmp ax, one ; cmp ax, 1
db mes1 ; db ‘Ошибка $’
mov ax, var2 ; mov ax, 4[si].
Директива EQU используется для введения параметров, общих для всей программы.
Директива = эквивалентна EQU, но определяемая ею метка может принимать только целочисленные значения, кроме того, указанная этой директивой метка может быть переопределена. Существует предопределенная метка $, которая соответствует текущему адресу. Данную метку удобно использовать для определения длины строки текста или числа элементов в массиве:
.data
path1 db ‘D:students641*.*’
length equ $ - path1; метка length будет иметь значение, равное числу символов в переменной path1.
Псевдокоманды определения данных
Псевдокоманда – это директива ассемблера, которая приводит к включению данных или кода в программу, хотя никакой команде процессора не соответствует. Псевдокоманды определения переменных указывают ассемблеру, что соответствующем месте программы располагается переменная, устанавливают ее тип (байт, слово, вещественное число и так далее) , задают начальное значение и ставят в соответствие переменной метку, которая будет использоваться для обращения к этим данным. Псевдокоманды определения данных записываются в общем виде следующим образом:
имя_переменной d* значение,
где d* - одна из псевдокоманд:
DB – определить байт;
DW – определить слово (2 байта);
DD – определить двойное слово (4 байта);
DF – определить 6 байт (адрес в формате 16-битный селектор; 32-битное смещение);
DQ – определить учетверенное слово (8 байта);
DT – определить 10 байт (80 –битные типы данных, используемые FPU).
Пример использования псевдокоманд определения переменных:
txt_str db ‘Hello, world!’
number dw ?
table db 10 dup(0)
float_n dd 3.1415.
Первая строка содержит 13 байт ASCII- кодов строки символов Hello, world! и переменная txt_str указывает на первую букву в этой строке. Во второй строке знак ? указывает на то, что переменная является неинициализированной и ее значение на момент запуска может оказаться любым. Для заполнения участка памяти повторяющимися данными используется оператор DUP, имеющий формат счетчик dup(значение). В третьей строке примера создается массив из 10 слов, инициализированных нулевым значением. Переменная table указывает на первый элемент массива. В качестве аргумента в операторе DUP могут выступать несколько значений, разделенных запятыми, и даже дополнительные вложенные операторы DUP.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем конспект самостоятельно:
! Как написать конспект Как правильно подойти к написанию чтобы быстро и информативно все зафиксировать.