. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于【实验任务(2)】我的理解  [已解决] 回复[ 9次 ]   点击[ 534次 ]  
regex
[帖 主]   [ 发表时间:2010-01-08 00:36 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
现在回过头来, 再看这道题,【从2000:0开始的内存单元】这句话的意思, 很多人直接在debug下a 2000:0然后输入代码, 再然后R,T, 都得不到正确的结果, 为什么得不到结果呢?
我的理解是这样的, 既然题目要求在这个内存输入代码, 那么CS一定要指向这里,即:CS=2000,IP=0, 好, 那么我们来试一试, 看是不是这样呢

【上图上真相!】

D:\ASM>debug
-a 2000:0
2000:0000 mov ax,1
2000:0003 add ax,ax
2000:0005 jmp 2000:0003
2000:0007
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=146D  IP=0100   NV UP EI PL NZ NA PO NC
146D:0100 883E1E99      MOV     [991E],BH                          DS:991E=00
-
=============================================================================
清注意上面的CS,IP的值, 我们只在2000:0输入了‘数据’
-r cs
CS 146D
:2000
-r ip
IP 0100
:0
============================================================================
我们修改了CS和IP的值, 这时在2000:0里的才是‘代码’
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=2000  IP=0000   NV UP EI PL NZ NA PO NC
2000:0000 B80100        MOV     AX,0001
-t

AX=0001  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=2000  IP=0003   NV UP EI PL NZ NA PO NC
2000:0003 01C0          ADD     AX,AX
-t

AX=0002  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=2000  IP=0005   NV UP EI PL NZ NA PO NC
2000:0005 EBFC          JMP     0003
-t

AX=0002  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=2000  IP=0003   NV UP EI PL NZ NA PO NC
2000:0003 01C0          ADD     AX,AX
-
======================================================================
我的理解, 希望对大家,尤其是才学的朋友, 有点启迪!
多debug~~~~
regex
[第1楼]   [ 回复时间:2010-01-08 00:40 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
总结一下, 就是由的题目看似简单, 可是要求我们debug的时候, 需要注意的寄存器一个都不要放过。用代码感觉相关寄存器的变化。加载程序的时候, 以及光是debug的时候, 他们的值都是不一样的!
acool
[第2楼]   [ 回复时间:2010-01-08 15:01 ]   [引用]   [回复]   [ top ] 
荣誉值:49
信誉值:0
注册日期:2008-10-15 16:15
楼主做的是一个方法。

D:\ASM>debug 
-a 2000:0 
2000:0000 mov ax,1 
2000:0003 add ax,ax 
2000:0005 jmp 2000:0003 
2000:0007 
-r 
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=146D  ES=146D  SS=146D  CS=146D  IP=0100   NV UP EI PL NZ NA PO NC 
146D:0100 883E1E99      MOV     [991E],BH                          DS:991E=00 

============================================================================= 
注意r命令后cs ip的值,没有指向20000H。可以用u 2000:0或d 2000:0 这样指名地址查看。
但是要执行20000H处指令的话,要求cs:ip必须指向20000H。
acool
[第3楼]   [ 回复时间:2010-01-08 15:03 ]   [引用]   [回复]   [ top ] 
荣誉值:49
信誉值:0
注册日期:2008-10-15 16:15
更多debug的命令使用,可以在debug下输入“?”,然后敲回车查看帮助。


C:\DOCUME~1\ADMINI~1>debug
-?
assemble     A [address]
compare      C range address
dump         D [range]
enter        E address [list]
fill         F range list
go           G [=address] [addresses]
hex          H value1 value2
input        I port
load         L [address] [drive] [firstsector] [number]
move         M range address
name         N [pathname] [arglist]
output       O port byte
proceed      P [=address] [number]
quit         Q
register     R [register]
search       S range list
trace        T [=address] [value]
unassemble   U [range]
write        W [address] [drive] [firstsector] [number]
allocate expanded memory        XA [#pages]
deallocate expanded memory      XD [handle]
map expanded memory pages       XM [Lpage] [Ppage] [handle]
display expanded memory status  XS
regex
[第4楼]   [ 回复时间:2010-01-08 23:48 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
感谢acool兄指点!!!
baoss123
[第5楼]   [ 回复时间:2010-01-09 09:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-06 23:29
但继续执行,AX的内容会累加为10.望指教
AX=0004  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AED  ES=0AED  SS=0AED  CS=2000  IP=0005   NV UP EI PL NZ NA PO NC
2000:0005 EBFC          JMP     0003
-t

AX=0004  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AED  ES=0AED  SS=0AED  CS=2000  IP=0003   NV UP EI PL NZ NA PO NC
2000:0003 01C0          ADD     AX,AX
-t

AX=0008  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AED  ES=0AED  SS=0AED  CS=2000  IP=0005   NV UP EI PL NZ NA PO NC
2000:0005 EBFC          JMP     0003
-t

AX=0008  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AED  ES=0AED  SS=0AED  CS=2000  IP=0003   NV UP EI PL NZ NA PO NC
2000:0003 01C0          ADD     AX,AX
-t

AX=0010  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AED  ES=0AED  SS=0AED  CS=2000  IP=0005   NV UP EI PL NZ AC PO NC
2000:0005 EBFC          JMP     0003
baoss123
[第6楼]   [ 回复时间:2010-01-09 09:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-06 23:29
出现这个结果会不会是电脑的问题??不知道哪里出现问题,各位麻烦帮忙解答一下。
按照我们平时这样计算,应该就可以得出2的8次方的。
baoss123
[第7楼]   [ 回复时间:2010-01-09 09:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-06 23:29
对了,我知道为什么了,忘了个最简单的,就是AX是以16进制显示的。晕~~~十六进制的10H就等于十进制的16.这样就对了。
regex
[第8楼]   [ 回复时间:2010-01-09 23:52 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
O(∩_∩)O~
regex
[第9楼]   [ 回复时间:2010-01-18 17:30 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
此贴由 贴主 于 [ 2010-01-18 17:30 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved