Кольца защиты процессора
nasm -f elf hello.asm
ld -m elf_i386 hello.o -o hello
./hello
%include "stud_io.inc"
global _start
section .data
string resb 20
count resw 256
x resd 1
fibon dw 1, 1, 2, 3, 5, 8, 13, 21
msg db "Hello World"
section .bss
set512 resd 16
section .text
_start: mov eax, 0
mov eax, ebx
mov eax, [count] ; значение count в eax
mov eax, count ; адрес count в eax
mov eax, [ebx] ; из ячейки памяти с адресом ebx
; Арифметика
add edx, 12
sub [x], ecx
inc eax
dec eax
; Безусловные переходы
jmp some_label
jmp eax
jmp [eax]
jmp short some_label
; Условные переходы
some_label: cmp eax, 5
je equal_label
jl less_label
jng not_greater_label
jnz some_label
; Циклы
mov ecx, 100
mov esi, array
mov eax, 0
lp: add eax, [esi]
add esi, 4
loop lp
; Побитовые xor, or, and
xor eax, eax
; Операции сдвига shr (shift right), shl (shift left)
shr edx, 5
Стек используется при вызовах подпрограмм для хранения адресов возврата, для передачи фактических параметров в подпрограммы и для хранения локальных переменных
push eax
pop eax
pushad ; push all doublewords
popad ; для всех регистров: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
pushfd ; для регистра флагов EFLAGS
popfd
Подпрограммы
; fill memory (edi=address, ecx=length, al=value)
fill_memory:
jecxz fm_q
fm_lp: mov [edi], al
inc edi
loop fm_lp
fm_q: ret
; Использование
mov edi, my_array
mov ecx, 256
mov al, '@'
call fill_memory
push ebp
mov ebp, esp
mov esp, 16 ; 16 - объем памяти под локальные переменные
; после подпрограммы
mov esp, ebp
pop ebp
ret
Макросы
%macro pcall1 2 ; 2 кол-во параметров
push %2
call %1
add esp, 4
%endmacro
; вызов
pcall1 proc, eax
%define arg1 ebp+8
; вызов
mov eax, [arg1]
%ifdef DEBUG_PRINT
PRINT "Entering"
%endif
Макросимвол можно определить как ключ коммандной строки
nasm -f elf -dDEBUG_PRINT hello.asm
Операционная система
- аппарат прерываний
- защита памяти
- привилегированный и ограниченный режим работы центрального процессора
- таймер
int 80h ; Прерывание
Последовательность:
- Запрос прерывания
- Процессор доводит выполнение текущ программы до точки в кот можно прервать. На шине выставляет подтверждене прерывания. Др. прерывания блокируются
- Устройство передает число идентифицирующие данное устройство - номер прерывания
- Процессор сохраняет в стеке активной задачи счетчик комманд и регистр флагов
- Устанавливается привилег. режим центр. процессора. Управление передается на точку входа обработчика прерываний (процедуры операционной системы). Адрес процедуры в спец. области памяти
No comments:
Post a Comment