{D7 + win98, 不能用于 2000}
UNIT MAINUNIT;
interface
usages
Windows, messages, systèmes, variantes, classes, graphiques, contrôles, formulaires,
Dialogues, stdctrls;
taper
Tform1 = classe (tform)
Button1: Tbutton;
Button2: TBUTTON;
Button3: Tbutton;
Procédure Button1Click (expéditeur: tobject);
Procédure Button2Click (expéditeur: tobject);
Procédure Button3Click (expéditeur: tobject);
privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
FORM1: TFORM1;
mise en œuvre
{$ R * .dfm}
vitesse de procédure (compter: mot); stdcall;
const
ExceptionUsed = 03 $;
var
Idt: array [0..5] d'octet;
lpoldgate: dword;
commencer
ASM
Sidt idt
MOV EBX, DWORD PTR [IDT + 2]
Ajouter EBX, 8 * ExceptionUseused
CLI
mov dx, word ptr [ebx + 6]
SHL EDX, 16d
mov dx, word ptr [ebx]
mov [lpoldgate], edx
Mov eax, offset @@ ring0code
mov word ptr [ebx], hache
SHR EAX, 16D
mov word ptr [ebx + 6], hache
int exception utilisé
MOV EBX, DWORD PTR [IDT + 2]
Ajouter EBX, 8 * ExceptionUseused
MOV EDX, [lPoldgate]
MOV WORD PTR [EBX], DX
SHR EDX, 16D
mov word ptr [ebx + 6], dx
JMP @@
@@ ring0code:
Mov Al, 34 $
Out 43 $, Al
Mov Axe, compter
Out 40 $, Al
Mov al, ah
Out 40 $, Al
iretd
@@sortie:
fin;
fin;
Procédure tform1.button1Click (expéditeur: tobject);
commencer
vitesse (6000 $); // 慢
fin;
Procédure tform1.button2click (expéditeur: tobject);
commencer
Vitesse (1044 $);
fin;
Procédure TForm1.Button3Click (expéditeur: tobject);
commencer
vitesse (500 $);
fin;
fin.