可重入子程序,不太理解,求人给清楚的说下。

[复制链接]
查看11 | 回复1 | 2010-12-30 09:42:07 | 显示全部楼层 |阅读模式
功能:测字符串的长度
入口参数:(ds:si)=字符串首地址
出口参数:(ax)= 字符串长度
说明:字符串以0结尾
slen proc
push bp
---------->假设sp=16,push bp后sp=14

mov bp,sp
---------->这里是干什么?是不是为了让[bp-2]=14啊?
sub sp,2
---------->sub sp,2 后sp=12
mov word ptr [bp-2],0
slen1:mov al,[si]
inc si
or al,al
jz slen2
inc word ptr [bp-2]
jmp slen1
slen2:mov ax,[bp-2]

mov sp,bp
---------->这里是不是让sp+2=14呢?
pop bp

ret
slen endp

回复

使用道具 举报

千问 | 2010-12-30 09:42:07 | 显示全部楼层
push bp
---------->假设sp=16,push bp后sp=14
mov bp,sp
---------->这里是干什么?是不是为了让[bp-2]=14啊?;因为我们需要操作栈顶指针SP,但是SP是不能随便修改的,一旦修改,一般是不能通过堆栈恢复的,BP用来保护SP是最好的选择,因为它的默认段基也是SS,但是BP也是需要保护的就是说,为了使用BP保护SP,需要先保护BPPUSH BPmov bp,sp......mov sp,bppop bp这是一个技巧,32位汇编中,这也是一个堆栈框架希望阁下知悉其他的问题也一并可以解释了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行