为切实搞清实验2的图3.19中最后一行数值包含的规律性,我修改了实验程序,并执行。看到设置的栈内存数值从左到右分别是AX、BP、IP、CS的值及两个没弄清的非零内存值。
问题1:为何设置栈段后AX和BP的值也会在该栈段中?
问题2:如何设计一程序,彻底弄清楚入栈操作前的这个栈底元素(书上是059D,我这里是0E08)倒底代表什么?
下面是实验的一些数据片段:
(一)实验环境及修改的实验程序输入和程序执行前的寄存器、栈段值等
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\DWS>debug
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=13A4 CS=13A4 IP=0100 NV UP EI PL NZ NA PO NC
13A4:0100 0000 ADD [BX+SI],AL DS:0000=CD
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-a
13A4:0100 mov ax,2000
13A4:0103 mov ss,ax
13A4:0105 mov sp,10
13A4:0108 mov ax,3123
13A4:010B mov bx,1111
13A4:010E mov cx,2222
13A4:0111 mov dx,3333
13A4:0114 mov bp,4444
13A4:0117 mov si,5555
13A4:011A mov di,6666
13A4:011D push ax
13A4:011E mov ax,7788
13A4:0121 mov bp,9999
13A4:0124 push ax
13A4:0125
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=13A4 CS=13A4 IP=0100 NV UP EI PL NZ NA PO NC
13A4:0100 B80020 MOV AX,2000
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
(二)程序从开始执行,到设置栈段的代码执行后
AX=2000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=13A4 CS=13A4 IP=0103 NV UP EI PL NZ NA PO NC
13A4:0103 8ED0 MOV SS,AX
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t
AX=2000 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0108 NV UP EI PL NZ NA PO NC
13A4:0108 B82331 MOV AX,3123
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 20-00 00 08 01 A4 13 08 0E ....... ........
-t
(三)执行AX、BX、CX ... BP赋值后
AX=2000 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0108 NV UP EI PL NZ NA PO NC
13A4:0108 B82331 MOV AX,3123
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 20-00 00 08 01 A4 13 08 0E ....... ........
-t
AX=3123 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=010B NV UP EI PL NZ NA PO NC
13A4:010B BB1111 MOV BX,1111
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0B 01 A4 13 08 0E ......#1........
-t
AX=3123 BX=1111 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=010E NV UP EI PL NZ NA PO NC
13A4:010E B92222 MOV CX,2222
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0E 01 A4 13 08 0E ......#1........
-
............
-t
AX=3123 BX=1111 CX=2222 DX=3333 SP=0010 BP=0000 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0114 NV UP EI PL NZ NA PO NC
13A4:0114 BD4444 MOV BP,4444
-t
AX=3123 BX=1111 CX=2222 DX=3333 SP=0010 BP=4444 SI=0000 DI=0000
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0117 NV UP EI PL NZ NA PO NC
13A4:0117 BE5555 MOV SI,5555
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-44 44 17 01 A4 13 08 0E ......#1DD......
-t
(四)执行AX,BP重新赋值及入栈操作后
AX=3123 BX=1111 CX=2222 DX=3333 SP=000E BP=4444 SI=5555 DI=6666
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=011E NV UP EI PL NZ NA PO NC
13A4:011E B88877 MOV AX,7788
-t
AX=7788 BX=1111 CX=2222 DX=3333 SP=000E BP=4444 SI=5555 DI=6666
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0121 NV UP EI PL NZ NA PO NC
13A4:0121 BD9999 MOV BP,9999
-t
AX=7788 BX=1111 CX=2222 DX=3333 SP=000E BP=9999 SI=5555 DI=6666
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0124 NV UP EI PL NZ NA PO NC
13A4:0124 50 PUSH AX
-t
AX=7788 BX=1111 CX=2222 DX=3333 SP=000C BP=9999 SI=5555 DI=6666
DS=13A4 ES=13A4 SS=2000 CS=13A4 IP=0125 NV UP EI PL NZ NA PO NC
13A4:0125 0000 ADD [BX+SI],AL DS:6666=00
-d 2000:0 f
2000:0000 00 00 88 77 99 99 25 01-A4 13 08 0E 88 77 23 31 ...w..%......w#1
- |