osdev/src/arch/task/process.s

52 lines
1000 B
ArmAsm
Raw Normal View History

global copy_page_physical
copy_page_physical:
push ebp
pushf
push eax
push ebx
push ecx
push edx
cli ; disabling interruptions
; pobieramy adresy stron zanim wyłączymy stronnicowanie
mov ebx, [esp+12]
mov ecx, [esp+16]
; wyłączamy stronnicowanie
mov edx, cr0
and edx, 0x7fffffff
mov cr0, edx
; wyłączono stronnicowanie
mov edx, 1024
.loop: ; pętla kopiująca dane strony
mov eax, [ebx] ; kopiujemy dane
mov [ecx], eax
add ebx, 4 ; przesuwamy wskaźniki
add ecx, 4
dec edx ; zmniejszamy licznik bajtów do przekopiowania
cmp edx, 0 ; tu w kodzie tego nie było TODO potestuj
jnz .loop
; przywracamy stronnicowanie
mov edx, cr0
or edx, 0x80000000
mov cr0, edx
; przywrócono stronnicowanie
sti ; enabling interruptions
pop edx
pop ecx
pop ebx
pop eax
popf
pop ebp
ret