. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  监测点3.2的一个疑问  [已解决] 回复[ 1次 ]   点击[ 470次 ]  
scandy24
[帖 主]   [ 发表时间:2007-12-18 16:27 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2007-12-10 14:26
监测点3.2 第一问:补全程序,使其可以将10000~1000F中的8个字逆序拷贝到20000~2000F中。

下面是我在自己的机器上进行测试的过程,最后CS在我没有修改的情况下改变了,造成测试失败。我想知道为什么我没有主动修改CS,CS值在没有执行完我指定的命令后就改变?

-r //各个寄存器的初始状态
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B21  ES=0B21  SS=0B21  CS=0B21  IP=0100   NV UP EI PL NZ NA PO NC
0B21:0100 0080FF02      ADD     [BX+SI+02FF],AL                    DS:02FF=C7

-e 1000:0  //在1000:0~1000:F输入1~16
1000:0000  01.     00.2    00.3    00.4    00.5    00.6    00.7    00.8
1000:0008  00.9    00.10   00.11   00.12   00.13   00.14   00.15   00.16

-d 1000:0 f //察看一下输入是否有误
1000:0000  01 02 03 04 05 06 07 08-09 10 11 12 13 14 15 16   ................

-a
0B21:0100 mov ax,1000  //此处我没有特意安排指令在那一块内存,只是按照默认的地址进行输入指令
0B21:0103 mov ds,ax  

0B21:0105 mov ax,2000
0B21:0108 mov ss,ax
0B21:010A mov sp,0010
//以上三条指令是我解题的答案,不知道是不是正确的?

0B21:010D push [0]
0B21:0111 push [2]
0B21:0115 push [4]
0B21:0119 push [6]
0B21:011D push [8]
0B21:0121 push [a]
0B21:0125 push [c]
0B21:0129 push [e]
0B21:012D

-t //开始执行指令,此时的CS=0B21。
AX=1000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B21  ES=0B21  SS=0B21  CS=0B21  IP=0103   NV UP EI PL NZ NA PO NC
0B21:0103 8ED8          MOV     DS,AX

-t
AX=1000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=0B21  CS=0B21  IP=0105   NV UP EI PL NZ NA PO NC
0B21:0105 B80020        MOV     AX,2000

-t  //设置栈段指向
AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=0B21  CS=0B21  IP=0108   NV UP EI PL NZ NA PO NC
0B21:0108 8ED0          MOV     SS,AX

-t  //设置好栈以后开始压栈,SS=2000
AX=2000  BX=0000  CX=0000  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=010D   NV UP EI PL NZ NA PO NC
0B21:010D FF360000      PUSH    [0000]                             DS:0000=0201

-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=000E  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=0111   NV UP EI PL NZ NA PO NC
0B21:0111 FF360200      PUSH    [0002]                             DS:0002=0403

-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=000C  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=0115   NV UP EI PL NZ NA PO NC
0B21:0115 FF360400      PUSH    [0004]                             DS:0004=0605

-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=000A  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=0119   NV UP EI PL NZ NA PO NC
0B21:0119 FF360600      PUSH    [0006]                             DS:0006=0807

-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=0008  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=011D   NV UP EI PL NZ NA PO NC
0B21:011D FF360800      PUSH    [0008]                             DS:0008=1009

-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=0006  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=0121   NV UP EI PL NZ NA PO NC
0B21:0121 FF360A00      PUSH    [000A]                             DS:000A=1211

-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=0004  BP=0000  SI=0000  DI=0000
DS=1000  ES=0B21  SS=2000  CS=0B21  IP=0125   NV UP EI PL NZ NA PO NC
0B21:0125 FF360C00      PUSH    [000C]                             DS:000C=1413

直到此时,CS还是0B21,SP的变化也算正常


-t //执行PUSH  [000E]的时候毛病出来了:
C:\windows\system32\debug.exe
NTVDM CPU 遇到无效的指令
CS:0000 IP:012b OP:f0 15 ab 00 f0 

我不明白CS的值怎么从0B21变成0000了?这样的话我的指令PUSH [000E]没有被执行。
请高手指点一下。
zysong
[第1楼]   [ 回复时间:2007-12-18 17:30 ]   [引用]   [回复]   [ top ] 
荣誉值:19
信誉值:0
注册日期:2007-07-05 17:25
楼主分析错误。是执行push[c]的时候出现的问题,t下面显示的指令时要读入并执行的指令。
t命令是单步中断,中断执行前要把cs,ip,和标志寄存器压栈保存起来。当执行到push[a]的时候栈的偏移地址是6,还有3个空间,当执行到push[c]的时候有2个空间,压栈空间不够,导致错误。如果直接用g命令执行到程序最后就没事或者把栈空间改大(这样就不符合题目要求但是没有背离题目考察的目的)。
得分情况: 1楼(zysong):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved