source: trunk/src/win32k/misc/asmutils.asm@ 847

Last change on this file since 847 was 847, checked in by bird, 26 years ago

Initial checkin of Win32k. (not tested & pe2lx not up-to-date!)

File size: 3.2 KB
Line 
1; $Id: asmutils.asm,v 1.1 1999-09-06 02:20:01 bird Exp $
2;
3; asmutils - assembly utility functions
4;
5; Copyright (c) 1998-1999 knut st. osmundsen
6;
7;
8 .386p
9
10;
11; Include files
12;
13 include devsegdf.inc
14 include sas.inc
15
16;
17; Exported symbols
18;
19 public GetCS
20 public GetDS
21 public GetES
22 public GetFS
23 public GetGS
24 public GetSS
25 public Int3
26 public _memrevmov@12
27 public _memmov@12
28 public GetOS2KrnlMTE
29; public DisableInterrupts
30; public EnableInterrupts
31
32
33CODE32 segment
34 assume CS:CODE32, DS:FLAT, SS:NOTHING
35
36GetCS proc near
37 xor eax,eax
38 mov ax,cs
39 ret
40GetCS endp
41
42
43GetDS proc near
44 xor eax,eax
45 mov ax,ds
46 ret
47GetDS endp
48
49
50GetES proc near
51 xor eax,eax
52 mov ax,es
53 ret
54GetES endp
55
56
57GetFS proc near
58 xor eax,eax
59 mov ax,fs
60 ret
61GetFS endp
62
63
64GetGS PROC NEAR
65 xor eax,eax
66 mov ax,gs
67 ret
68GetGS ENDP
69
70
71GetSS PROC NEAR
72 xor eax,eax
73 mov ax,ss
74 ret
75GetSS ENDP
76
77
78Int3 PROC NEAR
79 push ebp
80 mov ebp,esp
81 int 3
82 pop ebp
83 ret
84Int3 ENDP
85
86
87;DisableInterrupts PROC NEAR
88; cli
89; ret
90;DisableInterrupts ENDP
91
92;EnableInterrupts PROC NEAR
93; sti
94; ret
95;EnableInterrupts ENDP
96
97
98;void __stdcall memrevmov(void *pTo, void* pFrom, unsigned int Len);
99pTo EQU dword ptr [ebp+08]
100pFrom EQU dword ptr [ebp+12]
101Len EQU dword ptr [ebp+16]
102_memrevmov@12 PROC NEAR
103 push ebp
104 mov ebp,esp
105 push esi
106 push edi
107
108
109 mov edi,pTo
110 mov esi,pFrom
111 mov ecx,Len
112
113 ;test if (pTo+4 <= pFrom) then use dword_move else byte_move
114 dec edi
115 dec esi
116 mov eax,edi
117 sub eax,esi
118 cmp eax,4
119 jg memrevmov_loopbyte
120 memrevmov_loopdword::
121 mov eax,[esi+ecx]
122 mov [edi+ecx],eax
123 sub ecx,4
124 cmp ecx,4
125 jg memrevmov_loopdword
126
127 memrevmov_loopbyte::
128 mov al,[esi+ecx]
129 mov [edi+ecx],al
130 loop memrevmov_loopbyte
131
132 pop edi
133 pop esi
134 pop ebp
135 ret 12
136_memrevmov@12 ENDP
137
138;void __stdcall memmov(void *p, signed int off, unsigned int len);
139p EQU dword ptr [ebp+08]
140off EQU dword ptr [ebp+12]
141len EQU dword ptr [ebp+16]
142_memmov@12 PROC NEAR
143 push ebp
144 mov ebp,esp
145 push esi
146 push edi
147
148 mov ecx,len
149 mov esi,p
150 mov edi,esi
151 mov eax,off
152 test eax, 80000000h
153 ja memmov_neg
154
155 add edi,eax
156 dec edi
157 dec esi
158
159 cmp eax,4
160 jg memrevmov_loopbyte
161 memmov_loopdword:
162 mov eax,[esi+ecx]
163 mov [edi+ecx],eax
164 sub ecx,4
165 cmp ecx,4
166 jl memrevmov_loopdword
167
168 memmov_loopbyte:
169 mov al,[esi+ecx]
170 mov [edi+ecx],al
171 loop memrevmov_loopbyte
172
173 memmov_end:
174 pop edi
175 pop esi
176 pop ebp
177 ret 12
178
179 memmov_neg:
180 ;this don't work!!!
181 neg eax
182 sub edi,eax
183
184 cmp eax,4
185 jg memmov_neg_byte
186 and ecx,NOT 03h
187 rep movsd
188
189 mov ecx,len
190 and ecx,03h
191 memmov_neg_byte:
192 rep movsb
193
194 jmp memmov_end
195_memmov@12 ENDP
196
197
198; gets the FLAT pointer to the OS2 Kernel MTE.
199; eax is flat pointer to OS2 Kernel MTE.
200GetOS2KrnlMTE PROC NEAR
201 push es
202
203 mov ax, 70h ;Read-only SAS selector.
204 mov es, ax
205 mov bx, es:[0].SAS_vm_data ;SAS_vm_data (0ch)
206 mov eax, es:[bx].SAS_vm_krnl_mte;SAS_vm_krnl_mte (0ch)
207
208 pop es
209 ret
210GetOS2KrnlMTE ENDP
211
212
213CODE32 ends
214end
Note: See TracBrowser for help on using the repository browser.