随笔分类 -  ★ 汇编学习

摘要:我一直认为Delphi功能与C++相比毫不逊色,提供了丰富的控件和类、全部API以及嵌入的汇编。最近小弟在把C版的Huffman压缩改用Delphi写时,顺便“研究”了一下Delphi的位操作和嵌入式汇编,利用嵌入汇编我们可以得到高效的程序代码,完成一些Delphi没有提供的底层功能。借贵报一方宝地与大家分享我的“研究”。1.Delphi的位操作 每个学习C的朋友都会被告之C是“中级语言”,其位操作非常方便,而Pascal之流只适用于教学。但是Delphi中提供了一组位操作,可别以过去对Pascal的态度看Delphi。 * 按位的逻辑操作: Delphi中的AND、OR、NOT可不仅仅只对逻 阅读全文
posted @ 2011-07-17 22:38 Delcpp 阅读(1511) 评论(0) 推荐(1)
摘要:6、堆栈操作指令************************************************************************************************** 堆栈是按先进后出的的原则在内存中组织的一个存储区域。该区域一端固定一端活动,固定端称为栈底,而活动端称为栈顶。往堆栈中存入或取出信息都在栈顶进行。CPU中的堆栈指针SP始终指向栈顶,而堆栈段寄存器SS则指明了堆栈段的起始位置。堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进/压栈操作和出/弹 阅读全文
posted @ 2011-01-31 12:53 Delcpp 阅读(3699) 评论(0) 推荐(0)
摘要:取段寄存器指令该组指令的功能是把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES、FS、GS和SS)。其指令格式如下:LDS/LES/LFS/LGS/LSS Reg, MemLDS功能:将地址指针中的段地址送入DS,偏移地址送入寄存器Reg。(通常为指针寄存器和变址寄存器) 该指令为存取非当前数据段中的信息做好地址准备伪码: LDS SI , COUNT[1] COUNT[1]指向的数据为0FFEEDDCC 则:SI = DDCC DS = FFEE 阅读全文
posted @ 2011-01-31 12:52 Delcpp 阅读(467) 评论(0) 推荐(0)
摘要:**************************************************************************************************4、取有效地址指令LEA(Load)**************************************************************************************************指令LEA是把一个内存变量的有效地址(偏移地址)送给指定的寄存器。其指令格式如下:LEA Reg, Mem该指令常用来设置串操作指定所需的寄存器指针的初值。 阅读全文
posted @ 2011-01-30 08:30 Delcpp 阅读(428) 评论(0) 推荐(0)
摘要:**************************************************************************************************2、传送—填充指令**************************************************************************************************传送—填充指令是把位数短的源操作数传送给位数长的目的操作数。指令格式如下:MOVSX/MOVZX Reg/Mem,Reg/Mem/Imm     其中 阅读全文
posted @ 2011-01-30 08:29 Delcpp 阅读(254) 评论(0) 推荐(0)
摘要:**************************************************************************************************3、交换指令XCHG**************************************************************************************************交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同。其指令格式如下:XCHG Reg/Mem, Reg/Mem例如,AX=5678H,BX=123 阅读全文
posted @ 2011-01-30 08:29 Delcpp 阅读(461) 评论(0) 推荐(0)
摘要:数据传送指令**************************************************************************************************1、传送指令MOV(move)**************************************************************************************************传送指令是使用最频繁的指令,它相对于高级语言里的赋值语句。指令的格式如下:MOV Reg/Mem, Reg/Mem/Imm其中:Reg—Regis 阅读全文
posted @ 2011-01-30 08:28 Delcpp 阅读(332) 评论(0) 推荐(0)
摘要:1. 通用寄存器  通用寄存器包括了8个16/32位的寄存器:AX/EAX、BX/EBX、CX/ECX、DX/EDX、SP/ESP、BP/EBP、DI/EDI及SI/ESI。其中AX/EAX、BX/EBX、CX/ECX、DX/EDX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:  AX/EAX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部 阅读全文
posted @ 2011-01-30 08:27 Delcpp 阅读(609) 评论(0) 推荐(0)