-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgs.asm
105 lines (94 loc) · 1.79 KB
/
gs.asm
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
; GS.ASM - GrabSize routines
; last update : 25-Apr-1994
;
.code
BreakGS: ASSUME ds:NOTHING, es:NOTHING
push ds
mov ds,SegData
ASSUME ds:DGROUP
pop RegDS
mov RegAX,ax
mov RegBX,bx
mov RegCX,cx
mov RegSI,si
mov RegDI,di
mov RegES,es
pop ax
sub ax,2
mov RegIP,ax
pop RegCS
pop Flags
call [GetProgSize]
mov ax,GSInst
mov bx,GSOffs
mov es,GSSegm
cmp es:[bx],INTGS*100h + 0CDh
jne GSMoved
mov es:[bx],ax
GSMoved:
mov bx,RegIP
mov es,RegCS
cmp es:[bx],INTGS*100h + 0CDh
jne GSRemoved
mov es:[bx],ax
GSRemoved:
mov es,RegES
mov ax,RegAX
mov bx,RegBX
mov cx,RegCX
mov si,RegSI
mov di,RegDI
push Flags
push RegCS
push RegIP
mov ds,RegDS
iret
;---------------------------------------------------------------------------;
GS_ESDI: ASSUME ds:DGROUP, es:NOTHING
mov ax,RegDI
mov ProgFinalOfs,ax
mov ax,RegES
mov ProgFinalSeg,ax
ret
GS_DSSI: ASSUME ds:DGROUP, es:NOTHING
mov ax,RegSI
mov ProgFinalOfs,ax
mov ax,RegDS
mov ProgFinalSeg,ax
ret
GS_DSBX: ASSUME ds:DGROUP, es:NOTHING
mov ax,RegBX
mov ProgFinalOfs,ax
mov ax,RegDS
mov ProgFinalSeg,ax
ret
GS_DSDI: ASSUME ds:DGROUP, es:NOTHING
mov ax,RegDI
mov ProgFinalOfs,ax
mov ax,RegDS
mov ProgFinalSeg,ax
ret
GS_CS00: ASSUME ds:DGROUP, es:NOTHING
mov ProgFinalOfs,0
mov ax,RegCS
mov ProgFinalSeg,ax
ret
;---------------------------------------------------------------------------;
SetGS: ASSUME ds:NOTHING, es:NOTHING
push ax
push es
mov es,SegData
ASSUME es:DGROUP
mov ax,INTGS*100h + 0CDh
xchg ax,ds:[bx]
mov GSSegm,ds
mov GSOffs,bx
mov GSInst,ax
pop es
pop ax
ret
.data
GetProgSize dw 0
GSOffs dw 0
GSSegm dw 0
GSInst dw 0