. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  为何用E命令改不了内存数据? 是系统保护吗?  [已解决] 回复[ 15次 ]   点击[ 410次 ]  
ddspace
[帖 主]   [ 发表时间:2009-03-21 17:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
如题, 操作都正确  单个改 也提示了 回车完以后用D 命令查看 还是原来的数据  这是为什么捏 ?
mouse
[第1楼]   [ 回复时间:2009-03-22 07:49 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
楼主说的是实验一吧,rom是只读的,不能改。
ddspace
[第2楼]   [ 回复时间:2009-03-22 10:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
那为什么 书中的例子能改啊 ····~~~~~~~··
acnbr
[第3楼]   [ 回复时间:2009-03-22 11:54 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2009-03-14 22:04
回复:[第2楼]
------------------
你是在做习题3么,这题目试图修改rom的值,命令执行成功了,但是rom的值不会改变。
wangping198611
[第4楼]   [ 回复时间:2009-03-22 12:11 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-03-15 23:05
是不是没有执行?可能你在操作的时候没有使用t命令进行程序执行吧。程序有的时候在内存中你使用了命令去更改,但是没有执行,可能内存不会改变
ddspace
[第5楼]   [ 回复时间:2009-03-22 23:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
没做习题啊 就是书中介绍 E命令的 例子啊  

E命令本身不就是用来修改 内存中的数据吗?还要T命令去运行? T 命令是用来执行 当前CS IP 指向的指令吧。
ddspace
[第6楼]   [ 回复时间:2009-03-22 23:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
比如 我用 E: FFFF:0000  00 00 00 00 00 00 00  00 
 是把FFFF :0000  以后的 8 个字节都改成零吧   执行完之后不是  
书中例子 好像直接就改了吧 这么说大家明白了吧
mouse
[第7楼]   [ 回复时间:2009-03-23 10:14 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
比如 我用 E: FFFF:0000  00 00 00 00 00 00 00  00 
 是把FFFF :0000  以后的 8 个字节都改成零吧   执行完之后不是  
书中例子 好像直接就改了吧 这么说大家明白了吧
------------------
回复:楼主做的是实验一的第三题。

书中例子 好像直接就改了吧 这么说大家明白了吧
----------------
这个实验的结果应该是肯定的啊,“好像”这个词就不用要了,要自己动手去实验。

然后看看3楼的回复。

这个题下面有提示,如果对实验结果有疑惑去看看1.15(rom是不能改的)

你可以把dos抓图放上来,虚拟dos窗口模式,标题栏点右键/编辑/标记/dos窗口选择要复制的内容回车就行了,然后找地方粘贴出来。
ddspace
[第8楼]   [ 回复时间:2009-03-23 14:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
-d ffff:0000
FFFF:0000  EA 5B E0 00 F0 30 35 2F-33 30 2F 30 35 00 FC 00   .[...05/30/05...
FFFF:0010  34 12 00 00 00 00 00 00-00 00 00 00 00 00 00 00   4...............
FFFF:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
FFFF:0030  70 00 2E 8E 06 30 00 BF-7F 01 B9 02 00 AB 47 47   p....0........GG
FFFF:0040  E2 FB CB 56 50 51 52 57-55 1E 06 53 8B EC 8B 76   ...VPQRWU..S...v
FFFF:0050  12 2E 8E 1E 30 00 8B 44-02 A2 22 00 88 26 08 01   ....0..D.."..&..
FFFF:0060  8B 34 C4 1E 18 00 26 8A-47 01 26 8A 67 0D 26 8B   .4....&.G.&.g.&.
FFFF:0070  4F 12 26 8B 57 14 97 26-8A 47 02 2E 3A 04 73 2C   O.&.W..&.G..:.s,
-e ffff:00 00 00 00 00 00 00 00 00
-d ffff:0000
FFFF:0000  EA 5B E0 00 F0 30 35 2F-33 30 2F 30 35 00 FC 00   .[...05/30/05...
FFFF:0010  34 12 00 00 00 00 00 00-00 00 00 00 00 00 00 00   4...............
FFFF:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
FFFF:0030  70 00 2E 8E 06 30 00 BF-7F 01 B9 02 00 AB 47 47   p....0........GG
FFFF:0040  E2 FB CB 56 50 51 52 57-55 1E 06 53 8B EC 8B 76   ...VPQRWU..S...v
FFFF:0050  12 2E 8E 1E 30 00 8B 44-02 A2 22 00 88 26 08 01   ....0..D.."..&..
FFFF:0060  8B 34 C4 1E 18 00 26 8A-47 01 26 8A 67 0D 26 8B   .4....&.G.&.g.&.
FFFF:0070  4F 12 26 8B 57 14 97 26-8A 47 02 2E 3A 04 73 2C   O.&.W..&.G..:.s,
ddspace
[第9楼]   [ 回复时间:2009-03-23 14:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
说了半天 还说试验 我没做试验   就是书中的例子  只不过我选的地址段不同  E命令不就是改内存数据的吗 为啥我改不了
kkaxiao
[第10楼]   [ 回复时间:2009-03-23 16:56 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-03-20 22:14
你改的是rom里的值,rom里的内容是不能改的.你换个地址,改一下10000H里的内容试试。
mess
[第11楼]   [ 回复时间:2009-03-23 17:12 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
说了半天 还说试验 我没做试验   就是书中的例子  只不过我选的地址段不同  E命令不就是改内存数据的吗 为啥我改不了
------------------
回复:你看看大家说的实验,和你问的问题不一样么

你根据“段地址*16+偏移地址=物理地址”算算
pmsheep82
[第12楼]   [ 回复时间:2009-03-23 20:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-20 06:11
1.15章节里的一句话可以回答你的问题:CPU把逻辑存储器内的A000—FFFF认为是ROM空间(ROM就是只读储存器,是不能改写的!)
A000-FFFF其实指的是段地址,也就是:对CPU来说,只要你改写以A000—FFFF为段地址里的内容,无论偏移地址是多少,都是无效的,明白了吧?

为什么指的是段地址而不是物理地址?因为A000-FFFF是16位而不是20位,所以很肯定它是段地址,是由CPU给出的。

以楼主的贴出的内容为例:

-d ffff:0000
很明显,楼主是想改写段地址为FFFF的内容,而FFFF包含在AOOO-ffff里。
pmsheep82
[第13楼]   [ 回复时间:2009-03-23 23:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-20 06:11
很抱歉,再研究后,发现自己上面的结论是错误的;认为“段地址”这方面是错误的。
发现原因:
-d ffff:0 f
FFFF:0000  EA 5B E0 00 F0 30 34 2F-31 31 2F 30 38 00 FC 00   (查看FFFF0-FFFFF的内容)
-e ffff:0
FFFF:0000  EA.34   5B.67   E0.56   00.18   F0.     30.     34.     2F.
FFFF:0008  31.     31.     2F.     30.     38.     00.     FC.     00.19(尝试对内容作修改)
-d ffff:0 f
FFFF:0000  EA 5B E0 00 F0 30 34 2F-31 31 2F 30 38 00 FC 00  (查看后修改无效)  
-d ffff:10 1f
FFFF:0010  34 12 00 00 00 00 00 00-00 00 00 00 00 00 00 00   (查FFFFF+1即100000-10000F)
-e ffff:10
FFFF:0010  34.12   12.17   00.5c  (尝试对物理地址为100000以后内容作修改)
-d ffff:10 1f
FFFF:0010  12 17 5C 00 00 00 00 00-00 00 00 00 00 00 00 00   (修改成功)
  可看出:  ffff:10 以后就可以用E命令改了。
  很抱歉没有实践就下结论。关于这个问题我想可以从本章置顶的帖子《有关1G内存的编址问题》里看到答案。
按我的猜测应该是Debug调试用其实是基于8086模式的,也就是它的“内存地址空间分配”是和8086一样的,在书中第12页可以看到:
  物理地址C0000-FFFFF是8086各类ROM的空间,因此在这段物理地址内改写内存的内容是无效的。而ffff:10或以后已经不属于8086的内存地址空间范围了,所以用E命令可以改写。
  结论是:debug里“物理地址C0000-FFFFF范围为ROM空间”,所以不能改写。
ddspace
[第14楼]   [ 回复时间:2009-03-25 01:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
明白了 HOHO 谢谢 楼上诸位 本人脾气有点急  对不住了 :)
ddspace
[第15楼]   [ 回复时间:2009-03-25 01:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-03-14 15:44
此贴由 贴主 于 [ 2009-03-25 01:42 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(mouse):5分   3楼(acnbr):5分   4楼(wangping198611):5分   7楼(mouse):5分   10楼(kkaxiao):6分   11楼(mess):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved