汇编与高级语言

本文详细探讨了汇编语言与高级语言的关系,包括寄存器、堆栈和调用规则。介绍了栈帧如何支持函数调用,以及不同调用规则如Register、Stdcall、Cdecl和Safecall的工作原理。此外,还展示了如何通过栈帧实现调用栈,并通过实例比较了不同Move函数的效率差异。
摘要由CSDN通过智能技术生成

汇编与高级语言

1.      汇编基础知识

1.1.      寄存器

寄存器

用途

EAXEBXEDXECX

通用寄存器,由程序员自己指定用途,也有一些不成文的用法:

EAX:常用于运算。

EBX:常用于地址索引。

ECX:常用于计数。

EDX:常用于数据传递。

EIP

指令寄存器,指出当前指令所在的地址。

ESP

栈指针,指向当前线程的栈顶。

EBP

栈基址指针,对调试起着很重要的作用。

EDIESI

没有规定作什么用,一般用在源指针和目标指针的操作。

FR

标志寄存器,由多个标志位组成,存放运算结果的标志,比如借位,进位,是否为0等等。

FS

Windows中,FS:[0]用来指向异常处理机制的链接头。

 

说明:

l         ESPEBP对高级语言的函数实现起着非常重要的作用。

l         FSSEHStructured Exception Handling)中起重要作用的一个段寄存器,它的0偏移指向异常结构连表的表头,Windows在进行结构化异常处理时,就是从FS:[0]开始遍历异常结构并调用其中的异常处理函数的。

 

1.2.      堆栈

堆是一块内存区域,一般用于内存的动态分配和释放,比如用New方法分配一个指针,此时即在程序地址空间的堆中分配了一块内存。又比如Delphi的对象也是在堆中创建的。

栈是一种先进后出的列表数据结构,在高级语言的编程中使用广泛,在低级语言中更是不可或缺的基础概念。栈也是一个内存区域,不过它具有快速灵活的特点,CPU直接提供指令去访问栈。

从汇编的角度来看,栈具有如下的性质:

l         栈有两个基础动作,压栈(PUSH)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值