-G;执行程序Programterminated normally-D129E: 0 L20;查看目的串Hello!129E:000048656C6C6F210000-0000000000000000129E:0010FCB89D128ED88D36-0000B89E128EC0BF6-D 129d: 0 L50:从源串重新查看129D:000048656C6C6F210000-0000000000000000Hello...129D:0010-48656C6C6F210000-0000000000000000Hello!..129D:0020FCB89D128ED88D36-0000B89E128EC0BF....6.129D:00300000B90600F3A4B4-4CCD2109E8080003......L.....129D:0040F1E803003C0DC3AC-E8ECF875043C3B75...<.....u.<;u问题思考:(实验课上讨论)1。一个段的大小为多少?一定是64K吗?根据DEBUG下查看的结果,画出程序各段在内存的存放情况。假如将程序中的MOVCX,6改为MOVCX,100H2.程序执行的结果会如何?试用DEBUG观察结果
-G ; 执行程序 Program terminated normally -D 129E: 0 L20 ; 查看目的串 129E:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!. 129E:0010 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .6. -D 129d: 0 L50 ; 从源串重新查看 129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!. 129D:0010 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!. 129D:0020 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .6. 129D:0030 00 00 B9 06 00 F3 A4 B4-4C CD 21 09 E8 08 00 03 .L.!. 129D:0040 F1 E8 03 00 3C 0D C3 AC-E8 EC F8 75 04 3C 3B 75 .<.u.<;u - 问题思考:(实验课上讨论) 1.一个段的大小为多少?一定是64K吗? 根据DEBUG下查看的结果,画出程序各段在内存的存放情况。 2. 假如将程序中的MOV CX, 6 改为 MOV CX , 100H 程序执行的结果会如何?试用DEBUG观察结果
假如程序中没有返回DOS的功能,程序执行的后果?3.2SEGMENT;数据段1aa;定义源串DB 'Hello!'XXENDSaabb;数据段2SEGMENT;定义目的缓冲区DB 6 dup(?)yybbENDS;代码段SEGMENTcc:指示指令中标号.变量所在段ASSUMECS:cc.DS:aa.ES:bbCLD;设置传送方向start :MOVAX,;DS:SI←源串首地址aaMOVDS, AXLEAS,XXMOV;ES:DI目的首地址AX, SEGyyMOVES.AXMOVDI,OFFSETyyMOV;CX←串的长度CX, 6;串传送REPMOVSB; MOVAH, 4CH:调用4CH系统功能,返回DOS21H; INTENDSccEND指示程序结束和程序入口start
3. 假如程序中没有返回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 ;串传送 ; MOV AH , 4CH ;调用4CH系统功能,返回DOS ; INT 21H cc ENDS END start ;指示程序结束和程序入口
D:\MASMDEBUG hellol.exe- UFCCLD129F:0000MOV129D129F:0001B89D12AX,MOVDS,AX8ED8129F:0004SI,LEA[0000]129F:00068D360000hello.exeMOVB89E12AX,129E129F:000A用户程序MOV8ECOES,AX129F:000DMOVDI,BF00000000129F:000FMOVCX,0006129F:0012B90600F3REPZ129F:0015A4MOVSB129F:0016SI46INC129F:0017BX43INC与用户程序相连的129F:001850AXPUSH129F:0019内存内容被看作[01C6]PUSH129F:001AFF36C601程序时???DIFFFF129F:001E死机
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 46 INC SI 129F:0018 43 INC BX 129F:0019 50 PUSH AX 129F:001A FF36C601 PUSH [01C6] 129F:001E FFFF ??? DI - hello.exe 用户程序 与用户程序相连的 内存内容被看作 程序时 死机
4.可否在程序结束处用一条RET返回指令,返回DOS?;数据段1SEGMENTaa;定义源串DB'Hello!'XXENDSaabbSEGMENT;数据段2DB;定义目的缓冲区3 6 dup (?)yybbENDS:代码段SEGMENTcc:指示指令中标号,变量所在段ASSUME CS:cc.DS:aa.ES:bbCLD;设置传送方向start :MOV;DS:SI←源串首地址AX.aaMOVDS, AXLEASI,XXMOVAX, SEGyy;ES:DI+←目的首地址MOVES, AXMOVDI,OFFSETyy;CX 串的长度MOVCX, 6;串传送REPMOVSBRETENDSccEND指示程序结束和程序入口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:IMASMIDEBUG hellol.exe- UFCCLD129F:0000MOVAX,129D129F:0001B89D12MOVDS, AX8ED8129F:0004[0000]LEASI,129F:00068D360000hello.exeMOVAX,129EB89E12129F:000A用户程序AX8ECOMOVES,129F:000DMOVBF0000DI,0000129F:000FMOVCX,B906000006129F:0012F3REPZ129F:0015A4MOVSB129F:0016F3RET129F:001743INCBX与用户程序相连的129F:0018AX50PUSH129F:0019内存内容被看作[01C6]PUSH129F:001AFF36C601程序时
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 用户程序 与用户程序相连的 内存内容被看作 程序时