|
主题 : : 关于【实验任务(2)】我的理解 [已解决] |
回复[ 9次 ]
点击[ 534次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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~~~~ | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-01-08 00:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
总结一下, 就是由的题目看似简单, 可是要求我们debug的时候, 需要注意的寄存器一个都不要放过。用代码感觉相关寄存器的变化。加载程序的时候, 以及光是debug的时候, 他们的值都是不一样的! | | |
|
|
|
|
[第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。 | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-01-08 23:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
|
|
|
|
|
[第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 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-01-09 09:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-06 23:29 |
出现这个结果会不会是电脑的问题??不知道哪里出现问题,各位麻烦帮忙解答一下。
按照我们平时这样计算,应该就可以得出2的8次方的。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-01-09 09:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-06 23:29 |
对了,我知道为什么了,忘了个最简单的,就是AX是以16进制显示的。晕~~~十六进制的10H就等于十进制的16.这样就对了。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2010-01-09 23:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
|
|
|
|
|
[第9楼]
[ 回复时间:2010-01-18 17:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
此贴由 贴主 于 [ 2010-01-18 17:30 ] 结贴。 结贴原因:问题已解决 | | |