计算机指令系统分类:RISC和CISC (RISC执行同样处理功能的程序所占用时间更简短,RISC机器的运行性能可能比CISC机器高2~5倍)
公式:P = I x CPI x T (P表示执行一个程序所用时间,I表示该程序中包含的机器指令总条数,CPI表示执行1个机器指令所需要的机器周期数,T表示每个机器周期的时间长度)
I | CPI | T | |
---|---|---|---|
RISC | 1.2~1.4 | 1.3~1.7 | <1 |
CISC | 1 | 4~10 | 1 |
RISC特点—指令格式规范且种类少,寻址方式简单,指令条数少,指令完成的操作功能简单。
CISC特点—是拥有大量的指令,这些指令可以执行复杂的高级语言操作,如循环、条件分支等。
四种计算机指令系统实例:Pentium II(CISC),MIPS32(RISC),PDP-11(CISC),TEC-XP-II(RISC)
Pentium II计算机是应用面较广,影响力较大的个人计算机,其指令有一定典型性。
(1) 如果 Pentium 计算机的指令带有自己的前级 Instruction Prefix,可由 1~4个重出现的 LOCK 部分组成,用于保证在多处理机环境下,处理机能以互斥的方式共享主存储器。通过这种办法处理字符串,比起使用软件办法实现要快得多。
(2) Segment Override 明确指出在指令中使用哪一个段寄存器。
(3) Operand Size Override 用于指出指令中的操作数是 16 位还是 32位。
(4) Address Size Override 用于指出在本指令中计算存储器地址时使用 16 位还是32位的变址偏移量 Displacement。
(1) Pentium II的指令的操作码可以由 1~2个字节组成,在指明操作功能的同时,有时还用于指出操作数的长度是字节、半字或者全字,存储器访问是读操作还是写操作,立即数是否需要符号位扩展等。
(2) ModR/M字段和接下来的SIB字段用于给出寻址信息,例如数据是在寄存器中还是在存储器中,如果是在存储器中,本字节用于指出本指令使用的寻址方式,2 位的Mod和3位的R/W字段可以形成 32 个值,区分 8 个通用存器和 2 种变址方法;3 位的 RegOpcode 字段可以用于指定一个寄存器的编码,或者与Mod字段一起用于寻址方式的译码。
(3) SIB 字段可以与Mod字段一起用于寻址方式的译码,SIB 也被划分成3个子字段2位的SS用于指定变址寻址计算中的放大因子,3位的 Index 和 Base 分别用于指定变址寄存器和基地址寄存器。
(4) Displacement 字段用于提供变址寻址方式下的偏移值,可以为 8、16 或 32 位长度
(5) Immediate 字段用于提供立即数寻址方式下的立即数,可以为 8、16 或 32 位长度这套指令系统的特点:指令操作码还含有区分寻址方式的某些信息;变址寻址的Offset的字段可以为 1、2、4个字节,可以在指令中支持访问更大的存储器空间。
下面分类列出完成整数运算和其他一些功能的常用指令,Pentium II计算机的指令系统混合了32位字长的指令和16位字长的指令模式,后者是为了与原有的8086机型保持软件兼容,其代价是使这套指令系统的实现更为复杂。
算数与逻辑运算指令 | 数据传送指令 |
ADD DST,SRT | MOVE DST,SRC |
SUB DST,SRT | PUSH SRC |
ADC DST,SRT | POP DST |
SBB DST,SRT | XCHG DST,SRC;内容交换 |
AND DST,SRT | LEA DST,SRC;存 SRC 的优先地址到 DST |
OR DST,SRT | CMOV DST,SRc;比较 2个串的内容 |
XOR DST,SRT | |
TST SRC1,SRC2 | 逻辑移位和循环移位指令 |
CMP SRC1,SRC2 | SAL DST,#;算术左移 |
MUL SRC;无符号数除法 | SAR DST,#;算术右移 |
IMUL SRC;带符号数除法 | SHL DST,#;逻辑左移 |
DIV SRC;无符号数除法 | SHR DST,#;逻辑右移 |
IDIV SRC;带符号数除法 | ROL DST,#;循环左移 |
INC DST | ROR DST,#;循环右移 |
DEC DST | RCL DST,#;带进位C左移 |
NEG DST;变补码 | RCR DST,#;带进位 C游移 |
NOT DST | |
控制转移指令 | 字符串指令 |
JMP ADDR | LODS |
Jxx ADDR;条件转移 | STOS |
CALL ADDR | MOVS |
RET | CMPS |
IRET | SCAS |
LOOPxx;循环直到条件满足条件 | 码指令 |
INTxx | STC |
INTO | CLC |
其他指令 | CMC |
SWAP DST | STD |
NOP;空操作 | CLD |
HALT;停机 | STI |
IN AL,PORT;输人 | CLI |
OUT PORT,AL;输出 | PUSHED;状态寄存器内容进堆栈 |
WAIT;等待中断 | POPED;状态寄存器内容出堆栈 |
其中DST指目的操作数地址,SRC指源操作数地址;SRC是指源操作数地址;“#”是指移位的位数。
MIPS32是32位字长,典型RISC结构指令系统的计算机,其指令格式简单,指令数量较少,只选用3种基本寻址方式,通用寄存器较多,编译简单高效,更方便实现指令流水。MIPS32系统中还提供一套MIPS16e指令系统,以便方便的支持嵌入式系统的使用要求。
例:
rd ← rs op rt
rd ← (rs < rt)
rs 的内容比 rt 的内容小置1,否则清0。
例:
rt ← rs op immediate
rt ← memory[base + offset]
memory[base + offset] ← rt
rt = rs,转移到地址 PC+offset x 4,否则顺序执行;
rt <> rs,转移到地址 PC+offset x 4,否则顺序执行;
完成无条件跳转的操作功能。用PC的组稿4位拼接target x 4的值作为跳转的指令地址。
PDP-11是美国DEC公司以前研制成功的小型系列机,曾被广泛应用,之后又推出了32位字长、性能更高的VAX-11系列机。
(1)采用单总线(UNIBUS)结构,即中央处理机、主存储器、全部外围设备都接在唯一的一组总线上,优点是硬件结构简单,易于扩展,缺点是系统运行效率低。
(2)该计算机的机器字长16位;CPU 内有8个通用存器,分别用R0~R7表示,但R6和R7,分别为堆栈指针 SP 和程序计数器 PC,真正能通用的只有 R0~R5。
(3)该机可以按字或字节寻址,指令中有处理字类型数据和处理字节类型数据的两类指令。
(4)操作码使用逐段扩展技术,不同的指令使用不同位数(长度)的操作码,从4位到16位不等,在很短的指令字中充分发挥每一位的效用。
Mod (3位) | R (3位) |
(5)在指令的操作数地址部分,采用统一寻址方式访问通用寄存器、主存及外围设备主存和外围设备统一编址,没有专门的 I/O 指令。指令中用 6个二进制位(bit)表示一个操作数的地址,如上图所示。
其中,Mod 用于确定寻址方式,R 用于指定寄存器编号,各占3位,能分别表示 8 种不同的寻址方式和 8 个不同的寄存器。R的取值从 000 到111,分别表示R0到R7,其中R6和 R7,也可以写成SP(堆栈指针)和PC(程序计数器),真正能通用的只有 R0~R5。
Mod取值 | 寻址符 | 寻址方式 |
---|---|---|
000 | R | 寄存器寻址,R 的内容即为操作数 |
001 | (R) | 寄存器间接寻址,R 的内容是操作数的地址 |
010 | (R)+ | 寄存器间接寻址并自动增量,R 的内容是操作数的地址,用后 R的内容执行增 1(对字节指令)或增 2(对字指令) |
011 | @(R)+ | 间接寻址并自动增量,R 的内容是操作数地址的地址,用后 R 的内容增1(对字节指令)或增 2(对字指令) |
100 | -(R) | 自动减量的寄存器间接寻址,修改后的 R的内容是操作数的地址,即用前先对 R 的内容执行减 1(对字节指令)或减 2(对字指令) |
101 | @-(R) | 自动减量并间接寻址,修改后的 R 的内容是操作数地址的地址,即用前先对 R的内容执行减 1(对字节指令)或减 2(对字指令) |
110 | X(R) | 变址寻址,,将 X与 R的内容相加之和作为操作数的地址 |
111 | @X(R) |
变址并间接寻址,将 X 与 R 的内容相加之和作为操作数地址的地址 |
在 Mod 的高两位取值相同、仅最低位的取值不同的两种寻址方式中,最低位取值为 1的寻址方式,总是在前一种寻址方式上多了一次间接寻址操作。
可以发现不能把 2、3、6、7 这 4 种寻址方式按照上述规定用于 R7,即程序计数器PC,为此可以把 27、37、67、77 这几个组合变通一下,用于另外的寻址方式,如下表所示。
Mod 取值的组合 | 寻址符 | 寻址方式 |
---|---|---|
27 | #n | 立即数寻址,#n 为立即数,放在指令的第二个字中 |
37 | @#A | 直接地址寻址,# A 为地址,放在指令的第二个字中 |
67 | X | 相对寻址,(当前指令地址+4)+X 为有效地址,X 在指令的第二个字中 |
77 | @X | 相对加间接寻址,(当前指令地址+ 4)+X 为地址的地址,X 在指令的第二个字中 |
双操作数指令,采用 4 位操作码,每个操作数形式地址占 6 位。
多数情况下,操作码最高一位的值,用于区分是字指令还是字节指令,为 1 则是字节指令,并在汇编语句名后用跟字符 B标记(下同);加、减指令不支持字节运算,故可以用 06 和16 操作码分别表示 ADD和SUB 指令。
单操作数指令,采用 10 位操作码,一个操作数形式地址占 6 位。如下图。
另一组单操作数指令,采用 10 位操作码,一个操作数形式地址占 6 位。这里的操作数可能为目的操作数、源操作数、立即数,由指令本身决定。如下图。
单操作数指令格式 2无操作数指令,指令字的全部 16 位都用作操作码,如下图。
特殊格式的指令,包括以下 3 种类型:
双操作数指令,采用 7 位操作码,其中的一个操作数形式地址只用 R 表示。
单操作数指令,采用 13 位操作码,操作数形式地址只用 R 表示。
其他特殊指令,主要是相对转移指令,采用 8 位操作码和 8 位补码的偏移量表示。
(1)尽可能精小的指令集,指令数目要适当地少,较短的指令格式,简单的寻址方式,单字指令为主,每条指令的功能要尽可能地简单。
(2) 指令系统要有一定的完备程度,有较好的典型性,给出的指令格式适当规范,指令分类合理,符合人们通常的编程使用习惯,指令执行步骤容易理解。
(3)更高的可扩充性,即为学生添加各种新的指令留下比较充足的余地,包括为每一类指令保留多条要学生亲自实现的指令。
(4)符合课程教学用计算机的特定要求。选用 16 位字长指令格式,指令操作码固定为8 位长度,实现这套指令系统时,计算机硬件组成和指令执行流程要简单。
教学计算机的指令系统有单字和双字指令,第一个指令字的高 8 位是指令操作码,低 8位和双字指令的第二个指令字是操作数地址字段,分别有 3 种用法,如下图所示。
8位的指令操作码(记作“IR15~IR8”)中各位的含义如下:
(1) IR15、IR14,用于区分指令组: 0X 表示 A 组,10 表示 B组,11表示 D组。
(2) IR13用于区分基本指令和扩展指令: 基本指令该位为 0,扩展指令该位为1。
(3) IR12用于简化控制器实现,暂定该位的值为 0。
(4) IR11~IR8。用于区分同一指令组中的不同指令。
操作数地址字段的设计结果如下:
(1)DR(目的寄存器)和 SR(原寄存器)是 4 位的存器编号,可寻址 16 个寄存器
(2)8 位的 IO 端口地址,默认的串行接口地址为十六进制的 80 和 81。
(3)8位的相对寻址偏移量 offset,转移范围从-128 ~ +127。
(4)16 位的立即数由指令的第 2 个字提供,用于把这个数值传送到选定的寄存器中。
(5) 16 位的直接地址由指令的第 2 个字提供,作为指令转移地址或子程序人口地址。
(6)16 位的变址偏移量由指令的第 2 个字提供,用于以变址寻址方式访问内存。
— 从指令字长度区分,有单字指令和双字指令,也允许定义与使用 3 字指。
— 从操作数的个数区分,有双操作数指令、单操作数指令和无操作数指令。
— 从使用的寻址方式区分,有寄存器寻址,寄存器间接寻址、立即数寻址、直接寻址、变址寻址、相对寻址、堆栈寻址等多种基本寻址方式的不同类别指令。
— 从指令执行步骤区分,有采用 2步、3步、4 步完成的这样 3组。
— 从指令功能区分,如下表所示
指令类型 | 包含的指令 |
---|---|
算术和逻辑运算类指令 | ADD,SUB、AND、OR、XOR、CMP、TEST、DEC、INCADC、SBB、NOT |
数据传送类指令 | MVRR、MVRD |
移位类指令 | SHL,SHR、RCL、RCR、ASR |
读写内存类指令 | LFRR、STRR、PUSH、POP、PSHF、POPF、LDPCLDRA,STRA,LDRX、STRX |
输入/输出类指令 | IN、OUT |
指令流程控制类指令 | JR、JRC、JRNC、JRZ、JRNZ、JMPA、CALA、RETJRS、JRNS、JMPR、CALR、IRET |
其它指令 | CLC,STC、EI_CI |
教学计算机系统实现了其中的 30 条基本指令,用于支持监控程序和简单的汇编语言序设计。保留了其余 19 条扩展指令供学生在教学实验中进行扩展,即完成对这些指令的设计与调试,当然,还可以扩展另外一些指令。
TEC-XP-II指令汇总参考:TEC-XP 汇编学习_千禧皓月的博客-CSDN博客
汇编语言大体上是对计算机机器语言(二进制指令代码)进行符号化的一种表示方式每一个基本汇编语句对应一条机器指今,在此基础上,再增加一些扩展功能,诸如支持系统调用,允许定义和使用宏(MACRO),可以定义和使用伪指令等;以便能更方便地完成汇编语言程序设计。在进行汇编语言程序设计时,可以直接使用英文单词或其缩写表示指令,使用标识符表示数据或者地址,有效地避免了记忆二进制的指令代码,不再由程序设计人员为指令和数据分配内存地址,直接调用操作系统的某些程序段完成输人输出、建立与读写文件等操作功能。用编辑程序建立好的汇编语言源程序,需要经过系统软件中的汇编程序“翻译”为机器语言程序之后,才能交付给计算机硬件系统去执行。
与用其他语言设计的程序一样,在汇编语言的程序中,也包括顺序执行、无条件转移执行、条件分支执行、循环执行、子程序调用与返回执行 5 类程序结构。
(1) 顺序执行。按照汇编语句(机器指令)在程序中排列的顺序从前向后逐条执行,为此只需把顺序执行的指令在程序中按次序编写即可。顺序执行的指令所占比例最高。
(2) 无条件转移执行。表示需要改变指令的执行次序,下一条将不执行排在该指令之后的那条指令,而是用指令中给出的转移地址去找到相应指令并执行,如JMPA 和JR指令。
(3) 条件分支执行。表示需要按照指令中指出的条件为真(成立)还是为假(不成立),从两条指令中选择其一来执行,条件成立则转移,不成立则顺序执行,如JRC、JRNC、JRZJRNZ 指令。
(4) 循环执行。是让一段程序反复多次地重复执行的控制流程,直到达到需要重复执行的次数,或者某一个条件出现时结束重复过程。
(5) 子程序调用与返回执行。子程序是通过子程序调用语句使其投人运行过程的一个特殊的程度段。教学计算机中的 CALA 指令就是子程序调用语句,它的作用是暂停主程序的执行过程,转去执行一个子程序,待子程序执行之后,还要返回来接着执行停下来的主程序。在子程序中要用 RET 指令表明子程序结束,以便启动返回操作。
教学计算机目前提供了约 50 条基本机器指令,其中约 30 条的指令格式功能已完全确定,并已用组合逻辑与微程序两种控制方案实现,可供用户编程使用;尚保留另外约 20 条的指令交由实验者自己去定义与实现。
如何使用 16 位机系统的汇编语言,与系统的硬件配置有关。当系统中不包括主要作为仿真终端使用的 PC,而是使用计算机终端设备时,就只能使用监控程序提供的单条汇编命令 A,通过计算机终端,逐条输入并汇编每一个汇编语句,使用起来还算是方便,缺点是不能支持伪指令,即不能使用符号代表变量与汇编语句标号,般情况下要使用直接地址,对设计较小的汇编程序还是可以忍受的,对较长一点的汇编程序则要困难一些。
交叉汇编是用一个计算机(如 PC)进行另一个计算机(如教学计算机)的汇编语言编译。这种做法的目的是利用 PC 的强大资源和功能,并且在教学计算机系统尚未完全设计好时,避免在教学计算机上直接实现汇编程序的困难。交叉汇编程序提供了汇编程序的基本功能和常用伪指令,为编写较长的汇编语言程序提供支持。有多种语言版本的交叉汇编程序,包括 PC 汇编、C语言和 PASCAL 语言。
教学计算机上设计了用其指令系统解释执行 BASIC 语言的程序,实现了软件支持的浮点数据运算、表达式分析和函数调用等功能。这使得教学计算机具有了运行高级语言程序的能力。特别值得关注的是,通过调用 BASIC 解释程序中的子程序,可以在教学计算机原有指令系统中加入浮点数运算的指令,从而提高其运算能力。