Delphi的位操作以及嵌入式汇编[2] (delphi是什么意思中文)

本文目录导航:

Delphi的位操作以及嵌入式汇编[2]

* Delphi嵌入式汇编的使用方式

Delphi的位操作以及嵌入式汇编[2] (delphi是什么意思中文)

.在一般函数过程中使用汇编

汇编程序段可以嵌套于其它过程中 如

procedure TForm Button Click(Sender: TObject);

var i: *** allint;

showmessage(inttostr(i));

这个程序段是把 位的变量I进行左移 然后把结果用Mov &I ax语句放入I变量所在地址返回值 最后显示I 的值是

.独立的汇编程序段

汇编程序段也可以单独写成函数或过程 这就涉及到参数的传递与结果的返回 首先Delphi对于函数的返回有一个约定

即 整型数据 位的用AL返回 位的用AX返回 位的用EAX返回

实型 用ST( )返回

指针 用EAX返回

长字符串 用EAX返回其所在地址

变量 可用@Result返回

例如 一个用汇编的求和函数

function _Sum(X Y: Integer): Integer;

MOV EAX X //把 位的数放入EAX

ADD EAX Y //进行加法运算

MOV @Result EAX //返回X+Y

lishixinzhi/Article/program/Delphi//

delphi中用嵌入式汇编进行 结构体

嵌入式汇编就如楼上所说。

。

。

至于结构体的话,主要问题在于Delphi和C的数组大小的差别上在C中要定义一个512个元素的char型可以这样 char a[512];但是在Delphi中就是 a:Array[0..511] of CHAR; 此处如果定义为512,就会出现问题。

如果你的这个数组在一个结构体里面的话,就会出现我的那个情况。

。

用汇编传参的话,首先要获取结构体实例的指针,然后用push将这个指针入栈。

被调用函数里用[esp+X]来获取这个结构体的指针,X代表这个参数的相对地址。

例如:有一个过程是procedure Func(var A:XXX);其中XXX为某个结构体现在有一个该结构体的指针P,指向该结构体的一个实例,那么要调用Func则应该这样push Pcall Func在Func过程中,要获得传进来的这个结构体,则应该这样var ptrStruct:Pointer;mov [esp], ptrStruct之后ptrStruct就是传进来的这个结构体的地址了

Delphi的位操作以及嵌入式汇编[1]

每个学习C的朋友都会被告之C是 中级语言 其位操作非常方便 而Pascal之流只适用于教学 但是Delphi中提供了一组位操作 可别以过去对Pascal的态度看Delphi

* 按位的逻辑操作

Delphi中的AND OR NOT可不仅仅只对逻辑表达式有作用 它们还可以操作数

AND 按位与 如 AND 其结果为

OR 按位或 如 OR 其结果为

Not 按位取反 如Not 其结果对于有符号数是- 对于无符号数是

另外 还有按位异或XOR 如 XOR 结果为

* 移位操作

Delphi提供了SHL和SHR进行移位左移和右移

例如 SHR 表示 按位右移一位结果为

* Delphi中的数

既然有位的操作就一定涉及到数的类型 是有符号数(头一位用 和 表示正负)还是无符号数

Delphi中 Shortint( 位) Smallint( 位) Longint( 位) Integer( 位) Int ( 位)是有符号数 而Byte( 位) Word( 位) Longword( 位)是无符号数 它们之间可以像C一样强制转换 例如 Smallint类型的- 转换成Word类型就是 转换方法是Word(- )

怎样 够全吧^_^!什么还不够……!?Delphi还有一招 接招吧……

Delphi的嵌入式汇编

Delphi中提供了几乎全部常用汇编指令的支持 MOV JE JMP CMP SHL SHR SAL SAR POP PUSH HLT……自己去查吧 至于INT也能识别 不过非法操作或死机可别找我(在最早的Windows 中用Delphi 似乎可以正确运行中断 但Windows OEM Windows 就不对了 大概是 位模块的问题 还搞不清楚)

* 嵌入式汇编的格式

Delphi是使用ASM……END来标志汇编语句

如 ASM

* 可操作的寄存器

Delphi可用汇编管理以下寄存器

位寄存器EAX EBX ECX EDX ESP EBP ESI EDI

位寄存器AX BX CX DX SP BP SI DI

位寄存器AL BL CL DL AH BH CH DH

位段寄存器CS DS SS ES

以及协处理器寄存器堆栈 ST

* 使用汇编前的工作

教汇编的老师一再强调使用汇编要保存寄存器现场(保存使用前的寄存器状态 使用Push压栈和Pop从栈中弹出) 不过这一切对于Delphi的嵌入式汇编是没有必要的(除非你自己要使用Push和Pop) 因为Delphi已经帮你做了 不必担心会使数据丢掉

lishixinzhi/Article/program/Delphi//

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读