鱼C论坛

 找回密码
 立即注册
查看: 1793|回复: 9

在看零基础入门学习汇编语言视频第八章寻址方式中的一个问题

[复制链接]
发表于 2014-5-15 12:40:04 | 显示全部楼层 |阅读模式

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

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

x
    看了小甲鱼老师第八章02课时小甲鱼老师用视频演示的寻址过程描述中有个问题我无法理解,在这里向老师请教


   在CS:IP读取指令的时候CPU读取内存中的指令是由  低地址 -> 高地址  的顺序读取的
如图:
机器码指令读取.jpg
而在在读取数据DS:BX(或者其它间接地址等等...)的数据时却又是由  高地址 -> 低地址 的顺序读取的
如图:
数据读取.jpg
   我不太明白的是是否只要是CS:IP指向的数据读取顺序就一定是由 低地址 -> 高地址 的顺序
而指向DS:[XX],SS:[XX],ES:[XX]等等其他段的数据读取顺序都为  高地址 -> 低地址?


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

使用道具 举报

发表于 2014-5-15 13:03:44 | 显示全部楼层
我们读取内存数据的时候,都是从高到低的顺序读的
你说的从低到高 ,那是机器,也就是指令缓冲器读取内存的方式,这个不用管的
你只记住我们按照字的顺序从高到低的顺序读的就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 13:23:11 | 显示全部楼层
指令缓冲器的读取方式跟数据区的读取方式是相反的,明白了,谢谢老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-15 14:07:45 | 显示全部楼层
你第2涨图,我怎么看也是 从 低往高 读取数据的啊, cs=2000h  ip=16d(10h) 物理地址为20010,从20010 地址开始读取,然后在读取20011,这不是从低往高吗,哪里从高往低读的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 15:06:04 | 显示全部楼层
本帖最后由 decoder 于 2014-5-15 15:07 编辑

图中8B数据放在20011地址,从内存地址看是高地址,00数据放在20010地址处,是低地址,读取出来的8b00h数据在我们看来是不是按照图中所示方向读的?也就是高地址到低地址的方向?你说的从低往高,指的是地址值的高低,还是看图方向上的高低?
      CS:IP的指令数据楼上老师正解是从低到高的,没错呀,我的意思是cpu读取指令数据的时候数据顺序是从低地址到高地址读取,而将其当作数据读取的时候就会按照相反的顺序进行读取,这就是所谓的小端...吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-15 15:42:37 | 显示全部楼层
刚下了视频,看了以后,
发现:这里演示的是CPU读取数据的演示录像,
CPU读取的顺序应该是从低位向高位,
也就是为什么我们在看到14FB的时候要理解为这是FB14。
楼主这里图一中,由低向高读取的是指令,8B4701是MOV AX,[BX+1]指令数据,OK?这个指令是要放在指令缓冲寄存器中,配合DS、BX算出这个8B4701指令指向的段地址和偏移地址,也就是DS:2000,偏移地址为:000F+1,就是20010。
后面你应该懂了吧?
因为AX是字型而20010指向只有“00”,
借高位读取“8B”,这时候AX的值就应该是8B00.OK?

觉得比较详细的,请举起你的手在鼠标上点点加分!谢谢:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-15 16:22:06 | 显示全部楼层
decoder 发表于 2014-5-15 15:06
图中8B数据放在20011地址,从内存地址看是高地址,00数据放在20010地址处,是低地址,读取出来的8b00h数据 ...


数据读取也不是从高往低,你想一下最后的物理地址是20010,从这一点就可以看出来他绝对是先读取00这个数据,然后在读取8B这个数据,而最后的数据是8B00,而不是008B,所以你就认为是从高往低读取的。但其实是因为,高位8位存放在高地址,低8位存放在低地址,假设 这条指令是这样字的 mov ax,cs:[0016]  从低往高读, 读取16也就是10h 这个地址的 数据00 放到al 因为低地址对应低8位 al,然后在读取 10+1  ,11h这个地址的数据 8B ,相对于10h,11h这个地址是高地址,所以对应高8位 ah, 而我们看任何数据,都是左边是高位右边是低位,所以 就是 8B00 ,而不是008B,如果楼主要是要强调数据是从 高往低 读取的那我也没办法,而且我想说,无论是数据还是代码,cpu不认识,cpu只会一种读取方式,具体什么是代码,什么是数据,是我们设置cs或者ds来告诉cpu的,所以管是你数据还是代码,cpu只会从低往高读取,至于你要读什么就根据cs和ds来决定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-15 16:29:56 | 显示全部楼层
decoder 发表于 2014-5-15 15:06
图中8B数据放在20011地址,从内存地址看是高地址,00数据放在20010地址处,是低地址,读取出来的8b00h数据 ...

前面没看明白, 原来是你说  读取出来之后 数据的先后顺序,那代码  的确是 从低往高排列,而数据这是相反。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 16:48:13 | 显示全部楼层
xiaosawanjava 发表于 2014-5-15 16:29
前面没看明白, 原来是你说  读取出来之后 数据的先后顺序,那代码  的确是 从低往高排列,而数据这是相反 ...

    嗯,可能我的表述有问题,不管怎样,谢谢指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-15 17:02:47 | 显示全部楼层
decoder 发表于 2014-5-15 16:48
嗯,可能我的表述有问题,不管怎样,谢谢指教

我觉得 884701 对应的代码 mov ax,[bx] ,我觉得为什么要这样排列是因为好对应代码 88 对应mov 47对应ax 01对应[bx] 我是说在这句话中是这样对应的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-31 05:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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