enter-leave的使用

    技术2022-05-19  22

    enter-leave的使用

    以下问题在实模式下讨论:   faq-it.org/linux_command/enter和leave称为高级语言汇编指令支持.(一般的汇编教程上的介绍很少,  没有什么使用实例。)   enter和leave的引入是为了使汇编程序开发更容易。   enter-leave具体作用在子程序中(过程)(一般情况)   在堆栈上腾出空间供临时变量使用.   使用格式   enter  cnt1,cnt2   cnt1  16位立即数.  指的堆栈框架的大小,   cnt2  8位立即数,嵌套的层次(  这个所用极少,  而且……偶还不懂,忘高手指教!)一般设为0   leave  (就这样写)   enter-leave有等价的汇编指令   enter  cnt1,cnt2相当于   push  bp   mov  bp,sp   sub  sp,cnt1   到下一个leave之前,  不要改变bp的值.   leave  等价于   mov  sp,bp   pop  bp   #####堆栈上的数据说明:   无论子程序是near还是far,   临时变量从[bp-2]开始,下一个就是[bp-4](要看你假设的变量类型:byte或者word,设置了几个)   不要碰[bp],  因为[bp]中放的是enter前的bp的值   如果proc是near  则[bp+2]是返回地址的偏移   如果proc是far  ,则[bp+4]:[bp+2]是返回地址cs:ip   实例:  两数相乘,  结果保存于dx:ax.参数以堆栈传递   push  1      ;换成其他16位寄存器也可   push  2      ;  说明同上   call  sub   sub1  proc  near   enter  4,0                        ;为局部变量保留空间   mov  ax,[bp+4]                ;取参数:2   mov  [bp-2],ax                ;保存到局部变量中   mov  ax,[bp+6]                ;取参数:1   mov  [bp-4],ax                ;保存到局部变量中   mov  ax,[bp-2]   mul  word  ptr  [bp-4]    ;计算   leave                                ;释放局部变量占用的空间   ret  4   sub1  endp

    最新回复(0)