Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системное программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
40.29 Кб
Скачать

6 Команды обмена данными (работа со стеком)

Команды обмена данными осуществляют обмен данными и адресами между регистрами и ячейками памяти или портами ввода-вывода.

Команды ввода-вывода в порт

In аккумулятор, порт

Out  порт, аккумулятор

Аккумуляторы: al – byte, ax - word

Команды работы со стеком

Стек – область памяти для временного хранения данных

Обмен производится словами.

Push источник – запись значения источника в стек

Pop назначение – извлечение из стека

Pusha/Popa – групповая записи/извлечение в/из стека значения регистров

Команды работы с адресами и указателями

Adr  dw <имя переменной > - определение короткого адреса (смещение)

Adr_full dd <имя переменной> - определение полного адреса

Команды работы с операторами

Seg <имя переменной > – позволяет получить в программе сегментной части адреса переменной

Offset <имя переменной > – смещение переменной

Команды работы с адресами

Lea регистр, источник  - команда загружает смещение источника в регистр

Команды загрузки полного адреса в регистр

Lds регистр, источник – сегментная часть в регист ds, смещение – в регистр

Les, Lss

Команды преобразования данных

Xlat [адрес_таблицы_перекодировки]

Она замещает значение в регистре al, другим байтом из таблицы

перекодировки (состоит из строк байт)

Адрес байта в строке, который будет замещать = (bx) + (al)

7 Программирование типовых управляющих

структур (оператор выбора switch)

Рассмотрим, что в ассемблере заменяет обычные управляющие структуры алгоритмических языков (типа ветвлений и циклов).

if (выражение)

оператор_1;

соответствует

cmp opl,op2 вычисление выражения

jne endif

;...;последовательность команд, соответствующая оператор_1

endif: ;конец короткого условного оператора

полное ветвление

if (выражение)

оператор_1;

else

оператор_2;

соответствует

cmp opl,op2 вычисление выражения

jne else1

;... последовательность команд, соответствующая оператор_1

jmp endif

else1:

;... последовательность команд, соответствующая оператор_2

endif: ;конец полного условного оператора

оператор выбора

switch (константное_значение_"выражение") {

case константное выражение_1: операнд_1

case константное выражение_2: операнд_2

default: операнд_default}

;... формирование константное_значение_"выражение"

mov al,константное_значение_"выражение"

crop al,1 ;проверка первой альтернативы (константное выражение_1=1?)

]е handle_condition1 ; равно, идем на обработку

cmp al,2 ;проверка второй альтернативы (константное выражение_2=2?)

je handle_condition2 ; равно, идем на обработку

cmp al,3 ;проверка третьей альтернативы (константное выражение_3=3?)

je handle_condition2 ; равно, идем на обработку

;если condition <> 1 | 2 | 3 , то производим обработку по умолчанию

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

jmp end_switch ;уходим на конец switch

handle_condition1:

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

jmp end_switch ;уходим на конец switch

handle_condition2:

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

jmp end_switch ;уходим на конец switch

handle_condition3:

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

end_switch:

;продолжение программы

Цикл с предусловием

while (выражение-условие)

тело цикла

через условный переход на метку, и там зацикливается:

while_begin:

cmp al,1;вычисление логического значения "выражение-условие"

jne end_while ;если не равно то перейти на end_while

;что-то делаем - тело цикла

jmp while_begin ;переход на начало очередной итерации цикла

end_while: ;конец цикла

;... продолжение программы

В MASM имеются макросы, изображающие конструкции алгоритмических языков высокого уровня, что делает программу проще и сокращает процесс разработки: .IF, .ELSE, .ELSEIF, .ENDIF, .REPEAT, .UNTIL, .WHILE, .ENDW, .BREAK,.CONTINUE.

Например ветвление:

.IF условие

предложения блока IF

[.ELSEIF] условие

предложения блока ELSEIF

[.ELSE]

предложения блока ELSE

.ENDIF

Пример:

!if al==9

mov ах,1

.elseif ax==0

mov ax,2

.else

mov ax,3

.endif

Список сокращённых слов

IA32 - Intel Architecture 32

SIMD - (Single Instruction - Multiple Data) одиночный поток команд, множественный поток данных

MASM - (Macro Assembler) ассемблер для процессоров

ПО - программное обеспечение

Список использованных источников

1 Юров В.И. Assembler. - Санкт-Петербург: Питер, 2010. – 640стр.

2 Гагариа Л.Г. Технология разработки программного обеспечения: учебное пособие. Москва: Форум-Инфра-М, 2008. – 400стр.

3 Черемных С.В. Моделирование и анализ систем. IDEF-технологии: правтикум. – Москва: Финансы и статистика, 2006. – 345стр.

4 Ревотюк М.П. Системное прогарммирование: ЭУМК. – Минск, 2006

5 Раводин О.М., Раводин В.О. Операционные системы: Учебное пособие. – Томск: ТМЦДО, 2001. 165стр.

6 Солдатова О.П., Востокин С.В. системное программирование: Курс лекций. – Самара: СГАУ, 2002. – 127стр.