能力值:
( LV2,RANK:10 )
|
-
-
2 楼
其实问题就是CPU如何知道它要从内存中起始地址CS:IP到哪个地址结束之间的内容.
这里CPU计算出指令的物理地址但它并不知道这条指定在哪里结束.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
你认真看课本 好像还是容易弄懂的 我也刚看到 这里........
只不过,工作忙 看了一遍 又忘了前面
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
好像指令的第一个字节可以确定自身长度
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
这个机器码是已定义好的了,比如说b8表示什么等,,比如你写了一句mov ax,0123h 那么,编译时,他会把这句鄱译成相应的机器码,cs:ip指向它的时候,cpu会根据它可以识别的机器码从而执行,因为cpu执行到be 23 01[因为机器码以十六进制在内存中存放,那当然有长度了。]这样的机器码时,cpu自动把0123h这个数值传到ax寄存器中,
比如以上所说为什么要到200002h结束?其实cpu没有计算要到那里结束,它一直运行着cs:ip所指的地址中,执行里面的机器码。如上面的be 23 01,他执行后的动作是把0123存到ax中,在我们看来是一个动作完成,可以说是一条指令完成
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
或者是前缀码?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
为什么取回的指令却是20000H到20002H之间的内容?
是这样的,我们现在的这种x86指令是不等长的
有些指令只有一个字节,有些指令却有6个字节
CPU只需要看第一个字节就知道这条指令有多长(那不是废话吗,他都不知道那怎么执行)
我这样说,让你去理解
汇编代码的第一个字节决定了这条指令的长度,有部分决定不了的接着取第二字节,这是固定的
比如现在这个例子中(你的例子是16位的)
CPU一看到20000H这个地址的指令是B8,他就自动取20000H~20002H三个字节的指令
你往后看书的时候随便看到以B8字节开头的代码你就会发现,他都是3字节
我的回答应该跟实际有点偏差,但不影响你去理解这个问题,就是看开头就知道这条代码有多长,固定的,不同开头不同的长度
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
这个应该是固定的。。固定就是这样。我也是刚看过这里!
|
|
|