. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  为什么将123c8分成1230跟00c8而不是1200,03c8?  [待解决] 回复[ 13次 ]   点击[ 658次 ]  
helloworld
[帖 主]   [ 发表时间:2007-10-20 17:45 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
那个段地址x16的看不懂,好像要先把1230分出来,再x16才变成12300,但不知道为什么要抽前3位123而不是前两位12
cxn
[第1楼]   [ 回复时间:2007-10-20 22:35 ]   [引用]   [回复]   [ top ] 
荣誉值:179
信誉值:6
注册日期:2007-07-09 19:18
提问时说明是多少页,好找一点 呵呵.
123c8分成1230跟00c8 和1200跟03c8都是指向的同一个内存单元都是正确的.
helloworld
[第2楼]   [ 回复时间:2007-10-20 23:23 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
不好意思我太着急了所以忘了这点,我是看到第二章的2.6节

图2.7地址加法的过程,最后输出123C8,其间原来是经过了CS跟IP的折分然后再加起来的结果,我就不明白为什么他要将1230存在CS,00C8放在IP, 而不是将1200存在CS,03C8存在IP,就是这个问题了。

另外结合我前面的问题,我不明白为什么CPU不能直接输入123C8呢,不就五个数字嘛现在的CPU都这么快了还要折开来算啊
helloworld
[第3楼]   [ 回复时间:2007-10-21 11:32 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
对于这个问题 我刚才再看了一下书 已经搞明白了

其实 段地址x16 并不是理解成: 段地址乘以16,而是理解成:段地址向左偏移一位,表面上看1230 X 16是怎么不可能等于12300的,但是因为1230是16进制,所以写成1230 X 10,表面上虽然是得到了12300,但不符合寄存器的加法原理,因为16进制向左偏移一位就是16的1倍,所以就要用1230 X 16这种形式来表达

不知道我这样理解对不对呢
helloworld
[第4楼]   [ 回复时间:2007-10-21 11:37 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
所以 如果将123C8分成1200 跟 03C8 ,那得出来的结果则是:

1200 X 16=12000+03C8 = 123C8 (一样的结果)

所以就不懂了,都是一样的结果,但就有两种方法,实际寄存器是会用哪种方法处理123C8H呢
bug
[第5楼]   [ 回复时间:2007-10-21 13:06 ]   [引用]   [回复]   [ top ] 
荣誉值:22
信誉值:0
注册日期:2007-09-24 10:42
书上讲的是8086CPU,8086是16位cpu,它通过两个16地址合成一个20位物理地址(内存地址)。
20位物理地址 = 段地址 * 16 + 偏移地址。
物理地址123C8H, 可以分成多种段地址和偏移地址的组合,这种组合不是CPU拆分的,是程序员要操作这个地址,他设置好对应的段地址和偏移地址。知道满足 20位物理地址 = 段地址 * 16 + 偏移地址,都是对的。

8086CPU寄存器都是16位的,没办法存下123C8H这个地址,所以cpu无法直接使用123C8H地址。
helloworld
[第6楼]   [ 回复时间:2007-10-21 14:09 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
哦我明白了,反正是程序员写代码时,只要能让CPU识别出是123C8H这个地址就可以了

比方说我写两行代码
 mov cs,1230H
 mov ip,00C8H

跟下面两行代码是一样的吧
mov cs,1200H
mov ip,00C8H
helloworld
[第7楼]   [ 回复时间:2007-10-21 14:14 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
应该是 mov cs,1200H
       mov ip,03C8H
我上面打错了
bug
[第8楼]   [ 回复时间:2007-10-21 16:49 ]   [引用]   [回复]   [ top ] 
荣誉值:22
信誉值:0
注册日期:2007-09-24 10:42
1230:00c8  或 1200:03c8 指向的都是地址123c8这个地址。
cxn
[第9楼]   [ 回复时间:2007-10-21 22:43 ]   [引用]   [回复]   [ top ] 
荣誉值:179
信誉值:6
注册日期:2007-07-09 19:18
现实的问题是先有的cs ip中的值才算出来的物理地址.在这里没有必要追究分成1230:00c8  或 1200:03c8 
只要大家明白它们代表同一个物理地址就行了.
cyberknight
[第10楼]   [ 回复时间:2019-03-09 10:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2019-03-07 08:20
只要物理地址经过换算之后一致就可以了
下面的写法从物理地址上来说都一样
mov ax,1200h
mov cs,ax
mov ip,03c8h


mov ax,1230h
moc cs,ax
mov ip,0c8h
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved