汇编CPU物理寻址,怎么判断指令还是数据,以及读的字节长短

在内存中 指令和数据没有任何区别,都是二进制信息,CPU工作的时候有时候把有的信息看做指令,有的信息看做数据,CPU根据什么将内存中的信息看做指令?CPU将CPU:IP的指向的内存单元中的内容看做指令,因为,在任何时候,CPU将CS:IP中的内容当做指令的段地址和便宜地址,用他们合成的指令的无力地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被CPU执行过的话,那么,它所爱的内存单元必然被CS:IP指向过如果渎职和执行,根据CS:IP的呢日用送入地址加法器(地址加法器完成,物理地址=段地址x16+偏移地址)得到无力地址为:20000在内存中怎么知道读取是读3个字节还是两个字节呢??

这个是有指令确定的,汇编的伪指令中间如果是DB就是表示要操作的是一个字节,如果是DW就是一个字(双字节),如果是DD就是双字(四个字节),当然如果是双字DD的话,十六位寄存器DX是放不下的,就要有附加的寄存器EX(16位)和DX共同来存放。还有一个寄存器AX是用来计数的,一般循环多少次就有AX来确定(每循环一次-1,直到为0)。追问

其实我的最想不通的问题是这个

如图所示,从20000物理地址开始,CPU如果知道在20002位置结束

以及 转换成汇编 是 mov ax,0123

你说有指令确定,是我这个图上的东西少了什么吗,以至于我很难理解这个问题

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-25
寻址时,以8bit的一个字节为基本管理单位,表示字节是管理的最小单元,可以对指定的一个字节内容进行数据操作(读取内容,改写内容)。程序指令不能按更小的数据单位比如半个字节或一个bit进行操作。
但这并不表明每一次操作必须只操作一个字节,而不能对多个字节同时操作。
打个比方:
在有四个泳道的泳池边,一个班级的学生练习游泳。这时的管理方法就是每4个学生一组,一组一组地下水,这样的学习和指导效率显然比只用一个泳道只指导一个学生要高几倍。
计算机运行时,程序指令大多数是顺序、连续执行的(转移类的指令只占总指令数的20%左右),大多数的数据也是用数组或连续存储方式靠在一起存储的。这被称为指令和数据的局域性特征。
利用CPU内部的队列式缓存,读取某一字节时顺便将附近的几个字节也读到CPU内,这些附加的字节有很大的概率(80%以上)可以被接下来的程序指令用到,使得内存访问的次数大幅度减少(内存访问是耗时最多、最影响CPU效能发挥的操作),程序的实际运行速度可以大幅度提高,CPU的运算速度可以更充充分地发挥。
将这种每次读取2字节(16位CPU)或4字节(32位CPU)的方式固定地用硬件实现,硬件结构也更简单,硬件效率更高。
所以,CPU在进行内存访问时,总是会充分利用数据总线,同时读写多个字节,而不逐字节读写。追问

再追问下

如图所示,从20000物理地址开始,CPU如果知道在20002位置结束

以及 转换成汇编 是 mov ax,0123

相似回答