As PUSHF/POPF are still supported perhaps its better to leave them out of this!
Code: Select all
Macro pushall ;assumes EnableASM already set
pushf ;db 0x9C
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
pushad ;db 0x60
CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
push rax ;db 0x50
push rcx ;db 0x51
push rdx ;db 0x52
push rbx ;db 0x53
push rbp ;db 0x55
push rsi ;db 0x56
push rdi ;db 0x57
push r8 ;db 0x41,0x50
push r9 ;db 0x41,0x51
push r10 ;db 0x41,0x52
push r11 ;db 0x41,0x53
push r12 ;db 0x41,0x54
push r13 ;db 0x41,0x55
push r14 ;db 0x41,0x56
push r15 ;db 0x41,0x57
CompilerEndIf
EndMacro
Macro popall ;assumes EnableASM already set
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
pop r15 ;db 0x41,0x5F
pop r14 ;db 0x41,0x5E
pop r13 ;db 0x41,0x5D
pop r12 ;db 0x41,0x5C
pop r11 ;db 0x41,0x5B
pop r10 ;db 0x41,0x5A
pop r9 ;db 0x41,0x59
pop r8 ;db 0x41,0x58
pop rdi ;db 0x5F
pop rsi ;db 0x5E
pop rbp ;db 0x5D
pop rbx ;db 0x5B
pop rdx ;db 0x5A
pop rcx ;db 0x59
pop rax ;db 0x58
CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x86
popad ;db 0x61
CompilerEndIf
popf ;db 0x9D
EndMacro
MessageRequester ("PUSHAD","Ready...")
EnableASM
;db 0xCC
pushall
popall
;db 0xCC
DisableASM
MessageRequester("POPAD","Done")