妖哥 2008-4-8 20:39
初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子
前面知道了一个汇编的赋值指令(MOV), 再了解一个加法指令(ADD), 就可以做个例子了.
譬如: ADD AX,BX; 这相当于 Delphi 中的 AX := AX + BX;
另外提前来个列表 - Delphi 可以用汇编管理以下寄存器:
32 位寄存器: EAX EBX ECX EDX ESP EBP ESI EDI
16 位寄存器: AX BX CX DX SP BP SI DI
8 位寄存器 : AL BL CL DL AH BH CH DH
16 位段寄存器: CS DS SS ES 以及协处理器寄存器堆栈: ST
[b][color=#000080]unit[/color][/b] Unit1;
[b][color=#000080]interface[/color][/b]
[b][color=#000080]uses[/color][/b]
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
[b][color=#000080]type[/color][/b]
TForm1 = [b][color=#000080]class[/color][/b](TForm)
Button1: TButton;
[b][color=#000080]procedure[/color][/b] Button1Click(Sender: TObject);
[b][color=#000080]end[/color][/b];
[b][color=#000080]var[/color][/b]
Form1: TForm1;
[b][color=#000080]implementation[/color][/b]
[color=#008284]{$R *.dfm}[/color]
[color=#008000]//使用汇编的函数
[/color][b][color=#000080]function[/color][/b] add(x,y: Integer): Integer;
[b][color=#000080]var[/color][/b]
count: Integer;
[b][color=#000080]begin[/color][/b]
[b][color=#000080]asm[/color][/b]
MOV EAX,x [color=#008000]{把 x 值放入寄存器 EAX}[/color]
MOV ECX,y [color=#008000]{把 y 值放入寄存器 ECX}[/color]
ADD EAX,ECX [color=#008000]{把 EAX + ECX 的值放入 EAX}[/color]
MOV count,EAX [color=#008000]{把 EAX 的值给变量 count}[/color]
[b][color=#000080]end[/color][/b];
Result := count; [color=#008000]{返回值}[/color]
[color=#008000]{asm 中每个语句换行即可分句, 无须 ; 在这里加上也没有问题}[/color]
[b][color=#000080]end[/color][/b];
[color=#008000]//测试
[/color][b][color=#000080]procedure[/color][/b] TForm1[color=#0000ff].[/color]Button1Click(Sender: TObject);
[b][color=#000080]var[/color][/b]
i: Integer;
[b][color=#000080]begin[/color][/b]
i := add([color=#0000ff]2[/color],[color=#0000ff]4[/color]);
ShowMessage(IntToStr(i)); [color=#008000]{6}[/color]
[b][color=#000080]end[/color][/b];
补充嵌入汇编的注释及分句:
1、注释同 Delphi
2、可以用分号 ; 分句
3、可以用换行分句
4、甚至可以用注释分句