我是靠谱客的博主 激昂花生,最近开发中收集的这篇文章主要介绍enter-leave的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是激昂花生为你收集整理的enter-leave的使用的全部内容,希望文章能够帮你解决enter-leave的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部