上一页 1 ··· 12 13 14 15 16
摘要: 2010-07-20 20:41:32|分类:ASM|字号订阅字符串操作指令的实质是对一片连续的存储单元进行处理,这片连续的存储单元由隐含指针DS:SI或ES:DI来指定;字符串操作指令可对内存单元按照字节、字、双字进行处理,并能根据操作对象的字节数使变址寄存器SI/DI增加或减少1、2、4字节;规定如下:A.当DF=0时,变址寄存器SI/DI增加1、2、4字节;即:变址寄存器SI/DI递增的步长可以是1、2、4字节;B.当DF=1时,变址寄存器SI/DI减少1、2、4字节;即:变址寄存器SI/DI递减的步长可以是1、2、4字节;一、取字符串数据指令(Load String Instructi 阅读全文
posted @ 2012-02-05 12:55 taek 阅读(11410) 评论(0) 推荐(0) 编辑
摘要: 计算机中的内存是以字节为单位的连续的存储空间,每个字节都有一个唯一的编号,这个编号就称为内存地址;因为内存的存储空间是连续的,所以,内存字节的地址编号也是连续的,并用二进制或十六进制数来表示;在内存中,每个变量都有自己的存储单元,不同类型的变量占用的存储单元空间大小不一样;对于多字节变量来说,在内存中是按照"高高低低"的规则存放的,即:高字节存放在高地址内存单元中,低字节存放在低地址内存单元中;而变量的地址就是其所占用存储单元的最低字节的内存地址,即:该变量所占用存储单元的第一个字节的地址;计算机处理内存中的变量(内存单元)时,都是从最低地址向高地址方向处理的;对变量进行处 阅读全文
posted @ 2012-02-05 12:39 taek 阅读(3607) 评论(0) 推荐(0) 编辑
摘要: 当发生函数调用的时候,栈空间中存放的数据是这样的:1、调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;2、调用者函数使用call指令调用被调函数,并把call指令的下一条指令的地址当成返回地址压入栈中(这个压栈操作隐含在call指令中);3、在被调函数中,被调函数会先保存调用者函数的栈底地址(push ebp)(从高内在地址--》低内存地址),然后再保存调用者函数的栈顶地址,即:当前被调函数的栈底地址(mov ebp,esp);4、在被调函数中,从ebp的位置处开始存放被调函数中的局部变量和临时变量,并且这些变量的地址按 阅读全文
posted @ 2012-02-05 12:04 taek 阅读(7240) 评论(3) 推荐(0) 编辑
摘要: GCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC Inline ASM"(GCC内联汇编);一、基本内联汇编GCC中基本的内联汇编非常易懂,格式如下:__asm__ [__volatile__] ("instruction list");其中,1.__asm__:它是GCC定义的关键字asm的宏定义(#define __asm__ asm),它用来声明一个内联汇编表达式,所以,任何一个内联汇编表达式都以它开头,它是必不可少的;如果要编写符合ANSI C标准的代码(即:与ANSI C兼容),那就要使用__asm__;2.__volatil 阅读全文
posted @ 2012-02-05 11:36 taek 阅读(20242) 评论(1) 推荐(4) 编辑
摘要: 用汇编编写的程序虽然运行速度快,但开发速度非常慢,效率也很低。如果只是想对关键代码段进行优化,或许更好的办法是将汇编指令嵌入到 C 语言程序中,从而充分利用高级语言和汇编语言各自的特点。但一般来讲,在 C 代码中嵌入汇编语句要比"纯粹"的汇编语言代码复杂得多,因为需要解决如何分配寄存器,以及如何与C代码中的变量相结合等问题。GCC 提供了很好的内联汇编支持,最基本的格式是:__asm__("asm statements");例如:__asm__("nop");如果需要同时执行多条汇编语句,则应该用"\\n\\t"将 阅读全文
posted @ 2012-02-05 11:33 taek 阅读(3113) 评论(0) 推荐(1) 编辑
摘要: 讨论AT&T的汇编语法,以及GCC的内嵌汇编语法。0.3.2 Syntax1.寄存器引用引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。80386有如下寄存器:8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp;8个8-bit寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上是寄存器%ax,%bx,%cx,%dx的高8位和低8位;6个段寄存器 阅读全文
posted @ 2012-02-04 19:21 taek 阅读(1003) 评论(0) 推荐(0) 编辑
摘要: GCC 内联汇编来源:IBM用汇编编写的程序虽然运行速度快,但开发速度非常慢,效率也很低。如果只是想对关键代码段进行优化,或许更好的办法是将汇编指令嵌入到 C 语言程序中,从而充分利用高级语言和汇编语言各自的特点。但一般来讲,在 C 代码中嵌入汇编语句要比"纯粹"的汇编语言代码复杂得多,因为需要解决如何分配寄存器,以及如何与C代码中的变量相结合等问题。GCC 提供了很好的内联汇编支持,最基本的格式是:__asm__("asm statements");例如:__asm__("nop");如果需要同时执行多条汇编语句,则应该用" 阅读全文
posted @ 2012-02-04 15:09 taek 阅读(1440) 评论(0) 推荐(1) 编辑
上一页 1 ··· 12 13 14 15 16