寒塘渡月影 发表于 2012-5-8 18:59:34

谁能教我做汇编检测2.2的题,在下感激不尽

梦想与现实 发表于 2012-5-8 18:59:35

首先第一题:
寻址方式是:段地址×16+偏移地址=物理地址
题目中给定的段地址是0001H
那么 段地址*16在8086汇编16位汇编里面的意思就是:在给定的段地址左移一位(按照默认的16进制计算),0001H左移一位就变成了00010H
再说偏移地址:
我们知道8086的16位汇编的寻址范围最大是2^16也就是64KB,这个在第一章已经涉及到了,那么按照16进制的方式64KB也就是说寻址范围是0~FFFFH
所以在给定段地址0001H的基础上的寻址范围就是:00010H+FFFFH,然后你用计算器算一下16进制的加法最后得出的结果就会是1000FH

下面说第二题:
根据本题的提示:我们要找到,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H单元

同样的道理,16位地址的寻址能力是64KB,也就是0~FFFFH,因为一个段地址的起始地址一定是16的倍数,一个数据的16进制形式左移1位,相当于乘以16,即是左移后的段地址能被10H整除,所以偏移地址就不能取到FFFFH了,即偏移地址的取值范围为 0H~FFF0H了
具体为什么,FFFF不能被10整除,而FFF0就可以呢,这个问题你就要打开计算器来算一下了,首先点击16进制输入FFFF,然后转换为10进制就是65535,很明显不能被10整除吗,然后FFF0同理转换为10进制就是65520,很明显就是可以被10整除吗,即偏移地址的取值范围为 0H~FFF0H了

下面开始计算真正的取值范围,同样也是一道算术题:
SA(最小值为)=(20000H-FFF0H)/16=10010H/16=1001H
SA(最大值为)=(20000H-0H)/16=20000H/16=2000H

这样你应该能够理解了吧!
很多同学在遇到这道题的时候,就应该拿出来计算器算一下就一目了然了!

雨落的瞬间 发表于 2012-5-8 19:17:24

是全部吗?...还是哪一题

NGtailang 发表于 2012-5-8 20:51:22

认真看书,好好学视频,自己多想。

1541287173 发表于 2012-5-8 22:09:09

无语!虽然小甲鱼老师的视频很通俗!但是对一些什么都不会的新手来说!好像还是会有一点难度的!!{:5_99:}

侮辱后的坚强 发表于 2012-5-9 15:22:47

我看了不太难   你好好看看小甲鱼的视频就ok了呵呵呵

侮辱后的坚强 发表于 2012-5-9 15:25:43

1541287173 发表于 2012-5-8 22:09 static/image/common/back.gif
无语!虽然小甲鱼老师的视频很通俗!但是对一些什么都不会的新手来说!好像还是会有一点难度的!!

那你就多看点书例如看一哈 一到三章

马可波罗 发表于 2012-5-11 14:07:26

梦想与现实 发表于 2012-5-8 19:49 static/image/common/back.gif
首先第一题:
寻址方式是:段地址×16+偏移地址=物理地址
题目中给定的段地址是0001H


对你的解释提出异议,不能令我信服

1541287173 发表于 2012-5-11 15:33:55

侮辱后的坚强 发表于 2012-5-9 15:25 static/image/common/back.gif
那你就多看点书例如看一哈 一到三章

明白了!谢谢了!!{:5_100:}

欲速则不达 发表于 2012-5-11 15:55:18

同学,我俩互相学习吧,加我好友

侮辱后的坚强 发表于 2012-5-11 16:31:29

1541287173 发表于 2012-5-11 15:33 static/image/common/back.gif
明白了!谢谢了!!

一起学习   额呵呵呵呵呵呵呵呵

梦想与现实 发表于 2012-5-11 18:58:21

马可波罗 发表于 2012-5-11 14:07 static/image/common/back.gif
对你的解释提出异议,不能令我信服

那请问哪里有问题呢不知道能不能提出来 大家一起参考一下呢我也正好有个机会能够提高一下水平 ,感谢

谢青源 发表于 2012-5-11 22:13:13

刚开始的时候我也搞不懂那里,不过有个重要的细节你要记住,    先不要想段地址,你要想偏移地址怎么和段地址配合,那样你就很容易理解

退聊人物;战孜瞳 发表于 2012-5-13 13:20:54

(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH 。



解题过程:

物理地址=SA*16+EA

   

EA的变化范围为0h~ffffh

   

物理地址范围为(SA*16+0h)~(SA*16+ffffh)

   

现在SA=0001h,那么寻址范围为

   

(0001h*16+0h)~(0001h*16+ffffh)

   

=0010h~1000fh

退聊人物;战孜瞳 发表于 2012-5-13 13:21:40


一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为 1001H ,最大为 2000H 。

当段地址给定为 1001H 以下和 2000H 以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。

   



解题过程:

物理地址=SA*16+EA

   

20000h=SA*16+EA

   

SA=(20000h-EA)/16=2000h-EA/16

   

EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值

   

EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值





这里的ffffH/16=fffh是通过WIN自带计算器算的

位移来算确实应该为fff.fh,这里小数点后的f应该是省略了

单就除法来说,应商和余数,但此题要求的是地址最大和最小,所以余数忽略了

   

如果根据位移的算法(段地址*16=16进制左移一位,小数点后应该是不能省略的

我们可以反过来再思考下,如果SA为1000h的话,小数点后省略

SA=1000h,EA取最大ffffh,物理地址为1ffffh,将无法寻到20000H单元

这道题不应看成是单纯的计算题

1541287173 发表于 2012-5-13 20:01:25

梦想与现实 发表于 2012-5-11 18:58 static/image/common/back.gif
那请问哪里有问题呢不知道能不能提出来 大家一起参考一下呢我也正好有个机会能够提高一下水平 ,感谢

恩恩!!!{:5_94:}

这神奇的汇编 发表于 2012-5-19 14:48:57

重复的看下教程{:1_1:}

NGtailang 发表于 2012-5-20 14:59:20

这个就是看了视频不看书。看后又不温习的结果

橙子 发表于 2012-5-20 15:48:09

2.1是讲的有点不清楚。不过现在我是搞懂了。

马可波罗 发表于 2012-6-4 09:54:44

梦想与现实 发表于 2012-5-11 18:58 static/image/common/back.gif
那请问哪里有问题呢不知道能不能提出来 大家一起参考一下呢我也正好有个机会能够提高一下水平 ,感谢

不好意思 ,这么久了才回贴。你的解题思路是对的,但是其中有一些细节没有分清楚。我想思路与文字一致,才能使我们这些初学者不会产生误解的。{:5_91:}
1.“因为一个段地址的起始地址一定是16的倍数”,段地址是用16位寄存器记录的,范围在0-ffff之间,可以不是16的倍数。在计算地址时,要乘16。
2.“首先点击16进制输入FFFF,然后转换为10进制就是65535,很明显不能被10整除吗,然后FFF0同理转换为10进制就是65520,很明显就是可以被10整除”。这句中的16与10的整除不知道是不是作者写错了。fff0能被10h整除,相当于65520能被16整除。初学者看到这里易产生费解的。
页: [1] 2
查看完整版本: 谁能教我做汇编检测2.2的题,在下感激不尽