diff options
Diffstat (limited to 'asm/copy_page_physical.asm')
| -rw-r--r-- | asm/copy_page_physical.asm | 33 |
1 files changed, 0 insertions, 33 deletions
diff --git a/asm/copy_page_physical.asm b/asm/copy_page_physical.asm deleted file mode 100644 index f8d3af1..0000000 --- a/asm/copy_page_physical.asm +++ /dev/null @@ -1,33 +0,0 @@ -[bits 32] - -global copy_page_physical -copy_page_physical: - push ebx ; According to __cdecl, we must preserve the contents of EBX. - pushf ; push EFLAGS, so we can pop it and reenable interrupts - ; later, if they were enabled anyway. - cli ; Disable interrupts, so we aren't interrupted. - ; Load these in BEFORE we disable paging! - mov ebx, [esp+12] ; Source address - mov ecx, [esp+16] ; Destination address - - mov edx, cr0 ; Get the control register... - and edx, 0x7fffffff ; and... - mov cr0, edx ; Disable paging. - - mov edx, 1024 ; 1024*4bytes = 4096 bytes to copy - -.loop: - mov eax, [ebx] ; Get the word at the source address - mov [ecx], eax ; Store it at the dest address - add ebx, 4 ; Source address += sizeof(word) - add ecx, 4 ; Dest address += sizeof(word) - dec edx ; One less word to do - jnz .loop - - mov edx, cr0 ; Get the control register again - or edx, 0x80000000 ; and... - mov cr0, edx ; Enable paging. - - popf ; Pop EFLAGS back. - pop ebx ; Get the original value of EBX back. - ret |
