⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testasm.out

📁 格式化源码的最新板
💻 OUT
字号:
unit testasm;

interface

procedure procasm1;
procedure procasm2;
procedure procasm3;

implementation

uses Dialogs;

procedure procasm1;
var
  li1, li2: integer;
  lb: boolean;
begin
  li1 := random(10);
  li2 := random(10);
  asm
           MOV     EAX,li1
           PUSH    dword ptr[EDX]
           MOV     EDX,[EBP+8]
           ADD     ESP,4
           CALL    dword ptr procasm2
           MOV     lb,AL
  end;
  li1 := li1 + li2;
end;

procedure procasm2;
asm
         TEST    CL,CL
         JNE     @@isdll
         MOV     EAX,[EDX+EAX*4]
         MOV     CL,moduleislib
         MOV     EAX,tlsindex
         RET
         @@inittls:
         CALL    procasm3
         MOV     EAX,tlsindex
         JE      @@rtm32
         CALL    procasm1
         PUSH    EAX
         TEST    EAX,EAX
         RET
         @@rtm32:
         RET
         @@isdll:
         PUSH    EAX
         TEST    EAX,EAX
         CALL    procasm3
         JE      @@inittls
         @@2a:
         MOV     EAX,[EBX]
         @@2a2:
         MOV     EAX,[EBX]
         @@2a2a:
         MOV     EAX,[EBX]
         FMUL    ST(1),ST
end;

procedure procasm3;
var
  li1, li2: integer;
begin
  li1 := random(10);
  li2 := random(10);
  asm
           MOV     ECX,[EDX]
           XCHG    ECX,[EAX]
           CALL    procasm2
           XCHG    ECX,[EAX]
           MOV     [EDX],ECX
  end;
  li1 := li1 + li2;
  li2 := random(10);
  if li2 > 5 then
  begin
    ShowMessage('More Asm');
    asm
             MOV     [EDX],ECX
             MOV     ECX,[EDX]
             PUSH    EAX
             XCHG    ECX,[EAX]
    end;
    li2 := li1 + li2;
  end;
end;

type
  tfish = (goldfish, tetra, hake, haddock, trout, salmon, catfish, bass, eel, shark);

const
  pond: array[0..6] of tfish = (goldfish, goldfish, eel, haddock, shark, trout, salmon);

procedure testcomplexasm;
begin
  asm
           MOVZX   EAX,tfish(pond[EDX])
  end;
end;

procedure testendcolon;
begin
  asm
           @end:
  end;
end;

procedure testasmexpr;
begin
  asm
           @@tv:
           @@nx:
           JMP     dword ptr @@tv[ECX*4+32]
  end;
end;

procedure testasmdot;
begin
  asm
           JA      @@4
           PUSH    [ESI].integer[4]
           PUSH    [ESI].integer[0]
           @@4:
  end;
end;

procedure procasmblocks;
var
  li1, li2: integer;
  lb: boolean;
begin
  li1 := random(10);
  li2 := random(10);
  asm
           MOV     EAX,li1
  end;
  if li1 = 3 then
  begin
    asm
             MOV     EAX,li1
    end;
  end;
end;

end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -