- •Тема 1.
- •Понятия вычислительного процесса и Ресурса
- •Процессы и треды
- •Независимые и взаимодействующие вычислительные процессы
- •Прерывания.
- •Файловая система ntfs (New Technology File System)
- •Интерфейс прикладного программирования
- •Реализация функций api на уровне ос
- •Реализация функций api на уровне системы программирования
- •Реализация функций api с помощью внешних библиотек
- •Платформенно-независимый интерфейс posix
- •Семафорные примитивы Дейкстры
- •Мьютексы
- •Мониторы Хоара
- •Почтовые ящики
- •Конвейеры
- •Организация очереди на массиве
- •Очереди сообщений
- •Понятие тупиковой ситуации при выполнении параллельных вычислительных процессов
- •Студенты, не защитившие лабораторные работы, к сдаче зачетной единицы не допускаются
- •Общие сведения
- •Удаление элемента из списка.
- •Теоретическая часть (в популярном для студентов стиле).
- •0030:4012 (Всё шестнадцатиричное)
- •Выделение памяти.
- •(Каждый блок представляет байт)
- •Чтобы узнать, что происходит в памяти, при размещении и извлечении значений в стеке, см. На рисунок ниже:
- •Регистр eax почти всегда используется для хранения результата процедуры.
- •Строки.
- •Заполнение данными.
- •Все команды перехода имеют один операнд: смещение для перехода.
- •Организация циклов.
- •Имеются также другие формы:
- •Xor (не или) устанавливает бит результата в 1, если бит источника отличается от бита приемника. Not инвертирует бит источника.
- •Подпрограммы.
- •Структуры.
- •Упрощённый вызов api функций в tasm.
- •А вот и операторы, которые вы можете использовать:
- •Пример: команды ror (циклический сдвиг вправо)
- •Стековые операции.
Смещение
1203
1204
1205
1206
1207
1208
1209
120A
120B
Значение
00
00
00
00
00
00
00
00
00
ESP
(стек
здесь заполнен нулями, но в действительности
это не так, как здесь). ESP
стоит в том месте, на которое он
указывает)Чтобы узнать, что происходит в памяти, при размещении и извлечении значений в стеке, см. На рисунок ниже:
mov ax, 4560h push ax
Смещение |
1203 |
1204 |
1205 |
1206 |
1207 |
1208 |
1209 |
120A |
120B |
Значение |
00 |
00 |
60 |
45 |
00 |
00 |
00 |
00 |
00 |
|
|
|
ESP |
|
|
|
|
|
|
mov cx, FFFFh push cx |
|||||||||
Смещение |
1203 |
1204 |
1205 |
1206 |
1207 |
1208 |
1209 |
120A |
120B |
Значение |
FF |
FF |
60 |
45 |
00 |
00 |
00 |
00 |
00 |
|
ESP |
|
|
|
|
|
|
|
|
pop edx |
|||||||||
Смещение |
1203 |
1204 |
1205 |
1206 |
1207 |
1208 |
1209 |
120A |
120B |
Значение |
FF |
FF |
60 |
45 |
00 |
00 |
00 |
00 |
00 |
|
|
|
|
|
ESP |
|
|
|
|
edx теперь 4560FFFFh.
Вызов подпрограмм возврат из них - CALL, RET. Команда call передает управление ближней или дальней процедуре с запоминанием в стеке адреса точки возврата. Команда ret возвращает управление из процедуры вызывающей программе, адрес возврата получает из стека. Пример:
..code..
call 0455659
..more code..
Код с адреса 455659:
add eax, 500
mul eax, edx
ret
Когда выполняется команда call, процессор передает управление на код с адреса 455659, и выполняет его до команды ret, а затем возвращает управление команде следующей за call. Код который вызывается командой call называется процедурой. Вы можете поместить код, который вы часто используете в процедуру и каждый раз когда он вам нужен вызывать его командой call.
Подробнее: команда call помещает регистр EIP (указатель на следующюю команду, которая должна быть выполнена) в стек, а команда ret извлекает его и передаёт управление этому адресу. Вы также можете определить аргументы, для вызываемой программы (процедуры). Это можно сделать через стек:
push значение_1 push значение_2 call procedure
Одно важное замечание: