注册 登录
编程论坛 汇编论坛

哪位解释下为什么这个 [BP].STRSEG 就是字符串首地址的段值

oicq 发布于 2010-10-26 11:25, 677 次点击
写一个字符串长度的子程序。

子程序的调用说明如下:

;子程序名:STRLEN
;功能:测字符串长度
;入口参数:字符串首地址的段值和偏移在堆栈顶
;出口参数:AX=字符串长度
;说明:(1)字符串以0结尾,字符串长度不包括结尾标志。
;(2)本过程是一个远过程
PRAM STRUC
BPREG DW ? ;对应BP寄存器保存单元
RETADR DD ? ;对应返回地址
STROFF DW ? ;对应入口参数中的偏移
STRSEG DW ? ;对应入口参数中的段值
PARM ENDS

STRLEN PROC FAR
PUSH BP
MOV BP;SP
PUSH DS
PUSH SI
MOV DS , [BP].STRSEG ;取字符串首地址的段值           哪位解释下为什么这个 [BP].STRSEG  就是字符串首地址的段值
MOV SI , [BP].STROFF ;取字符串首地址的偏移           哪位解释下为什么这个 [BP].STROFF  就是字符串首地址的偏移

STRLEN1:CMP BYTE PTR ;AL
JZ STRLEN2
INC SI
JMP STRLEN1
STRLEN2:MOV AX ,SI
SUB AX ,[BP].STROFF
POP SI
POP DS
POP BP
RET
STRLEN ENDP
0 回复
1