鱼C论坛

 找回密码
 立即注册
查看: 2791|回复: 4

检测点10.5卡壳了,老鸟指点下

[复制链接]
发表于 2013-6-16 02:05:40 | 显示全部楼层 |阅读模式
2鱼币
assume cs:code

stack 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:[0eh]
           inc ax
           inc ax
           inc ax
     mov ax,4c00h
     int 21h
code ends
end start
以下执行 DEBUG的情况
F:\a>debug 105.exe
-r
AX=0000  BX=0000  CX=0029  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=13D9  ES=13D9  SS=13E9  CS=13EA  IP=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    [000E]
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     [BX+SI],AL
13EA:001B 0000          ADD     [BX+SI],AL
13EA:001D 0000          ADD     [BX+SI],AL
13EA:001F 0000          ADD     [BX+SI],AL
-d ss:0
13E9:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13E9:0010  B8 E9 13 8E D0 BC 10 00-8E D8 B8 00 00 FF 16 0E   ................

到这栈段内数据都为0
-t


AX=13E9  BX=0000  CX=0029  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=13D9  ES=13D9  SS=13E9  CS=13EA  IP=0003   NV UP EI PL NZ NA PO NC
13EA:0003 8ED0          MOV     SS,AX
-t


AX=13E9  BX=0000  CX=0029  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=13D9  ES=13D9  SS=13E9  CS=13EA  IP=0008   NV UP EI PL NZ NA PO NC
13EA:0008 8ED8          MOV     DS,AX
-d ss:0
13E9:0000  00 00 00 00 00 00 E9 13-00 00 08 00 EA 13 EB 0D   ................
13E9:0010  B8 E9 13 8E D0 BC 10 00-8E D8 B8 00 00 FF 16 0E   ................
执行完mov ss,ax后 栈内数据发生改变
这里一直没想明白,有老鸟出来指点下吗
-



最佳答案

查看完整内容

大哥,你这个问题和我提问的一样的。电脑还没加载程序的时候,你看看栈段的数据,然后你再加载程序你再看看栈的数据,一边执行一边观察。看看和原来没加载程序的数据对比一下。就明白的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-16 02:05:41 | 显示全部楼层
大哥,你这个问题和我提问的一样的。电脑还没加载程序的时候,你看看栈段的数据,然后你再加载程序你再看看栈的数据,一边执行一边观察。看看和原来没加载程序的数据对比一下。就明白的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-16 02:10:03 | 显示全部楼层
习题答案如下:推算:
执行call word ptr ds:[0eh]指令时,先cs入栈,再ip=11入栈,最后ip转移到(ds:[0eh])。(ds:[0eh])=11h,执行inc ax……最终ax=3
题中特别关照别用debug跟踪,跟踪结果不一定正确,但还是忍不住去试试,看是什么结果。
根据单步跟踪发现,执行call word ptr ds:[0eh]指令时,显示ds:[0eh]=065D。
ds:0000~ds:0010不是已设置成stack数据段了嘛,不是应该全都是0的嘛。
于是进行了更详细的单步跟踪,发现初始数据段中数据确实为0,但执行完mov ss,ax;mov sp,16这两条指令后,数据段中数据发生改变。这是为什么呢?中断呗~~~~

              没想明白 中断呗~~~~ 这里的意思

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-21 21:59:04 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-22 09:21:41 | 显示全部楼层
我咋没发现第二个问题勒?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表