testh 发表于 2012-06-09 10:51

sanbiangongzi 发表于 2012-06-09 10:00 static/image/common/back.gif
REALMODE下使用SEG:OFFSET访问地址A, 只要 (SEG

说的对,如果访问地址A是按照这种不定的组合方式确定的话,那确实是有很多种组合。
说到这个问题,我又产生了一问题,根据你说的方式,确定一个地址A有多种组合方式,那么有如下问题:
(1)当需要访问地址A时,是由谁确定的SEG和OFFSET的地址?
(2)是否每次访问地址A时,都会有不同的SEG和OFFSET的组合?
(3)上面的问题(2)中提到的组合是随机的,还是按照某种规律决定的?

testh 发表于 2012-06-09 11:22

1MB的内存空间按照16bit的SEG寄存器来说,SEG寄存器可以寻址64K个地址,但是在转换为物理地址时有需要将这个SEG里存放的地址左移4位,也就是乘以十进制的数字16。在实模式寻址这个问题里,16这个数字有些敏感,因为在另外一个地方也有16这个数字,这个地方就是:每个SEG的长度为16字节。这个16字节是怎么来的呢?因为是1MB的空间,又需要分成64K个段,那么很容就算出来,在这个1MB的空间内,每个段有16字节的长度。规定上说,SEG寄存器里面的那个数值乘以16之后表示段地址,这样可以推断出来,实际上SEG寄存器上存放的地址并不是真实的SEG地址,而是表示SEG的序号,即0-65535,然后按照每个段的长度是16字节,也就是说用SEG的序号乘以16就表示SEG寄存器中指定的序号的段的首地址。
这个问题通过下面连接也可以证实。
http://bbs.pediy.com/showthread.php?t=115101

testh 发表于 2012-06-10 18:55

我的帖子怎么没了?

testh 发表于 2012-06-10 19:04

怎么自动又出来了,不过还是缺了一个我对左移4位的描述的帖子?

怪怪虎 发表于 2012-06-11 22:09

段是逻辑的概念。
不管有多少段,都可以想办法使用特定大小的物理内存。比如内存交换。。。

感觉随着技术的进步,一些实质的东西都没封装了,我们站在'前人‘的肩上理解实质,不知道是好还是坏

shaneqi 发表于 2012-06-13 09:27

早回家的男人,讲故事给老婆听;晚回家的男人,编故事给老婆听。

一个人做点好事并不难!我来帮你顶顶!

testh 发表于 2012-06-13 09:35

怪怪虎 发表于 2012-06-11 22:09 static/image/common/back.gif
段是逻辑的概念。
不管有多少段,都可以想办法使用特定大小的物理内存。比如内存交换。。。


唉            

testh 发表于 2012-06-13 15:06

其实,段寄存器中存放的数值并不是表示指定段的地址,而应该是指定段的序号,即范围是0-65535。
按照1MB内存的空间需要分成65535个段(因为段寄存器是16bit,即最大能表示的数值就是65535),这样计算的话,每个段的长度其实是16字节。这个数字16是一个很重要的数字。上面说的段寄存器左移4位,其实就是乘以16(十进制的16),这样一来,段寄存器的左移4位的含义其实就是:用指定段的序号x每段的长度16字节=指定段的地址,这个地址就是1MB范围内的地址。

testh 发表于 2012-06-13 15:08

这样就确定了CS寄存器的值,但是IP这样的寄存器的值是如何确定的呢?

sanbiangongzi 发表于 2012-06-13 16:09

testh 发表于 2012-06-09 10:51 static/image/common/back.gif
说的对,如果访问地址A是按照这种不定的组合方式确定的话,那确实是有很多种组合。
说到这个问题,我又产生了一问题,根据你说的方式,确定一个地址A有多种组合方式,那么有如下问题:
(1)当需要访问地址A时,是由谁确定的SEG和OFFSET的地址?
(2)是否每次访问地址A时,都会有不同的SEG和OFFSET的组合?
(3)上面的问题(2)中提到的组合是随机的,还是按照某种规律决定的?


回答问题1: 程序员决定的.
页: 1 [2]
查看完整版本: 实模式下8086的寻址