检测点10.5卡壳了,老鸟指点下
assume cs:codestack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
end start
以下执行 DEBUG的情况
F:\a>debug 105.exe
-r
AX=0000BX=0000CX=0029DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D9ES=13D9SS=13E9CS=13EAIP=0000 NV UP EI PL NZ NA PO NC
13EA:0000 B8E913 MOV AX,13E9
-u
13EA:0000 B8E913 MOV AX,13E9
13EA:0003 8ED0 MOV SS,AX
13EA:0005 BC1000 MOV SP,0010
13EA:0008 8ED8 MOV DS,AX
13EA:000A B80000 MOV AX,0000
13EA:000D FF160E00 CALL
13EA:0011 40 INC AX
13EA:0012 40 INC AX
13EA:0013 40 INC AX
13EA:0014 B8004C MOV AX,4C00
13EA:0017 CD21 INT 21
13EA:0019 0000 ADD ,AL
13EA:001B 0000 ADD ,AL
13EA:001D 0000 ADD ,AL
13EA:001F 0000 ADD ,AL
-d ss:0
13E9:000000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13E9:0010B8 E9 13 8E D0 BC 10 00-8E D8 B8 00 00 FF 16 0E ................
到这栈段内数据都为0
-t
AX=13E9BX=0000CX=0029DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D9ES=13D9SS=13E9CS=13EAIP=0003 NV UP EI PL NZ NA PO NC
13EA:0003 8ED0 MOV SS,AX
-t
AX=13E9BX=0000CX=0029DX=0000SP=0010BP=0000SI=0000DI=0000
DS=13D9ES=13D9SS=13E9CS=13EAIP=0008 NV UP EI PL NZ NA PO NC
13EA:0008 8ED8 MOV DS,AX
-d ss:0
13E9:000000 00 00 00 00 00 E9 13-00 00 08 00 EA 13 EB 0D ................
13E9:0010B8 E9 13 8E D0 BC 10 00-8E D8 B8 00 00 FF 16 0E ................
执行完mov ss,ax后 栈内数据发生改变
这里一直没想明白,有老鸟出来指点下吗
-
大哥,你这个问题和我提问的一样的。电脑还没加载程序的时候,你看看栈段的数据,然后你再加载程序你再看看栈的数据,一边执行一边观察。看看和原来没加载程序的数据对比一下。就明白的了 习题答案如下:推算:执行call word ptr ds:指令时,先cs入栈,再ip=11入栈,最后ip转移到(ds:)。(ds:)=11h,执行inc ax……最终ax=3 题中特别关照别用debug跟踪,跟踪结果不一定正确,但还是忍不住去试试,看是什么结果。根据单步跟踪发现,执行call word ptr ds:指令时,显示ds:=065D。ds:0000~ds:0010不是已设置成stack数据段了嘛,不是应该全都是0的嘛。于是进行了更详细的单步跟踪,发现初始数据段中数据确实为0,但执行完mov ss,ax;mov sp,16这两条指令后,数据段中数据发生改变。这是为什么呢?中断呗~~~~
没想明白 中断呗~~~~ 这里的意思
我只是路过打酱油的。 我咋没发现第二个问题勒?{:5_92:}
页:
[1]