Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
cld
; Save the registers
push rax
push rcx
push rdx
push rbx
push rbp
push rsi
push rdi
; Switch to the kernel data segment
mov ax, 0x10
mov ds, ax
mov es, ax
mov ss, ax
; Push the pointer to the InterruptState object
mov rdi, rsp
; Call the C++ Code (Lymph::Hal::Idt::Manager::InterruptGlobalHandler)
call _ZN5Astro3Hal3Idt7Manager22InterruptGlobalHandlerEP14InterruptStack
mov rsp, rax
pop rdi
pop rsi
pop rbp
pop rbx
pop rdx
pop rcx
pop rax
; Remove the errorcode and the interrupt number from the stack
add rsp, 0x10
iret
This is the stack reported by bochs when iret gets executed:
Ok, solved this... looking at the Intel manual 2A I noticed that IRET for long mode is IRETQ, as it needs the W opcode prefix. Just wondering why it isn't specified in the 3A manual
Thank you anyway
Please, correct my English...
Motherboard: ASUS Rampage II Extreme
CPU: Core i7 950 @ 3.06 GHz OC at 3.6 GHz
RAM: 4 GB 1600 MHz DDR3
Video: nVidia GeForce 210 GTS... it sucks...