decoder 发表于 2014-5-15 12:40:04

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

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


   在CS:IP读取指令的时候CPU读取内存中的指令是由低地址 -> 高地址的顺序读取的
如图:

而在在读取数据DS:BX(或者其它间接地址等等...)的数据时却又是由高地址 -> 低地址 的顺序读取的
如图:

   我不太明白的是是否只要是CS:IP指向的数据读取顺序就一定是由 低地址 -> 高地址 的顺序
而指向DS:,SS:,ES:等等其他段的数据读取顺序都为高地址 -> 低地址?


沉ジ寞 发表于 2014-5-15 13:03:44

我们读取内存数据的时候,都是从高到低的顺序读的
你说的从低到高 ,那是机器,也就是指令缓冲器读取内存的方式,这个不用管的
你只记住我们按照字的顺序从高到低的顺序读的就行

decoder 发表于 2014-5-15 13:23:11

指令缓冲器的读取方式跟数据区的读取方式是相反的,明白了,谢谢老师

xiaosawanjava 发表于 2014-5-15 14:07:45

你第2涨图,我怎么看也是 从 低往高 读取数据的啊, cs=2000hip=16d(10h) 物理地址为20010,从20010 地址开始读取,然后在读取20011,这不是从低往高吗,哪里从高往低读的?

decoder 发表于 2014-5-15 15:06:04

本帖最后由 decoder 于 2014-5-15 15:07 编辑

xiaosawanjava 发表于 2014-5-15 14:07 static/image/common/back.gif
你第2涨图,我怎么看也是 从 低往高 读取数据的啊, cs=2000hip=16d(10h) 物理地址为20010,从20010 地址 ...
图中8B数据放在20011地址,从内存地址看是高地址,00数据放在20010地址处,是低地址,读取出来的8b00h数据在我们看来是不是按照图中所示方向读的?也就是高地址到低地址的方向?你说的从低往高,指的是地址值的高低,还是看图方向上的高低?
      CS:IP的指令数据楼上老师正解是从低到高的,没错呀,我的意思是cpu读取指令数据的时候数据顺序是从低地址到高地址读取,而将其当作数据读取的时候就会按照相反的顺序进行读取,这就是所谓的小端...吧。

fayisan 发表于 2014-5-15 15:42:37

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

觉得比较详细的,请举起你的手在鼠标上点点加分!谢谢:lol:

xiaosawanjava 发表于 2014-5-15 16:22:06

decoder 发表于 2014-5-15 15:06 static/image/common/back.gif
图中8B数据放在20011地址,从内存地址看是高地址,00数据放在20010地址处,是低地址,读取出来的8b00h数据 ...

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

xiaosawanjava 发表于 2014-5-15 16:29:56

decoder 发表于 2014-5-15 15:06 static/image/common/back.gif
图中8B数据放在20011地址,从内存地址看是高地址,00数据放在20010地址处,是低地址,读取出来的8b00h数据 ...

前面没看明白, 原来是你说读取出来之后 数据的先后顺序,那代码的确是 从低往高排列,而数据这是相反。

decoder 发表于 2014-5-15 16:48:13

xiaosawanjava 发表于 2014-5-15 16:29 static/image/common/back.gif
前面没看明白, 原来是你说读取出来之后 数据的先后顺序,那代码的确是 从低往高排列,而数据这是相反 ...

    嗯,可能我的表述有问题,不管怎样,谢谢指教

xiaosawanjava 发表于 2014-5-15 17:02:47

decoder 发表于 2014-5-15 16:48 static/image/common/back.gif
嗯,可能我的表述有问题,不管怎样,谢谢指教

我觉得 884701 对应的代码 mov ax, ,我觉得为什么要这样排列是因为好对应代码 88 对应mov 47对应ax 01对应 我是说在这句话中是这样对应的。
页: [1]
查看完整版本: 在看零基础入门学习汇编语言视频第八章寻址方式中的一个问题