woshixx189 发表于 2011-5-15 09:05:29

还有这里,为什么不是FFFFH呢?

本帖最后由 loop 于 2011-5-15 23:58 编辑

http://upload.ouliu.net/k/d4a3881b40f27e23fe32c585005b68e8.png

红圈处,为什么是FFF0H,而不是FFFFH 呢?

风扫地 发表于 2011-5-15 13:16:58

好像。图片挂了。。。

winddyj 发表于 2011-5-15 14:14:25

因为段地址FFFFH-64K就是FFF0H,为什么要用FFFFH减呢,看看书

超越自我 发表于 2011-5-15 15:26:14

这真是邪乎呢,求高手解释?{:5_94:}

iaistudy 发表于 2011-5-15 16:05:48

1001H×16=10010H
10010H
+FFF0H
自己一位一位加一加,不是20000H吗!!      

lxbwyr 发表于 2011-5-15 16:28:51

本帖最后由 lxbwyr 于 2011-5-15 16:30 编辑

我帮你分解一下。看看你能不能理解。
       首先来说一下在8086CUP中一个段的偏移值范围是0H-FFFFH。
       一般来讲一个段的偏移地址的取值最大是FFFFH,这是没有错的。

         但是这里被20000H这个值约束了这个最大的取值。如果偏移值最大是FFFFH,那么SA可取最小值20000H - FFFFH = 10001H。但是段地址要求是16进制的倍数(比如可以是10000或10010或10020,也就是说最后一位应是0 【16的倍数】。很重要

       那么10001H这个值 就能不做为段地址了。那比这大一点的数10002H-10005H……10010H……这些值只有10010H能是16进制的倍数,且是倍数中的最小值 。符合做为段地址的取值要求

       10010H变成段地址就是1001H   【16的倍数】。很重要
       那么20000H-10010H=FFF0H.

这样就得出偏移地址的最大值为什么不是FFFFH,而是FFF0了。
:):)

sunhopp 发表于 2011-5-15 16:41:12

本帖最后由 sunhopp 于 2011-5-15 16:51 编辑

因为内存地址为 20000H

最小值:为 1001H,要寻的地址为 20000H,20000H-(1001H*16)=FFF0H
最大值:为 2000H,因为基地址在寻址时要左移一位(2000H*16=20000H)

xiaoji 发表于 2011-5-15 17:36:06

:)kan kan o

woshixx189 发表于 2011-5-15 23:19:39

lxbwyr 发表于 2011-5-15 16:28 static/image/common/back.gif
我帮你分解一下。看看你能不能理解。
       首先来说一下在8086CUP中一个段的偏移值范围是0H-FFFFH。
   ...

{:5_95:} 非常感谢!

超越自我 发表于 2011-5-16 12:41:34

真是细节决定成败呀!{:5_92:}
页: [1]
查看完整版本: 还有这里,为什么不是FFFFH呢?