谁能教我做汇编检测2.2的题,在下感激不尽
首先第一题:寻址方式是:段地址×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
这样你应该能够理解了吧!
很多同学在遇到这道题的时候,就应该拿出来计算器算一下就一目了然了! 是全部吗?...还是哪一题 认真看书,好好学视频,自己多想。 无语!虽然小甲鱼老师的视频很通俗!但是对一些什么都不会的新手来说!好像还是会有一点难度的!!{:5_99:} 我看了不太难 你好好看看小甲鱼的视频就ok了呵呵呵 1541287173 发表于 2012-5-8 22:09 static/image/common/back.gif
无语!虽然小甲鱼老师的视频很通俗!但是对一些什么都不会的新手来说!好像还是会有一点难度的!!
那你就多看点书例如看一哈 一到三章 梦想与现实 发表于 2012-5-8 19:49 static/image/common/back.gif
首先第一题:
寻址方式是:段地址×16+偏移地址=物理地址
题目中给定的段地址是0001H
对你的解释提出异议,不能令我信服 侮辱后的坚强 发表于 2012-5-9 15:25 static/image/common/back.gif
那你就多看点书例如看一哈 一到三章
明白了!谢谢了!!{:5_100:} 同学,我俩互相学习吧,加我好友 1541287173 发表于 2012-5-11 15:33 static/image/common/back.gif
明白了!谢谢了!!
一起学习 额呵呵呵呵呵呵呵呵 马可波罗 发表于 2012-5-11 14:07 static/image/common/back.gif
对你的解释提出异议,不能令我信服
那请问哪里有问题呢不知道能不能提出来 大家一起参考一下呢我也正好有个机会能够提高一下水平 ,感谢 刚开始的时候我也搞不懂那里,不过有个重要的细节你要记住, 先不要想段地址,你要想偏移地址怎么和段地址配合,那样你就很容易理解 (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
一数据存放在内存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单元
这道题不应看成是单纯的计算题
梦想与现实 发表于 2012-5-11 18:58 static/image/common/back.gif
那请问哪里有问题呢不知道能不能提出来 大家一起参考一下呢我也正好有个机会能够提高一下水平 ,感谢
恩恩!!!{:5_94:} 重复的看下教程{:1_1:} 这个就是看了视频不看书。看后又不温习的结果 2.1是讲的有点不清楚。不过现在我是搞懂了。 梦想与现实 发表于 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