Системное программирование

Виды ПО:

- Системное ПО – совокупность программ и программных комплексов для обеспечения работы компьютера и сетей ЭВМ;

- Прикладное ПО – предназначено для решения функциональных задач, выполняет обработку информации различных предметных областей;

- Специальное ПО: программы управления БД,

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

Основные задачи системного программирования:

Разработка

1) систем ассемблирования

2) загрузчиков и программ связывания

3) макропроцессоров

4) компиляторов

5) операционных систем

6) драйверов

Назначение системного ПО.

Предназначено для:

- создания операционной срезы

- автоматизации разработки новых программ

- обеспечения надежной и эффективной работы компьютера

- проведения диагностики компьютера

- выполнения вспомогательных технологических процессов

Классификация системного ПО

- Базовое ПО — минимальный набор программных средств, обеспечивающих работу компьютера;- Сервисное ПО — программы и программные комплексы, которые расширяют возможности базового программного обеспечения и организуют более удобную среду работы пользователя.

Директива SEGMENT и ее атрибуты

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

a) BYTE – выравнивание не выполняется;

b) WORD – сегмент начинается по адресу, кратному двум;

c) DWORD – сегмент начинается по адресу, кратному четырем;

d) PARA – сегмент начинается по адресу, кратному 16;

e) PAGE – сегмент начинается по адресу, кратному 256;

2. Атрибут комбинирования сегментов (комбинаторный тип) сообщает компоновщику, как нужно комбинировать сегменты различных модулей, имеющие одно и то же имя:

a) PRIVATE – сегмент не будет объединяться с другими сегментами с тем же именем вне данного модуля;

b) PUBLIC – заставляет компоновщик соединить все сегменты с одинаковыми именами;

3. Атрибут класса сегмента – это заключенная в кавычки строка, помогающая компоновщику определить соответствующий порядок следования сегментов при собирании программы из сегментов нескольких модулей.

4. Атрибут размера сегмента:

a) USE16 – это означает, что сегмент допускает 16-разрядную адресацию;

b) USE32 – сегмент будет 32-разрядным. Необходимо как-то компенсировать невозможность

напрямую управлять размещением и комбинированием сегментов.

Способы адресации языка assembler

Прямая адресацияmov ax,es:0001mov ax, es:word_var

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

Прямая адресация может быть двух типов:

Относительная прямая адресация и абсолютная прямая адресация.

- Косвенная адресация

mov ax, [bx]

При такой адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме sp/esp и bp/ebp.

- Адресация по базе со сдвигом

Комбинация двух предыдущих методов адресации

mov ax, [bx+2]

mov ax, [bp]+2

- Адресация по базе с индексированием — в этом методе адресации смещение операнда в памяти вычисляется как сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано.Все следующие команды — это разные формы записи одного и того же действия:mov ax,[bx+si+2]mov ax,[bx][si]+2mov ax,[bx+2][si]

Схема работы компилятора

см. тетрадь «Структура компилятора»

Схема разработки программы на языке assembler

Понятие и структура макроопределителя

Макроопределение (макрос) – участок программы, которому присвоено имя и который ассемблируется всякий раз, когда ассемблер встречает это имя в тексте программы.

Макроопределение задается с помощью директивы MACRO…ENDM.

Структура макроопределения:

[ИМЯ] macro [список_формальных_параметров]

———————-

тело_макроопределения

———————-

Endm

10) Понятие и алгоритм цепочечных команд (не полный)

Цепочечная команда позволяет проводить действия над блоками памяти, представляющими собой последовательности элементов следующего размера:

8 бит — байт;

16 бит — слово;

бита — двойное слово.

11) Команды циклического сдвига

 Циклический сдвиг представляет сбой  операцию  сдвига, при которой выдвинутый бит занимает освободившийся разряд. Существуют следующие команды циклического сдвига:

     ROR  ;Циклический сдвиг вправо               ROL  ;Циклический сдвиг влево               RCR  ;Циклический сдвиг вправо с переносом               RCL  ;Циклический сдвиг влево с переносом

     Следующая    последовательность    команд    иллюстрирует    операцию циклического сдвига ROR:

     MOV  CL,03          ;    BX:               MOV  BX,10110111B   ; 10110111               ROR  BX,1           ; 11011011   ;Сдвиг вправо на 1               ROR  BX,CL          ; 01111011   ;Сдвиг вправо на 3

     Первая команда ROR при выполнении циклического сдвига переносит правый единичный бит регистра BX в освободившуюся левую позицию. Вторая команда ROR переносит таким образом три правых бита.

12) Управляющие структуры Else и Case

Пример_1:if (((х > у) && (z

можно представить на ассемблере как:

; проверка условия

mov ax,A

cmp ах,В

jne then ; если а != b — условие выполнено

mov ах,X

cmp ax,Y

jng endif ; если х

mov ax,Z

cmp ах,Т

jnl endif ; если z >= t — условие не выполнено

then: ; условие выполняется

mov ax,D

mov С,ах

endif:

Пример_2:

Пусть переменная I принимает значения от 0 до 2, и в зависимости от значения надо выполнить процедуры case0, case1 и case2:

mov ax,I

cmp ax,0 ; проверка на 0

jne not0

call case0

jmp endcase

not0: cmp ax,1 ; проверка на 1

jne not1

call case1

jmp endcase

not1: cmp ax,2 ; проверка на 2

jne not2

call case2

not2:

endcase:

13) Структура процедуры

имя-процедуры PROC [параметры] ; начало процедуры

RET ; команда возврата в точку вызова процедуры

имя-процедуры ENDP ; конец процедуры