剛開始看王爽的彙編,書上說根據CS:IP的值(內存地址)來執行指令.
那么我給它的僅僅是一個地址,我并沒有說明指令長度,它是如何知道我要取的指令長度是多少呢?
論壇上有人說:MOV AX 1FEDH,這倏指令中MOV翻譯成機器語言就包含了長度信息.這樣說起來似乎合情合理.
但是如果我的指令指向的內存上第一內容是數據而不是MOV或其它東西呢,那么它又是如何分析得到指令長度的呢?
請大神們為我解惑,本人不盡感激!!!!
------解决方案--------------------------------------------------------
就拿MOV举例而言,它后面的立即数的长度,在mov的操作码字节中的MOD字段中给出。这个值是编译器在生成机器代码的时候根据情况填入的。
而且MOV虽然在汇编里面是一个指令,但它从cpu角度来看是一组指令。不同情况的操作码是不同的,这取决于你怎么用它,编译器就帮你怎么翻译成机器码。
而且对于楼上,“CPU的解释器”,计算机尚未入门...
------解决方案--------------------------------------------------------
看下指令的结构组成,这个问题就不难理解吧。指令大致上由“操作码+寻址模式编码+操作数”几个部分组成,cpu 的指令解释机构根据操作码就会知道指令的大致功能,有寻址模式就会知道操作数是在哪里,这样也就确定了指令的长度。其实,同一指令,操作码并不一定是相同的,比如最常见的 MOV 指令,不同的寻址模式组合对应的操作码可能并不相同;MOV 其实只是给汇编软件和写/看程序的人看的。