|
|
1
0
收集此类信息的一种方法是选择相关的示例程序,然后使用选项对其进行编译,以获得带有字节和助记符的程序集列表。与反汇编尝试不同,这不会因为从错误的起始地址反汇编字节序列而产生无效结果。 根据这样的代码(除非进行完整的程序优化,否则不需要链接),可以解析和研究实际使用的指令集(但不是这些指令的执行频率)。 例如,如果一个在十亿次运行中只执行一次的if()分支使用了一条指令,那么它的实现将同样重要,就像该指令在一个内部循环中每秒执行十亿次,每天执行23个小时一样,因为这两个代码部分都是使检查的程序工作所必需的。 在x86程序中需要观察的另一件事是,一些指令是(最好更小或更快)更长指令序列的组合。像inc-reg而不是add-reg,1;inc[memvar],而不是加载、inc、存储序列;整个字符串指令系列;进入/离开;pusha/popa;等等。对于您自己的CISC设计,您可能希望在当前编译器架构可以使用的限制范围内选择其他序列进行优化。 请注意,一些看似奇特的指令,如LAHF/SAHF,最初是为了简化8080代码的机械翻译而创建的,而不是后来用于浮点之类的东西。 |
|
|
Adelin · ISA存储在哪里?如何准确地考虑它? 9 年前 |
|
|
Ashley Meah · CPU/汇编程序如何知道下一条指令的大小? 12 年前 |
|
|
vkulkarni · Q(饱和标志)在ARM中的重要性 12 年前 |