pushq %rax
leaq 0x2000(%rax), %rax
movl 28(%rax), %eax
movq %rax, %rbx
andq $7, %rbx
shrq $3, %rax
test %rbx, %rbx
jz .pte
incq %rax
.pte:
pushq %rdx
movq %rax, %rdx
movq %rax, %rcx
andq $511, %rdx
shrq $9, %rcx
.pde:
pushq %rcx
movq $0x200003, %rbx
movq $0x1C2008, %rsi
movq $0x1C5000, %rdi
test %rcx, %rcx
jz .pde_loop_end
.pde_loop:
movq %rdi, %rax
addq $3, %rax
movq %rax, (%rsi)
addq $8, %rsi
pushq %rcx
movq $512, %rcx
.pte_loop:
movq %rbx, (%rdi)
addq $0x1000, %rbx
addq $8, %rdi
loop .pte_loop
popq %rcx
loop .pde_loop
.pde_loop_end:
test %rdx, %rdx
jz .no_last_page
movq %rdi, %rax
addq $3, %rax
movq %rax, (%rsi)
addq $8, %rsi
movq %rdx, %rcx
.last_pte_loop:
movq %rbx, (%rdi)
addq $0x1000, %rbx
addq $8, %rdi
loop .last_pte_loop
.no_last_page:
popq %rcx
shlq $9, %rcx
orq %rdx, %rcx
popq %rdx
popq %rax
2019年8月8日 星期四
自製64位元作業系統20──核心分頁Part 2
之前,我們製作了一個處理核心分頁的程式,不過我們以2MiB為單位分配,實在是太浪費了,我們準備要把這個問題解決,利用4KiB為單位分配。