明辉站/编程语言/内容

变速齿轮Delphi完成

网站教程2024-02-06 阅读
[摘要]D7+Win98,不能用于2000 unit MainUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; typ...
{D7+Win98,不能用于2000}
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure speed(count:word);stdcall;
const
  ExceptionUsed=$03;
var
  IDT:array [0..5]of byte;
  lpOldGate:dword;
begin
  asm
    sidt IDT
    mov ebx,dword ptr [IDT+2]
    add ebx,8*ExceptionUsed
    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],ax
    shr eax,16d
    mov word ptr [ebx+6],ax
    int ExceptionUsed
    mov ebx,dword ptr[IDT+2]
    add ebx,8*ExceptionUsed
    mov edx,[lpOldGate]
    mov word ptr [ebx],dx
    shr edx,16d
    mov word ptr [ebx+6],dx
    jmp @@exit


    @@Ring0Code:
    mov al,$34
    out $43,al
    mov ax,Count
    out $40,al
    mov al,ah
    out $40,al
    iretd
  @@exit:
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  speed($6000);//慢
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Speed($1044);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
speed($500);
end;

end.

……

相关阅读