|
主题 : : 关于实验5(1)、(3)的对比!! [待解决] |
回复[ 2次 ]
点击[ 472次 ] | |
荣誉值:9
信誉值:3
注册日期:2008-12-21 10:26 |
D:\tools\masm5>debug p10.exe
-r
AX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=13D0 ES=13D0 SS=13E0 CS=13E2 IP=0000 NV UP EI PL NZ NA PO NC
13E2:0000 B8E113 MOV AX,13E1
-u cs:0 22
13E2:0000 B8E113 MOV AX,13E1
13E2:0003 8ED0 MOV SS,AX
13E2:0005 BC1000 MOV SP,0010
13E2:0008 B8E013 MOV AX,13E0
13E2:000B 8ED8 MOV DS,AX
13E2:000D FF360000 PUSH [0000]
13E2:0011 FF360200 PUSH [0002]
13E2:0015 8F060200 POP [0002]
13E2:0019 8F060200 POP [0002]
13E2:001D B8004C MOV AX,4C00
13E2:0020 CD21 INT 21
p10.asm
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fdeh,0cdah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
D:\tools\masm5>debug p11.exe
-r
AX=0000 BX=0000 CX=0050 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=13D0 ES=13D0 SS=13E0 CS=13E0 IP=0000 NV UP EI PL NZ NA PO NC
13E0:0000 B8E413 MOV AX,13E4
-u cs:0 22
13E0:0000 B8E413 MOV AX,13E4
13E0:0003 8ED0 MOV SS,AX
13E0:0005 BC1000 MOV SP,0010
13E0:0008 B8E313 MOV AX,13E3
13E0:000B 8ED8 MOV DS,AX
13E0:000D FF360000 PUSH [0000]
13E0:0011 FF360200 PUSH [0002]
13E0:0015 8F060200 POP [0002]
13E0:0019 8F060000 POP [0000]
13E0:001D B8004C MOV AX,4C00
13E0:0020 CD21 INT 21
p11.asm
assume cs:code,ds:data,ss:stack
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fdeh,0cdah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
end start
大家好,以上是实验5第一题与第三题的原文件与编译连接后加载时的状态对比。不知道大家有没有发现这个源文件所不同的就是,代码段一个在原文件的最前面,另一个是在原文件的最后面,其余完全一样,指令和数据没有一点差别。可为什么在编译连接后,用debug加载时,CX寄存器的值有所不同,代码段在前面的p11加载后CX的值是50,代码段在后面的p10加载后CX的值确是42,大家都知道CX所代表的是程序文件的大小,可是两程序的指令没有任何差别,难道仅仅是代码段的顺序不一样就会导致编译后文件大小不一样吗?,请大家能帮助小弟分析一下CX产生差别的原因。谢谢了! | | |