. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第三章实验2-2 分析:我对于内存地址单元2000:0~2000:f中改变的内容的分析猜想!  [待解决] 回复[ 3次 ]   点击[ 470次 ]  
linzy
[帖 主]   [ 发表时间:2011-03-31 23:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-31 22:33
按照实验中的程序段输入:
0b39:0100 mov ax,2000
0b39:0103 mov ss,ax
0b39:0105 mov sp,10
0b39:0108 mov ax,3123
0b39:010b push ax
0b39:010c mov ax,3366
0b39:010f push ax
-e 2000:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我在每步执行后都查看了 2000:0 f 处得内容 如:

第一步执行: mov ax,2000 
之后 AX=2000 BX=0000 IP=0103 CS=0B39 DS=0AE3 SS=2000 SP=0010注:DS,SS,SP 我试验多次没和书上一样我想是本机的事!当然也没有任何改变!
e 2000:6 f 00 20-00 00 03 01 39 0B 47 05

第二步执行:mov ss,ax-->mov sp,0100  
之后 AX=2000 BX=0000 IP=0108 CS=0B39 DS=0AE3 SS=2000 SP=0010注:同上
e 2000:6 f 00 20-00 00 08 01 39 0b 47 05

第三步执行:mov ax,3123 
之后 AX=3123 BX=0000 IP=010B CS=0B39 DS=0AE3 SS=2000 SP=0010注:同上
e 2000:6 f 23 31-00 00 0b 01 39 0b 47 05

我猜想 单元2000:e f=0547 里的数据可能和我的电脑有关没有和书上一样!
我猜想 单元2000:c d=0b39 里的数据是CS中的数据
我猜想 单元2000:a b=010b 里的数据是IP中的数据
我猜想 单元2000:8 9=0000 里的数据是BX中的数据
我猜想 单元2000:6 7=3123 里的数据时AX中的数据
我相信我的猜想应该是正确的但是我就是想知道为什么这些内存单元中的数据会自动改写成分别与CS,IP;BX,AX中的内容一样?
敬请各位大哥大姐指点指点!也请说说我的猜想是否正确??
请给出铁一般的原理当证据征服我!谢谢!!!
linzy
[第1楼]   [ 回复时间:2011-03-31 23:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-31 22:33
纠正一下:每一步执行后查看内存单元2000:0 f 前面的D打错成E 别骂我! 嘿嘿……
dallas48
[第2楼]   [ 回复时间:2011-05-01 11:21 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2011-01-06 10:33
从-d 2000:0 f里面应该只能看出ax cs ip吧,2000:e f不知道是神马东东

LZ说的BX应该不是


-t

AX=3123  BX=001B  CX=0003  DX=0000  SP=0010  BP=0000  SI=0000  DI=9776
DS=2000  ES=FFFF  SS=2000  CS=1000  IP=004B   NV UP DI PL ZR NA PE NC
1000:004B 50            PUSH    AX
-d 2000:0 f
2000:0000  00 00 00 00 00 00 23 31-00 00 4B 00 00 10 62 05   ......#1..K...b.
-rbp
BP 0000
:0011
-rsi
SI 0000
:0022
-rdx
DX 0000
:0033
-d 2000:0 f
2000:0000  00 00 00 00 00 00 23 31-00 00 4B 00 00 10 62 05   ......#1..K...b.
-r
AX=3123  BX=001B  CX=0003  DX=0033  SP=0010  BP=0011  SI=0022  DI=9776
DS=2000  ES=FFFF  SS=2000  CS=1000  IP=004B   NV UP DI PL ZR NA PE NC
1000:004B 50            PUSH    AX
-d 2000:0 f
2000:0000  00 00 00 00 00 00 23 31-00 00 4B 00 00 10 62 05   ......#1..K...b.
-
atenl
[第3楼]   [ 回复时间:2011-05-01 15:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-07 15:21
楼主:第二步执行:mov ss,ax-->mov sp,0100 (这里的sp,0100应该是0010)
额,你的猜想是我认为一部分是对的。
我猜想 单元2000:e f=0547 里的数据可能和我的电脑有关没有和书上一样! --这里是标志寄存器
我猜想 单元2000:c d=0b39 里的数据是CS中的数据 
我猜想 单元2000:a b=010b 里的数据是IP中的数据 

为什么会这样呢?
在debug下,我们用t命令时,每次都会产生单步中断,会把标志寄存器,CS,IP依次入栈。
0b39:0100 mov ax,2000 
0b39:0103 mov ss,ax 
0b39:0105 mov sp,10
这三句将栈顶设置成了2000:10 ,而栈是而高往低增长的,入栈过程呢是先增长而后入栈。
(你执行PUSH语句时注意SP的变化)。
所以当你执行mov等不改变栈的语句时,SP不变,标志寄存器,CS,IP还是被压入2000:10的地方,而执行完单步中断,又把原来压入的标志寄存器,CS,IP出栈(出栈操作只改变SP)。
0b39:0108 mov ax,3123 
0b39:010b push ax 
而当你执行PUSH语句时,先执行PUSH语句,然后将标志寄存器,CS,IP入栈,此时呢栈的情况为
2000:0000  ……(SP指向IP)IP CS 标志寄存器 23 31
当中断程序执行完,将IP CS 标志寄存器出栈,此时SP指向3123,
至于IP往前的单元和AX中的数据一样,不排除windows下Debug执行单步中断时把其它寄存器也压入栈中。(个人猜想,也可以在实模式DOS下对比下)
关于中断可以看书本12章
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved