鱼C论坛

 找回密码
 立即注册
查看: 7902|回复: 13

[汇编作业] 检测点2.2

[复制链接]
发表于 2021-3-27 16:43:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
检测点2.2的题目(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为(10)H到(1000)H。
                       (2)有一数据存放在内存20000H单元中现给定段地址为SA,若想用偏移地址寻到单元。则SA应满足的条件是:最小为(1001)H,最大为(2000)H.
            

(1)套用公式:物理地址=段地址X16 + 偏移地址
               最小寻址值:物理地址=0001H X16+0H   (H代表该数为16进制)
                                                  =0010H+0H
                                                  =0010H
                                                  =10H
              最大寻址值:物理地址=0001HX16+FFFFH      (FFFF,偏移地址为16位,变换范围0——FFFFH)
                                              =0010H+FFFFH
                                              =1000FH
              
     (2)物理地址=段地址X16 + 偏移地址
            偏移地址最大时,SA的值最小

             20000H=SAX16+FFFFH
               2000H=SA+FFFFH/16         //   为了方便计算可以先把FFFFH转换为十进制
               2000H=SA+65535/16
               2000H=SA+4095      
               2000H=SA+FFFH        //    再次把4905(十进制)转换为十六进制(FFFH)
                    SA=2000H-FFFH
                    SA=1001H
        因为 当偏移地址最小时,SA的值最大
                        所以:SA最大值为:2000H = SA+0H

             这是我在论坛里复制的,因为和我所写的差不多 ,我自己又是拿草稿纸写的,字不行,只有复制了一些,加上了我的理解请谅解,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-30 14:24:45 | 显示全部楼层
刚做完这个检测点,来对一下答案~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-5-24 18:06:27 From FishC Mobile | 显示全部楼层
段地址 最小为1001h    最大值为 2000h
这样的话   物理地址 =sa*16+ea
      选最小值 来计算
     10010h+ffffh 等于  2000fh
          这就大于   20000h 了
百思不得解,求解惑啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2021-5-25 06:40:39 | 显示全部楼层
本帖最后由 freedomOO 于 2021-5-25 06:42 编辑
Salubrious 发表于 2021-5-24 18:06
段地址 最小为1001h    最大值为 2000h
这样的话   物理地址 =sa*16+ea
      选最小值 来计算


我自己是这么想的,因为,我是用window计算机计算的,所以FFFFH/16=FFFH,没有保留后面小数点的数值,如果根据位移的算法(段地址*16=16进制左移一位),小数点后应该是不能省略的 ,所以FFFFH/16=FFF.FH,
如果舍去的话,我们向前进一位也就是FFFH+1 = 1000H,  所以
SA=2000H-(FFFH+1)
SA=1000H
这样的话SAx16+FFFFH= 1FFFFH,就没有超过20000H了,
但是结果还是不会直接等于20000H,毕竟是四舍五入的得到的,你看看
因为这是我自己想的,也不知道正不正确,如果你找到更好的解释,请你帮我改正


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-5 20:57:02 | 显示全部楼层
本帖最后由 fc520 于 2021-6-5 21:05 编辑
Salubrious 发表于 2021-5-24 18:06
段地址 最小为1001h    最大值为 2000h
这样的话   物理地址 =sa*16+ea
      选最小值 来计算


最大地址:
20000H
- 0000H
20000H
最终值SA右移一位2000H

最小地址:
10010H(SA)
+ FFF0H
20000H(目标单元)
这个不能偏移FFFF,因为段地址SA是左移一位,计算的时候最后一位是0,对应的偏移地址最后必须是0,其他的最大化,所以最小SA是1001H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-19 08:29:02 | 显示全部楼层
fc520 发表于 2021-6-5 20:57
最大地址:
20000H
- 0000H

谢谢,您的解答,现在我知道了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-19 08:50:02 | 显示全部楼层
本帖最后由 freedomOO 于 2021-6-19 08:52 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-19 08:52:44 | 显示全部楼层
fc520 发表于 2021-6-5 20:57
最大地址:
20000H
- 0000H

我现在又多了个疑问?计算的时候最后一位是0,为什么对应的偏移地址最后必须是0,呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-19 08:59:07 | 显示全部楼层
fc520 发表于 2021-6-5 20:57
最大地址:
20000H
- 0000H


我觉得应该是这样的

20000H=16SA+0000H  ;这个你能理解吧,sa = 2000h ,这个就不说了

20000H=16SA+FFFFH
20000h - ffffh = 16sa ;这个能看懂吧
10001h = 16sa
10001h / 16 = sa ;这个也能看懂吧,两边同时除以16
10001h / 16 等于多少?
应该这样理解,ffff * 16 = ffff0,对吧,左移一位
10001h / 16 = 1000h ; 这里假设等于,应该说是约等于
那么
1000h * 16 + ffffh = 1ffff 不等于20000h,为什么不等于?,因为刚刚 10001h / 16时是直接右移了一位,10001h 中的1被移没了,现在不够了,怎么办?
好办^_^
既然不够了,那加一点就行了,怎么加?
ffff已经最大了
只能是sa加1
1001h * 16 + (这里还是ffffh吗) = 20000h
因为sa加了1
所以ea得相应的减一点,减多少?
1001h * 16 = 10010h
20000h - 10010h = fff0
所以
1001h * 16 + fff0 = 20000h
分析完毕^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2021-7-27 14:11:18 | 显示全部楼层
当偏移地址最小时,SA的值最大时为什么不是2000H = SA*16+0H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-31 00:23:04 | 显示全部楼层
本帖最后由 fc520 于 2021-8-31 00:56 编辑
freedomOO 发表于 2021-6-19 08:52
我现在又多了个疑问?计算的时候最后一位是0,为什么对应的偏移地址最后必须是0,呢?


段地址1001H+FFFFH直接溢出大于20000H,

不溢出的情况下,最后一位数就必须相同,
计算的时候SA左移一位,所以最后一位是0,偏移地址的最后一位也就是0了,
你再看一遍:
10010H(SA左移一位,最后为0)
+FFF0H(偏移地址只要大于0,地址都会溢出,大于20000H)
20000H(目标的最大地址)

看了上面的,你可能还是会有点懵:
1. 偏移地址不会超过1000H,那么SA一定要大于等于1000H
2. 偏移地址最大值FFFFH,加上SA(1000H)还是小于20000H,
3. 那么只能SA+1,即1001H,
4. 现在就是一个简单加减计算了:20000H - 10010H = FFF0H
5. 但是这种思路还是绕了一点路,你再细细品味(因为段地址SA是左移一位,计算的时候最后一位是0,对应的偏移地址最后必须是0,其他的最大化,所以最小SA是1001H)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-31 00:28:24 | 显示全部楼层
本帖最后由 fc520 于 2021-8-31 00:37 编辑
freedomOO 发表于 2021-6-19 08:59
我觉得应该是这样的

20000H=16SA+0000H  ;这个你能理解吧,sa = 2000h ,这个就不说了


20000H=16SA+FFFFH

SA为任何值,16SA+FFFFH都不会等于20000H,
20000H的最低4位都是0,FFFFH的最低4位都是1,永远都不会相等,
而且计算机的原理是很严谨的,0是0,1是1,
最好不要带着约等于这样思想去学习,他一定是有严谨的推导过程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 21:17:08 | 显示全部楼层
freedomOO 发表于 2021-6-19 08:59
我觉得应该是这样的

20000H=16SA+0000H  ;这个你能理解吧,sa = 2000h ,这个就不说了

我感觉是这样10001/16   左移一位是末尾1向前移动了一位变成1001,得到这个1001段地址*16+EA=20000H,然后反向求出20000H-16*1001=FFF0, 我在算的时候是这样的想的,我也不知道对错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-7 04:40:17 | 显示全部楼层
Salubrious 发表于 2021-5-24 18:06
段地址 最小为1001h    最大值为 2000h
这样的话   物理地址 =sa*16+ea
      选最小值 来计算

我开始题目都没看懂
段地址的最小值,就是要让偏移地址最大 即20000h-ffffh,结果是10001h,但是段地址不可能是小数,所以只能向上取,只能是10010h,右移还原后就是1001h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表