每个学习C的朋友都会被告之C是中级语言其位操作非常方便而Pascal之流只适用于教学但是Delphi中提供了一组位操作可别以过去对Pascal的态度看Delphi
* 按位的逻辑操作
Delphi中的ANDORNOT可不仅仅只对逻辑表达式有作用它们还可以操作数
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中提供了几乎全部常用汇编指令的支持MOVJEJMPCMPSHLSHRSALSARPOPPUSHHLT……自己去查吧至于INT也能识别不过非法操作或死机可别找我(在最早的Windows中用Delphi 似乎可以正确运行中断但Windows OEMWindows 就不对了大概是位模块的问题还搞不清楚)
* 嵌入式汇编的格式
Delphi是使用ASM……END来标志汇编语句
如ASM
mov al
mov blal
END;
* 可操作的寄存器
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已经帮你做了不必担心会使数据丢掉
[] [] []