请问为什么20000H单元存放的指令是B8 23 01?
请问为什么20000H单元存放的指令是B8 23 01?
为什么是三个单元,为什么不是B8?
20000H所对应的只有一个B8单元啊!
谢谢 mov ax,0123h拆开来看,mov不占字节,ax占一个字节(即B8),0123h占两个字节,一个0123h是由高8位和低8位组成,即01和23,又因为8位等于1个字节,所以0123h占两个字节。 有一点不同意见哦,是不是应该是MOV作为指令或者助记符占有一个自己,AX是寄存器只是容器不占字节,0123H占两个字节,是这样呢 这个涉及到机器码的编码问题机器码只能以二进制的形态让cpu去识别而在二进制形态下他有自己的opcode。
对于mov reg imm类型的(reg就是寄存器,imm是立即数)机器码的格式为1011 wrrr 后面接立即数的二进制形态 (这里是23 01),w位确定后面的立即数是16位的还是8位的, w=1则是16位的 这里就是16位的,所以后面跟了两个4个字节的数据。rrr代表寄存器的编号000 代表ax/al/eax看具体的情况,这里是ax。所以二进制的机器码为1011 1000 换成十六进制就是B8 后面接16位的立即数。因此,cpu如果读取一个单元的数据 而这个数据是b8的话,他就已经知道整条指令所占的字节数(因为w=1 后面是16位的数据占两个字节)啰啰嗦嗦讲了一大堆也不知道是不是讲清楚了。。。 因为cs:ip指向此处,要把20000h单元中的数据当成指令来读取,连续的3个字节才为一个完整的指令,所以要连续读取3个字节,如果是数据ds:si指向此处时,那就要当成数据来读取,这样就可以,一个字节一个字节的读取了。 机器码只能以二进制的形态让cpu去识别而在二进制形态下他有自己的opcode
页:
[1]