首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

請诸位大神們幫俺解惑,不盡感激~

2012-08-27 
請各位大神們幫俺解惑,不盡感激~!剛開始看王爽的彙編,書上說根據CS:IP的值(內存地址)來執行指令.那么我給

請各位大神們幫俺解惑,不盡感激~!
剛開始看王爽的彙編,書上說根據CS:IP的值(內存地址)來執行指令.

那么我給它的僅僅是一個地址,我并沒有說明指令長度,它是如何知道我要取的指令長度是多少呢?

論壇上有人說:MOV AX 1FEDH,這倏指令中MOV翻譯成機器語言就包含了長度信息.這樣說起來似乎合情合理.

但是如果我的指令指向的內存上第一內容是數據而不是MOV或其它東西呢,那么它又是如何分析得到指令長度的呢?

請大神們為我解惑,本人不盡感激!!!!

[解决办法]
就拿MOV举例而言,它后面的立即数的长度,在mov的操作码字节中的MOD字段中给出。这个值是编译器在生成机器代码的时候根据情况填入的。
而且MOV虽然在汇编里面是一个指令,但它从cpu角度来看是一组指令。不同情况的操作码是不同的,这取决于你怎么用它,编译器就帮你怎么翻译成机器码。

而且对于楼上,“CPU的解释器”,计算机尚未入门...
[解决办法]
看下指令的结构组成,这个问题就不难理解吧。指令大致上由“操作码+寻址模式编码+操作数”几个部分组成,cpu 的指令解释机构根据操作码就会知道指令的大致功能,有寻址模式就会知道操作数是在哪里,这样也就确定了指令的长度。其实,同一指令,操作码并不一定是相同的,比如最常见的 MOV 指令,不同的寻址模式组合对应的操作码可能并不相同;MOV 其实只是给汇编软件和写/看程序的人看的。

热点排行