文档章节

初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 337
阅读 4
收藏 0
前面知道了一个汇编的赋值指令(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)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//使用汇编的函数
function add(x,y: Integer): Integer;
var
  count: Integer;
begin
  asm
    MOV EAX,x      {把 x 值放入寄存器 EAX}
    MOV ECX,y      {把 y 值放入寄存器 ECX}
    ADD EAX,ECX    {把 EAX + ECX 的值放入 EAX}
    MOV count,EAX  {把 EAX 的值给变量 count}
  end;
  Result := count; {返回值}

{asm 中每个语句换行即可分句, 无须 ; 在这里加上也没有问题}
end;


//测试
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := add(2,4);
  ShowMessage(IntToStr(i)); {6}
end;

end.

 
 
 
 
 

 

 

  
补充嵌入汇编的注释及分句:
1、注释同 Delphi
2、可以用分号 ; 分句
3、可以用换行分句
4、甚至可以用注释分句

本文转载自:http://www.cnblogs.com/del/archive/2008/01/23/1050457.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
使用C/Delphi编写ShellCode

来源:http://www.bootkitz.com/?p=93 文章谈的很好 这里说的ShellCode指的是一段x86机器码,无需重定位,在内存任何位置都可以执行的代码. 使用C/Delphi编写代码也是由其编译器特性决定的。...

BlAckEagle
2013/01/21
0
5
Delphi中使用汇编(关于POS函数的问题)

在delphi中使用汇编异常的简单,只用使用关键字asm ....end来引导就行了。 得到一个字符在字符串中的位置有很多方法,最简单的就是使用delphi自己的Pos函数 另外一个方法就是使用 循环查找字...

技术小美
2017/11/06
0
0
Plugs介绍(翻译)---- C#开源操作系统学习系列六

原文地址:http://www.codeproject.com/KB/cs/CosmosPlugs.aspx 介绍 这篇文章将展示在COSMOS中如何实现基于WINDOWS API调用和内部调用的.net代码。另外,也包含了如何使用COSMOS,汇编或者X...

李恒哲
2011/08/13
0
0
Delphi开源组件库--QDAC

QDAC 是由 QDAC 开发组为大家提供的一套 Delphi/C++ Builder 跨平台开源组件库,名称取自英文 Quick Data Access Components 的首字母。它支持 Delphi/C++ Builder 2007 以上的版本的开发环境...

swish
2015/11/23
1K
0
Resource Hacker

Resource Hacker 是一个类似于eXeScope的但在某些方面比它还好一些的工具:eXeScope不能预览菜单但它可以,以下是它主页上对它的介绍: 用于察看、反汇编和取代 Windows 32 位可执行程序中的...

匿名
2012/08/16
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部