summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Mannens <jakem_5@hotmail.com>2020-08-02 08:27:25 +1000
committerJake Mannens <jakem_5@hotmail.com>2020-08-02 08:27:25 +1000
commit5d29745034c854886fb5988fca65cc3757f69a3e (patch)
tree445acaa25ee13b0f2e5dbba1acee6c39aa8c4d0f
parent4d6fe1c317f0a541922f4cf945365fd31e608e10 (diff)
Modified assembly routines to use x86's advanced addressing modes.HEADmaster
-rw-r--r--kernel/asm.s7
-rw-r--r--kernel/boot.s6
-rw-r--r--kernel/traps.s13
3 files changed, 7 insertions, 19 deletions
diff --git a/kernel/asm.s b/kernel/asm.s
index 4e1e376..32153e4 100644
--- a/kernel/asm.s
+++ b/kernel/asm.s
@@ -70,8 +70,7 @@ set_tss:
push ebx
mov eax, [ebp+12]
mov ebx, [ebp+8]
- shl ebx, 3
- add ebx, gdt+40
+ lea ebx, [ebx*8+gdt+40]
mov [ebx+2], ax
shr eax, 16
mov [ebx+4], al
@@ -92,9 +91,7 @@ clear_tss:
mov ebp, esp
push ebx
mov ebx, [ebp+8]
- shl ebx, 3
- add ebx, gdt+40
- mov byte [ebx+5], 0
+ mov byte [ebx*8+gdt+40+5], 0
pop ebx
pop ebp
ret
diff --git a/kernel/boot.s b/kernel/boot.s
index 4db2cf7..e844c5b 100644
--- a/kernel/boot.s
+++ b/kernel/boot.s
@@ -186,8 +186,7 @@ register_isr:
push ebp
mov ebp, esp
mov edx, [ebp+8]
- shl edx, 3
- add edx, idt
+ lea edx, [edx*8+idt]
mov eax, [ebp+16]
mov [edx], ax
shr eax, 16
@@ -206,8 +205,7 @@ register_trap:
push ebp
mov ebp, esp
mov edx, [ebp+8]
- shl edx, 3
- add edx, idt
+ lea edx, [edx*8+idt]
mov eax, [ebp+16]
mov [edx], ax
shr eax, 16
diff --git a/kernel/traps.s b/kernel/traps.s
index ca083dd..475495b 100644
--- a/kernel/traps.s
+++ b/kernel/traps.s
@@ -117,10 +117,7 @@ traps_init:
mov ecx, 0
mov edx, idt
.loop:
- mov eax, ecx
- shl eax, 2
- add eax, traps
- mov eax, [eax]
+ mov eax, [ecx*4+traps]
mov [edx], ax
shr eax, 16
mov [edx+6], ax
@@ -279,9 +276,7 @@ syscall_handler:
push ecx
push ebx
and eax, 0xFF
- shl eax, 2
- add eax, call_table
- call [eax]
+ call [eax*4+call_table]
add esp, 12
; preserve the syscall's return value
mov [esp+30], eax
@@ -326,9 +321,7 @@ check_signals:
inc ecx
mov ebx, ecx
; calculate offset to the handler function
- shl ecx, 2
- add ecx, eax
- add ecx, ts_sig_handlers
+ lea ecx, [ecx*4+eax+ts_sig_handlers]
cmp dword [ecx], 0
jne .custom_handler
; call the default handler