-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathasmgloba.h
60 lines (55 loc) · 1.24 KB
/
asmgloba.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
; global include file for all .s files to specify model and define macros
.MODEL USE16 LARGE,C
%MACS
.LALL
if @DataSize NE 0
LARGEDATA EQU 1
endif
; Pop CPU flags. On the 286 this uses an alternate sequence to avoid
; a bug on early versions of the 286
POPFLAGS macro
if @Cpu AND 8
popf ; popf okay on the 386/486
elseif @Cpu AND 4 ; use alternate sequence on the 286
JMP $+3 ;Jump over IRET
IRET ;Pops CS, IP, FLAGS
PUSH CS ;Removed by IRET
CALL $-2 ;Pushes IP, removed by IRET
else
popf ; popf okay on the 8086/88/186
endif
endm
; Push all general purpose registers. If 386/486, push 32-bit regs
; to support C code compiled with the -3 option
PUSHALL macro
if @Cpu AND 8 ; PUSHAD available to protect 32-bit regs
pushad
elseif @Cpu AND 4 ; PUSHA available
pusha
else
push ax ; save user regs on interrupt stack
push bx
push cx
push dx
push bp
push si
push di
endif
endm
; Pop all general purpose registers
POPALL macro
if @Cpu AND 8 ; PUSHAD available to protect 32-bit regs
popad
nop ; Avoid bug on some early 386's
elseif @Cpu AND 4 ; PUSHA available
popa
else
pop di
pop si
pop bp
pop dx
pop cx
pop bx
pop ax
endif
endm