52 lines
1000 B
ArmAsm
52 lines
1000 B
ArmAsm
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
|