Delphi10 一段汇编程序
2022-12-28 10:51:59 作者:admin
本文整理自网络,侵删。
介绍我试图查看汇编程序是否仍可以与Delphi 10一起使用。我没有精力去写复杂的东西,所以我尝试用冒泡排序作弊,这是我在学生时代学到的第一个算法。假定要排序的数据已经设置在数据:整数数组[0..DATACOUNT]中。DATACOUNT是一个常数。
Pascal :procedure TForm1.bubble;var i,j,v : integer; exchange : boolean;begin for i := DATACOUNT downto 1 do begin exchange := false; for j := 0 to i-1 do begin if data[j] > data[j+1] then begin exchange := True; v := data[j]; data[j] := data[j+1]; data[j+1] := v; end; end; if not exchange then break; end;end;
汇编:procedure TForm1.bubble_asm;begin asm push edi // ?涓?不可レジスタ退避 push esi // ?涓?不可レジスタ退避 push ebx // ?涓?不可レジスタ退避 lea edi,[eax].TForm1.data // data[0]のアドレス mov edx,DATACOUNT // for i := DATACOUNT@for1: // 外?去氅`プ?I理?_始 cmp edx,1 // 外?去氅`プ?K了判定 jb @ret // 外?去氅`プ?K了判定 mov esi,1 // exchange := false mov ecx,0 // for j := 0 push edi // data[0]のアドレス保存@for2: // 内?去氅`プ?I理?_始 mov eax,[edi] // data[j] mov ebx,[edi+4] // data[j+1] integer=4byte cmp eax,ebx // if data[j] > data[j+1] jbe @noexchange // data[j] <= data[j+1]ならthen以下を?g行しない mov esi,0 // exhcnage = true mov [edi],ebx // data[j] := data[j+1] mov [edi+4],eax // data[j+1] := data[j]@noexchange: // 交?Q?K了(?oし) inc ecx // to i-1 cmp ecx,edx // 内?去氅`プ?K了判定 je @for2end // 内?去氅`プ?K了判定 add edi,4 // dataへのポインタを1つ?Mめる jmp @for2 // 内?去氅`プ?Rり返し@for2end: // 内?去氅`プ?K了 pop edi // data[0]へ??す dec edx // i := i-1 cmp esi,1 // if not exchange then je @ret // break jmp @for1 // 外?去氅`プ?Rり返し@ret: // ?I理?K了 pop ebx // ?涓?不可レジスタ回?? pop esi // ?涓?不可レジスタ回?? pop edi // ?涓?不可レジスタ回?? end;end;
我测量处理时间时,数据数量为100,000, Pascal = 32.7秒, Assembler = 18.6秒
相关阅读 >>
Delphi filesearch 获取指定文件夹下所有文件包括隐藏文件
Delphi 防止程序重复执行的单元
Delphi webservices传base64字串
Delphi 禁止改变窗口大小和移动窗口
Delphi 通过按键 esc 关闭程序
Delphi 查找某函数在某个单元
Delphi 用代码实现为程序创建快捷方式的二种方法
Delphi 动态设置屏幕分辨率
Delphi 如何获取进程的全路径名
elphi中取出字符串中指定位置的几个字符
更多相关阅读请进入《Delphi》频道 >>
猜你喜欢
联络方式:
400-123-789
邮箱:xiachao@163.com
Q Q:12345678
微信公众号
微信二维码