4.可否在程序结束处用一条RET返回指令,返回DOS? aa SEGMENT ;数据段1 XX DB Hello! 定义源串 aa ENDS bb SEGMENT ;数据段2 DB 6 dup ? ;定义目的缓冲区 ENDS SEGMENT ;代码段 ASSUME CS:ce,Ds:aa,ES:bb;指示指令中标号变量所在段 start: CLD ;设置传送方向 MOV AX. aa DS:SI←源串首地址 MOV DS. AX LEA SI, XX MOV AX, SEG yy ;ES:DI←目的首地址 MOV ES, AX MOV DI, OFFSET yY MOV CX. 6 ;CX←串的长度 REP MOVSB 串传送 RET ENDS END start ;指示程序结束和程序入口
4. 可否在程序结束处用一条RET返回指令,返回DOS? aa SEGMENT ; 数据段1 xx DB 'Hello!’ ; 定义源串 aa ENDS bb SEGMENT ;数据段2 yy DB 6 dup (?) ; 定义目的缓冲区 bb ENDS cc SEGMENT ;代码段 ASSUME CS:cc, DS:aa, ES:bb ;指示指令中标号,变量所在段 start : CLD ;设置传送方向 MOV AX , aa ;DS: SI ← 源串首地址 MOV DS , AX LEA SI , xx MOV AX , SEG yy ;ES:DI ← 目的首地址 MOV ES , AX MOV DI , OFFSET yy MOV CX , 6 ;CX ← 串的长度 REP MOVSB ;串传送 RET cc ENDS END start ;指示程序结束和程序入口
D: MASMDEBUG hello exe 129F:0000FC CLD 129F:0001B89D12 MOV AX 129D 129F:00048ED8 MOV DS. AX 129F:00068D360000 LEA SI, [00001 129F:000AB89E12 MOV AX. 129E hello.exe 129F:000D8EC0 MOV ES, AX 用户程序 129F:000FBF0000 MOV DI,0000 129F:0012B90600 MOV Cx,0006 129F:0015F3 REPZ 129F:0016A4 MOVSB 129F:0017F3 RET 129F:001843 INC BX 与用户程序相连的 129F:001950 PUSH AX内存内容被看作 129F:001AFF36C601 PUSH[01c程序时
D:\MASM\DEBUG hello1.exe - U 129F:0000 FC CLD 129F:0001 B89D12 MOV AX,129D 129F:0004 8ED8 MOV DS, AX 129F:0006 8D360000 LEA SI, [0000] 129F:000A B89E12 MOV AX, 129E 129F:000D 8EC0 MOV ES, AX 129F:000F BF0000 MOV DI, 0000 129F:0012 B90600 MOV CX, 0006 129F:0015 F3 REPZ 129F:0016 A4 MOVSB 129F:0017 F3 RET 129F:0018 43 INC BX 129F:0019 50 PUSH AX 129F:001A FF36C601 PUSH [01C6] 、、、 - hello.exe 用户程序 与用户程序相连的 内存内容被看作 程序时