. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  看看检测3.1第2题的答案是否正确?  [待解决] 回复[ 16次 ]   点击[ 852次 ]  
447956835
[帖 主]   [ 发表时间:2008-03-12 23:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-11-03 14:23
指令序列↓       寄存器→ CS      IP    DS     AX      BX 
               初始值→ 2000H   0000  1000H  0       0 
mov ax,6622h           2000H   0003  1000H  6622H   0000 
jmp 0ff0:0100          1000H   0000  1000H  6622H   0000 
mov ax,2000h           1000H   0003  1000H  2000H   0000 
mov ds,ax              1000H   0005  2000H  2000H   0000 
mov ax,[0008]          1000H   0008  2000H  C389H   0000 
mov ax,[0002]          1000H   000B  2000H  EA66H   0000 

我通过DEBUG 后和答案不一样,主要是JMP那块有些疑惑,请高手请教!
jsh728
[第1楼]   [ 回复时间:2008-03-13 00:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-07 20:58
我的答案是这样,供探讨:
mov ax,6622h         cs=2000h  ip=0003h  ds=1000h  ax=6622h bx=0000h
jmp 0ff0:0100        cs=0ff0h  ip=0100h  ds=1000h  ax=6622h bx=0000h
mov ax,2000h         cs=0ff0h  ip=0103h  ds=1000h  ax=2000h bx=0000h
mov ds,ax            cs=0ff0h  ip=0105h  ds=2000h  ax=2000h bx=0000h
mov ax,[0008]        cs=0ff0h  ip=0108h  ds=2000h  ax=c189h bx=0000h
mov ax,[0002]        cs=0ff0h  ip=010bh  ds=2000h  ax=ea66h bx=0000h
我通过debug发现是一样的
447956835
[第2楼]   [ 回复时间:2008-03-13 11:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-11-03 14:23
噢.对了,原来网上的答案错了,我也用DEBUG调试了.
syzu
[第3楼]   [ 回复时间:2008-03-24 01:06 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2008-03-22 13:14
我觉得这条:mov ax,[0008]  cs=0ff0h  ip=0108h  ds=2000h  ax=c189h bx=0000h
ax应该等于e189吧?2000H+C189=E189啊
syzu
[第4楼]   [ 回复时间:2008-03-24 01:13 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2008-03-22 13:14
哦,我看错了,是mov不是add
ckycst
[第5楼]   [ 回复时间:2008-03-25 18:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-23 16:07
能告诉我为什么是这样的序列吗?谢谢!
xfc0208
[第6楼]   [ 回复时间:2008-04-08 22:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-11 17:42
回复:[第5楼]
------------------
我是这样理解的:
首先指令从cs:ip处开始执行~本题中,CS=2000 IP=0
则从物理地址20000H处开始执行,20000H中存放的数据相应的汇编语句是:mov ax,6622H
所以首先执行mov ax,6622H 执行完后,CS不变,IP+3 IP=0003H 
然后执行2000:0003中的程序:jmp 0ff0:0100 本条语句的意思是更改CS和IP的值,使CS=0ff0,IP=0100 
执行完这条语句后,程序便转向物理地址为0ff00+0100=10000H处,于是执行语句mov ax,2000H ip+3=0103h;再执行mov ds,ax ip+2=0105h;此时dx变成2000H 再依次执行mov ax,[0008];mov ax,[0002]
其中ax中的值便是2000:0008即:20008中的值:c189H
以及2000:0002 即:20002中的值:ea66
south
[第7楼]   [ 回复时间:2008-04-24 14:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-26 17:59
同意一楼的,用debug验证过
huibian
[第8楼]   [ 回复时间:2008-04-26 10:42 ]   [引用]   [回复]   [ top ] 
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41
计算机就是最好的老师,这本是原本就没有答案,现在所谓的答案也是以前的学习者做的,错误也在所难免,况且有的答案也是没有固定答案的。
相信自己,相信计算机,不知道对错,debug一下,自己写个小程序验证一下...
bennie_xie
[第9楼]   [ 回复时间:2008-05-12 00:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-04 08:14
各位老大,我想到脑袋都爆了,那条mov bx,ax在哪里被执行的啊?
yigeling
[第10楼]   [ 回复时间:2008-05-12 13:57 ]   [引用]   [回复]   [ top ] 
荣誉值:7
信誉值:0
注册日期:2008-01-29 17:57
mov bx,ax 没有被执行到,所以就不用写执行它后的寄存器内容了。
mouse
[第11楼]   [ 回复时间:2008-05-13 09:29 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
debug一下就知道什么指令执行了,和不执行了:-)
crayowl
[第12楼]   [ 回复时间:2008-05-25 22:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-21 20:31
嗯 看了一下答案,有处明显错误。
mov ax,[0008]        cs=0ff0h  ip=0108h  ds=2000h  ax=c389h bx=0000h
--------------------------------------------------------------------------
                                                   ax=c189

其实有个难点就是  mov  ax,[0008]  到这了
                  
20008H  89
20009H  c1     mov bx,ax
可能是汇编指令迷惑了大家 

机器比较死板,直接把[0008]中的内容 c189 直接转入 ax
这也就是作者为什么提问:   数据和程序为什么有区别?   cs:ip 没指向那里,直接作数据处理。
---------------------------------------------------------------------------------
欢迎讨论....
cgygsyx
[第13楼]   [ 回复时间:2008-07-17 23:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-17 17:41
终于找到答案了,我正为这个问题犯愁呢?多谢各位!!!
e56004474
[第14楼]   [ 回复时间:2008-09-10 17:36 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
AX=EA66  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=0000   NV UP DI PL NZ AC PO CY
1000:0000 B80020        MOV     AX,2000
-t

AX=2000  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=0003   NV UP DI PL NZ AC PO CY
1000:0003 8ED8          MOV     DS,AX
-t

AX=2000  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=0005   NV UP DI PL NZ AC PO CY
1000:0005 A10800        MOV     AX,[0008]                          DS:0008=C1
-t

AX=C189  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=0008   NV UP DI PL NZ AC PO CY
1000:0008 A10200        MOV     AX,[0002]                          DS:0002=EA
-t

AX=EA66  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=000B   NV UP DI PL NZ AC PO CY
1000:000B 7439          JZ      0046
-t

AX=EA66  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=000D   NV UP DI PL NZ AC PO CY
1000:000D 3CCC          CMP     AL,CC
-t

AX=EA66  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=000F   OV UP DI NG NZ AC PE CY
1000:000F 7455          JZ      0066
-t

AX=EA66  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002
DS=2000  ES=1481  SS=1481  CS=1000  IP=0011   OV UP DI NG NZ AC PE CY
1000:0011 3CCD          CMP     AL,CD
-


我晕了。。执行到mov ax,[0002]  你们的AX=6622,而我认为是ax=ea66,DEBUG 出来也如我想的。。。。怎么会这样?
e56004474
[第15楼]   [ 回复时间:2008-09-10 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
1000:0005 A10800        MOV     AX,[0008]                          DS:0008=C189(复制时没复制出来)
-t 

AX=C189  BX=5D24  CX=FF20  DX=0001  SP=FFE2  BP=0000  SI=0000  DI=0002 
DS=2000  ES=1481  SS=1481  CS=1000  IP=0008   NV UP DI PL NZ AC PO CY 
1000:0008 A10200        MOV     AX,[0002]                          DS:0002=EA66(复制时没复制出来)

-t 




造成的结果就是,执行完mov ax,[0002],继续执行的CS=1000,IP=0008后续代码 = =~
e56004474
[第16楼]   [ 回复时间:2008-09-10 17:51 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
问题找到了 = =
CS初试值是2000,我是从1000开始执行的。。。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved