能力值:
( LV12,RANK:340 )
|
-
-
2 楼
这个是不可能的。。。
具体的,你随便下个开源的反汇编器,看下就知道了,嫌麻烦也可直接看intel的开发手册。
我对取指令也不是很了解,只记得好像是可以从第一个字节推算出来的。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我没用过开源的反汇编器,求介绍一个好用的。谢谢!
我用INTEL开发的动态插装工具PIN调试过,该工具中模拟CPU取指的函数就是一次从内存中取15字节的数据。
另外,intel软件开发手册我也看了,包括指令的格式、opcode的映射表。并根据手册上的介绍,用C写了个识别一段指令数据的长度的程序。应该从第一个字节不能判断指令的长度,因为根据指令的格式,其第一个字节可能是前缀,也可能是opcode,并且整个指令的长度还与 modR\M相关。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我没用过开源的反汇编器,求介绍一个好用的。谢谢!
我用INTEL开发的动态插装工具PIN调试过,该工具中模拟CPU取指的函数就是一次从内存中取15字节的数据。
另外,intel软件开发手册我也看了,包括指令的格式、opcode的映射表。并根据手册上的介绍,用C写了个识别一段指令数据的长度的程序。应该从第一个字节不能判断指令的长度,因为根据指令的格式,其第一个字节可能是前缀,也可能是opcode,并且整个指令的长度还与 modR\M相关。
|
能力值:
( LV12,RANK:340 )
|
-
-
5 楼
udis86、BeaEngine、Capstone Engine。
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
lz的疑问就是cisc体系的软肋
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
有木有相关文档说明?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
说实在话,这个问题也困扰了我很久,到现在也没有找到确切的答案。迫切期望大虾解惑。
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
http://bbs.pediy.com/showthread.php?t=183180
我这个设计里面有两种指令,一种是16位的,一种是32位的,译码器根据第一个16位判断进入哪个状态(是FETCH2还是EXEC),然后再执行,CISC的指令集才有这种问题,如果是个RISC,则不存在这个问题,流水线也相对容易设计
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
还有就是:
另外,谁知道指令寄存器(IR)的位数?
这个要看是什么设计,如果是RISC的结构 一般教科书上的那种都是32位,而CISC就麻烦了
CISC的话,需要使用CPU里面的微指令配合解码 IR就复杂了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
我问的是关于CISC的。。。确实比较复杂。
RISC指令等长,不存在这些问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
如果因为不知道每个指令的字节长度,而直接取15字节来对比是不可能的,至少从逻辑上分析是不会的。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
帖子居然被移到初学者园地板块。。。无语!
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
CPU是分精简指令集和复杂指令集的。
我对6502 CPU(8位)有些研究(我用C++进行了模拟),这个CPU比较早了,当时好像没有精简和复杂指令集的概念(或者很模糊)。
它的寻址方式很多,这符合复杂指令集的特点,但是它有典型的Load/Store结构,所以我把它归为精简指令集。
这个CPU的操作码只占一个字节,执行指令的过程如下。
1. 根据PC获取到操作码,操作码包含了寻址方式信息和将要进行的运算信息(算术运算、逻辑运算等等);
2. 根据寻址方式信息获取到操作数;
3. 根据将要运算的信息对操作数进行运算;
4. PC根据寻址方式进行增加(或减少,如果是“相对寻址”方式,则PC可能往回跳)。
对于复杂指令集的CPU我也是新手,只是局限于书中所说(书中基本都是基于80x86进行讲解)。
如果你真的希望知道细节,可以参考对应CPU的官方文档信息,使用自己熟悉的语言模拟一下。
希望能够帮到你。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我记得我学的组原说指令分为定长指令和变长指令,我们知道指令由:操作码+操作数地址组成的,操作码又分为定长操作码和变长操作码,一般定长指令用的是变长操作码(或者叫扩展操作码),变长指令要灵活些,但是变长的话就不知道到底该取几字节,所以操作码采用定长的,取指令的后分析操作码就知道到底取几字节了。 不知道记得对不对.....
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
同学,建议你还是不要看神马计算机组成原理。。。里面介绍的太浅显了,一般都在汇编层次上讲解指令。
当你阅读了intel或者amd的官方文档了,你会发现,根本不是那回事儿!
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
对于intel这种变长汇编指令 先取第一个字节 然后可以计算出整条指令的长度 比如长跳转jmp 机器码是e9 然后就可以知道整条指令是5个字节 然后就OK了
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
指令的格式为 prefix+opcode+modR/M+SIB+displacement+immediate。所以,单从第一字节无法判断整条指令的长度。
|
|
|