. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  想不通的一个问题  [待解决] 回复[ 5次 ]   点击[ 482次 ]  
advancedprogrammer
[帖 主]   [ 发表时间:2009-06-13 14:49 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13
-a 0000:0
0000:0000 mov ax,1
0000:0003 mov bx,2
0000:0006

-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137F  ES=137F  SS=137F  CS=0000  IP=0000   NV UP EI PL NZ NA PO NC
0000:0000 B80100        MOV     AX,0001   //这里显示0000:0000处往AX送1

-r ip  //改变偏移量,目的想看一下0000:0003处是否是正确指令
IP 0000
:3
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137F  ES=137F  SS=137F  CS=0000  IP=0003   NV UP EI PL NZ NA PO NC
0000:0003 BB0200        MOV     BX,0002   //这里显示0000:0003处往BX送1,正确

-r ip  //返回到0000:0000,目的是为了从开始执行
IP 0003
:0
-t

AX=0001  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137F  ES=137F  SS=137F  CS=0000  IP=0003   NV UP EI PL NZ NA PO NC
0000:0003 BBBB13        MOV     BX,13BB  //执行正确,AX=0001,但是
//0000:0003 BBBB13        MOV     BX,13BB  这里怎么变成向BX送13BB了呢

-t

AX=0001  BX=13BB  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137F  ES=137F  SS=137F  CS=0000  IP=0006   NV UP EI PL NZ NA PO NC
0000:0006 E30D          JCXZ    0015
//BX结果不正确
advancedprogrammer
[第1楼]   [ 回复时间:2009-06-14 10:07 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13
吃惊,我把段地址换成1000竟然不会出现这种情况,难道我这机器上0000段地址有什么限制,不对啊,我换了台机器也是这样:

-a 1000:0 
1000:0000 mov ax,2 
1000:0003 mov bx,3 
1000:0006 

-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137A  ES=137A  SS=137A  CS=1000  IP=0000   NV UP EI PL NZ NA PO NC
1000:0000 B80200        MOV     AX,0002

-r ip
IP 0000
:3
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137A  ES=137A  SS=137A  CS=1000  IP=0003   NV UP EI PL NZ NA PO NC
1000:0003 BB0300        MOV     BX,0003
-r ip
IP 0003
:0

-t

AX=0002  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137A  ES=137A  SS=137A  CS=1000  IP=0003   NV UP EI PL NZ NA PO NC
1000:0003 BB0300        MOV     BX,0003
-t

AX=0002  BX=0003  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=137A  ES=137A  SS=137A  CS=1000  IP=0006   NV UP EI PL NZ NA PO NC
1000:0006 803EA95600    CMP     BYTE PTR 56A9],00                  DS:56AC=00
advancedprogrammer
[第2楼]   [ 回复时间:2009-06-14 18:19 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13
只要段地址不是0000,执行结果都正确,唯独0000开始不行,为什么?
zhenglxd
[第3楼]   [ 回复时间:2009-06-15 13:19 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
debug程序的问题 和汇编无关 具体原理不明,你有兴趣 网上查下debug的源代码
zhenglxd
[第4楼]   [ 回复时间:2009-06-15 13:35 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
突然想起~
内存0:0 起 1024个字节 存放了 中断向量表

T中断可能碰巧 中断类型码就是0 而你又恰好 修改了t中断的 中断例程入口地址
所以 你引发t中断的时候 中断处理程序
zhenglxd
[第5楼]   [ 回复时间:2009-06-15 13:37 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
其实是个错误地址的 中断处理程序
我证实了下 好像t中断类型码 确实为0

因为我用 0:10 来做完全正常
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved