逆向分析方向学习第三篇
作者:互联网
计算机的基本工作原理
1. 计算机指令格式
计算机指令是能够被计算机识别并执行的二进制代码,它规定了计算机能完成的某种操作。
一条计算机指令通常由两部分组成:操作码和操作数(地址码)。
即一条计算机指令的结构如下
操作码 | 操作数(地址码) |
指令中的操作码指出该指令需要完成操作的类型和性质。例如,取数、加法、减法、输出等不同的操作具有不同的操作码。
计算机就是根据一条指令的操作码来决定要做什么样的操作。
由于一条指令是二进制代码,因此,其中的操作码也是二进制代码。
(这里可以看出),指令和数据在计算机中的表示并没有什么本质的区别,都是二进制组合起来的。所以,指令和数据的区别就是计算机处理时会做出何种解释。
对于一种类型的计算机来说,各种指令的操作码也是互不相同的。
各种指令的操作码时互不相同的,它们分别表示不同的操作,因此,指令中操作码的二进制位数决定了该种计算机最多能具有的指令条数(即操作种类)。
一般来说,如果某种类型计算机的指令操作码所占的二进制位数为K,则该种计算机最多可以有2K条指令(即2K种操作);
反过来,为了使计算机具有n条指令(即n种操作),则该计算机指令中的操作码至少应有[log2(n-1)]+1个二进制位(此处的一对方括号表示取整)。
重要:指令中的地址码用来描述该指令的操作对象,或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)。
根据指令中操作数的性质,操作数又可以分为源操作数和目的操作数两类。
例如,在一般的加法指令中有3个操作数,其中加数和被加数为源操作数,计算结果(即它们的和)为目的操作数。
在大多数情况下(即在大多数指令中),指令中给出的操作数一般是存放数据的地址,而并不是具体数据本身
注意:甚至在有些指令中实际上给出的只能是地址而不是数据,例如,在转移指令中,除了操作码(指出需要转移)以外,还需要指出转移到什么地方,在这种情况下,实际给出的是地址。
因此,指令中的操作数一般又称为地址码。每条指令的地址码个数是不一样的,要视具体的操作需要。
当然,在有的指令中只有操作码而没有地址码;
这种指令往往只需要指出做什么操作,而不需要具体的操作数,例如暂停指令、停机指令等。
计算机指令所占的字节数是各不相同的。
只占一个字节的指令称为单字节指令,占两个字节的指令成为双字节指令。
一般来说,如果指令中的操作码和操作数(即地址码)共占n个字节,则称该指令为n字节指令。
2. 计算机指令的寻址方式
指令中操作数的真实地址称为有效地址(effective address,EA),它是由寻址方式和形式地址共同来决定的。
寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令的地址,与硬件结构密切相关。
寻址方式分为指令寻址和数据寻址两大类。
指令寻址分为顺序寻址和跳跃寻址;
常见的数据寻址分为包括立即寻址(所需要的操作数由指令的地址码部分直接给出)、直接寻址(指令的地址码部分给出操作数在存储器中的地址)、隐含寻址(操作数的地址隐含在操作码或者某个寄存器中)及更为复杂的寻址方式、如间接寻址、寄存器寻址、寄存器间接寻址和堆栈寻址等。
标签:逆向,操作数,第三篇,计算机,学习,操作码,地址码,指令,寻址 来源: https://www.cnblogs.com/users123/p/14672499.html