_asm{ pushad
xor ecx,ecx // Bit-Sammler
mov esi,offset Usage// im Ring 0 immer CLD (?)
_emit 0x0F // mov eax,cr4
_emit 0x20
_emit 0xE0
BTS eax,3 /* PENTIUM Debug Extension (DE) aktivieren */
_emit 0x0F // mov cr4,eax
_emit 0x22
_emit 0xE0
setnc cl // CL=1 wenn Debug Extension ausgeschaltet war
mov ebx,DR7
xor eax,eax
lodsw
or ah,ah // mit (gьltiger) Adresse gefьllt?
jz no0
mov edx,DR0
mov DR0,eax
sub edx,eax
or edx,ecx
setnz cl // CL=1 wenn DR0 verдndert wurde oder CL=1 war
or ebx,0x000E0202
btr ebx,16 /* DR7=xxxxxxxx xxxx1110 xxxxxx1x xxxxxx1x */
no0: lodsw
or ah,ah
jz no1
mov edx,DR1
mov DR1,eax
sub edx,eax
or edx,ecx
setnz cl // CL=1 wenn DR1 verдndert wurde oder CL=1 war
or ebx,0x00E00208
btr ebx,20 /* DR7=xxxxxxxx 1110xxxx xxxxxx1x xxxx1xxx */
no1: lodsw
or ah,ah
jz no2
mov edx,DR2
mov DR2,eax
sub edx,eax
or edx,ecx
setnz cl // CL=1 wenn DR2 verдndert wurde oder CL=1 war
or ebx,0x0E000220
btr ebx,24 /* DR7=xxxx1110 xxxxxxxx xxxxxx1x xx1xxxxx */
no2: lodsw
or ah,ah
jz no3
mov edx,DR3
mov DR3,eax
sub edx,eax
or edx,ecx
setnz cl // CL=1 wenn DR3 verдndert wurde oder CL=1 war
or ebx,0xE0000280
btr ebx,28 /* DR7=1110xxxx xxxxxxxx xxxxxx1x 1xxxxxxx */
no3: mov edx,DR7
mov DR7,ebx
sub edx,ebx
or edx,ecx
setnz cl // CL=1 wenn DR7 verдndert wurde oder CL=1 war
shr ecx,1 // Returnwert nach CY
popad
setc al // fьr sog. Hochsprachen...
ret