第1章 计算机组成与结构
1.2 指令系统
指令系统是**处理器所有指令的合集,也是**语言编程的基础。指令系统的选择和确定���及很多方面,是一个复杂的问题。
通常一个指令可分解为操作码和地址码两个部分。操作码确定指令的类型,地址码确定指令所要处理的数据,根据地址码的个数可以有四址指令、三址指令,甚至0址指令。
根据指令的长度特点,一个指令系统可能是定长指令字结构,即指令系统中所有的指令的长度都相同,特点是控制简单。如果指令的长度不固定,复杂的指令长度较长,就是变长指令字结构,这个结构的指令很容易扩展,但是增加了解码系统的复杂度。
1.2.1 寻址方式
根据地址码代表的地址类型,指令系统可以分为以下几种。
1.立即寻址
地址码就是操作数,这种寻址方式不必再次访问内存去取操作数,当然,也无法修改操作数。
2.直接寻址
地址码就是主存内数据的**地址,不必做任何换算。不足之处在于寻址范围有限,地址码的位数限制了寻址空间,而计算机的发展趋势是计算机拥有越来越大的内存。使用变长指令结构可以突破限制,但是该指令会变得臃肿。
3.寄存器寻址
地址码的地址是寄存器的地址。和内存寻址比较而言,访问寄存器的速度是非常快的,所以使用寄存器寻址有非常快的速度。不足之处在于寄存器的数量和数据宽度有限。
4.间接寻址
地址码指向主存中的数据,这个数据仍然是一个地址。这种方式提高了寻址的灵活性,扩大了寻址的范围。但由于要多次读主存,速度大为降低。
5.寄存器间接寻址
地址码保存的是寄存器地址,相对应的寄存器中保存的是数据的地址,这样既速度快又有灵活性,是一种广泛使用的寻址方式。
6.变址寻址
变址寻址,是将地址码和变址寄存器内容相加后形成数据的地址,由于变址寄存器能自动修改,这种方式对数组运算、字符串操作等批量数据的处理非常有效。
7.基址寻址
和变址寻址类似,是将变址寄存器改成基址寄存器,不同之处在于基址寄存器的内容是基本不变的,改变的是指令中地址码部分内容,主要作用是扩大寻址空问和再定位。
8.页面寻址
页面寻址是将主存分成若干个区,寻址时使用区码加区内偏移的方式确定位置。
9.相对寻址
相对寻址也和变址寻址类似,这里变址寄存器换成了程序计数器。
1.2.2 指令类型
从功能而言,常用的指令有以下几种。
1.数据传送指令
这些指令负责数据在寄存器和主存之间的传递,其中数据交换指令使数据双向移动,而堆栈操作指令是专门对堆栈进行PUSH和POP操作的。
2.运算类指令
包括算术运算、逻辑运算、移位运算方面的指令,这类指令一般会改变标志寄存器的状态。
移位运算是一种特殊的运算,分算术移位、逻辑移位和循环移位三类。算术移位中左移则在空位补0,右移补符号位。逻辑移位无论左移右移都补0。循环移位是把移动空位由移出的位来填补的移位,又分带符号位移动的大循环和不带符号位移动的小循环。
……