{
前面知道了一个汇编的赋值指令(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 } unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} //使用汇编的函数
function add(x,y: Short): Integer;
var
count: short;
begin
asm
MOV AX,x {把 x 值放入寄存器 EAX}
MOV CX,y {把 y 值放入寄存器 ECX}
ADD AX,CX {把 EAX + ECX 的值放入 EAX}
MOV count,AX {把 EAX 的值给变量 count}
end;
Result := count; {返回值} {asm 中每个语句换行即可分句, 无须 ; 在这里加上也没有问题}
end; //使用汇编的函数
function add2(x,y: Integer): Integer;
var
count: Integer;
begin
asm
MOV EAX,x {把 x 值放入寄存器 EAX}
MOV EbX,y {把 y 值放入寄存器 ECX}
mov Ecx,
@s:ADD EAX,EbX {把 EAX + ECX 的值放入 EAX} {内部标签必须使用 @ 前缀; 也可以使用 Delphi 的标签}
loop @s
MOV count,EAX {把 EAX 的值给变量 count}
end;
Result := count; {返回值} {asm 中每个语句换行即可分句, 无须 ; 在这里加上也没有问题}
end; function add3(x,y:integer):Integer;
var
i:Integer;
begin
result:=x;
for i:= to do
Result:= result+y;
end; //测试
procedure TForm1.btn1Click(Sender: TObject);
var
i: Integer;
t:Cardinal;
begin
//两个add方法都可以
//i := add(2,4);
t:=GetTickCount;
i:=add3(,);
t:= GetTickCount-t;
Self.Caption:= IntToStr(t); //没想到汇编 耗时更长,也许delphi自带的编译器 优化的很不错了
t:=;
t:=GetTickCount;
i := add2(,);
t:= GetTickCount-t;
Self.Caption:=Self.Caption+';'+ IntToStr(t)+';'+inttostr(i); // ShowMessage(IntToStr(i)); {6}
end; end.

最新文章

  1. Eclipse下还原删除的文件
  2. js jQuery取消添加超链接的方法小结
  3. PageHelper简单实用
  4. linux运维工作职责
  5. openstack-dbs
  6. Nhibernate 分页
  7. Data source rejected establishment of connection, message from server: "Too many connections"
  8. mvc HTML转Excel身份证后三位变成0
  9. 配置Oracle GoldenGate安全性
  10. Linux压力测试软件Stress安装及使用
  11. Openresty 安装第三方插件
  12. Python并发编程之线程池/进程池--concurrent.futures模块
  13. LintCode #3 统计数字
  14. python编程中的if __name__ == 'main': 的作用和原理
  15. Vue入坑教程(二)——项目结构详情介绍
  16. activeMQ消费消息时网络流量异常大的问题
  17. 06、Windows 10 技术预览
  18. [转]运动检测(前景检测)之(二)混合高斯模型GMM
  19. 2015/9/4 Python基础(8):映射和集合类型
  20. Go语言基础之5--数组(array)和切片(slince)

热门文章

  1. 005.Delphi插件之QPlugins,IQNotify通知
  2. JSONObject 和JSONArray基本使用
  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons)
  4. Eclipse新建Maven中创建src文件夹报The folder is already a source folder错误解决办法
  5. 在远程服务器上执行本地的shell脚本
  6. java核心-多线程(1)-知识大纲
  7. 095-PHP遍历关联数组,并修改数组元素值
  8. ES6 之 Reflect 的方法总结
  9. Hbase PleaseHoldException错误
  10. (转)null和NULL和nullptr和””区别