一道汇编题目。。。高手帮忙。先谢谢了!!!
试题给出了一个欠完整的X86汇编语言远过程,请基于此给定汇编语言程序,回答试题给出的各有关问题。说明:(1)程序功能:在字符串1(STR1)后追加字符串2(STR2);
(2)参数规定:STR1和STR2的指针均为长指针,经过堆栈传入子程序;
(3)设字符串均以0结尾,不考虑在STR1后是否留有足够的空间;
(4)要求使用“结构”抽象子程序入口处堆栈栈顶的内容。
问题:(1)给出相应结构类型的类型说明(2分)
(2)补充完善子程序的代码。(6分)
(3)以注释的形式给出子程序的详细设计与使用说明(2分)
已有的子程序代码(含需要补充的内容的说明)如下:
;
PARM STRUC ;说明“结构”类型(2分)
BPREG DW ? ;对应BP寄存器保存单元
RETADR DD ? ;对应返回地址
……
……
PARM ENDS
;
;过 程 名:STRCAT 给出子程序的详细设计与使用说明(2分)
;功 能:在STR1后追加STR2
;参 数:
;返 回 值:
;说 明:(1)字符串均以0结尾
; (2)不考虑在STR1后是否留有足够的空间
;调用示例: ……
; ……
; CALL FAR PTR STRCAT
;
STRCAT PROC FAR
PUSH BP
MOV BP, SP
PUSH DS
PUSH ES
PUSH AX
PUSH CX
PUSH SI
PUSH DI
CLD
MOV ES, ……… ( 2分)
MOV DI, ………
PRG1:MOV AL, ES:[ DI ] ;确定STR1尾
INC DI
OR AL, AL
JNZ PRG1
DEC DI
XCHG SI, DI
MOV ES, [ BP ].STR2SEG ;测STR2的串长
MOV DI, [ BP ].STR2OFF
MOV CX, 0FFFFH
REPNZ SCASB
NOT CX
XCHG SI, DI
MOV DS, [ BP ].STR2SEG ;实现STR1和STR2拼接
MOV SI, [ BP ].STR2OFF
REP MOVSB
………… ;恢复寄存器(2分)
RET ;平衡堆栈(2分)
BCDTOB ENDP
我的问题有两个:1.RET后面应该加一个参数,加这个参数的目的是什么,为什么要加这个参数。
2.程序的大概意思我看懂了。有些地方不是很明白。比如
MOV ES, ……… ( 2分)
MOV DI, ………
这里是不是确定第一个字符串的地址? ……… 应该填什么?
另外:
ES最后存储的是[ BP ].STR2SEG ,并不是第一个字符串的段地址,执行下面指令怎么会正确?希望大家帮帮忙。谢谢!
MOV DS, [ BP ].STR2SEG ;实现STR1和STR2拼接
MOV SI, [ BP ].STR2OFF
REP MOVSB