- •Обозначение документа
- •Содержание
- •1 Виды тестирования. Порядок разработки тестов.
- •2 Обслуживание жестких дисков
- •3 Компиляторы и интерпретаторы
- •4 Регистры общего назначения
- •5 Косвенная базовая индексная адресация со смещением
- •6 Команды обмена данными (работа со стеком)
- •7 Программирование типовых управляющих
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стр.
