A组:基本指令 ADD、SUB、AND、OR、XOR、CMP、TEST、MVRR、DEC、INC、SHL、SHR、 JR、JRC、JRNC、JRZ、JRNZ 扩展指令 ADC、SBB、RCL、RCR、ASR、NOT、CLC、STC、EI、CI、JRS、 JRNS、JMPR B组:基本指令 JMPA、LDRR、STRR、PUSH、POP、PSHF、POPF、MVRD、IN、OUT、RET C组:扩展指令 CALR、LDRA、STRA、LDRX、STRX D组:基本指令 CALA 扩展指令 IRET 这种分类办法,是为了突出指令执行步骤的划分结果,有利于讲解控制器设计技术。 A组指令完成的是通用寄存器之间的数据运算或传送,或其它几项特殊的操作,在取指之后可一步完成。 B组指令完成的是一次内存或I/O读、写操作,在取指之后可两步完成,第一步把要使用的地址传送到地址寄存器AR中,第二步执行内存或I/O读、写操作。 C组指令在取指之后可三步完成,其中CALR指令在用两步完成一次写内存之后,第三步执行寄存器之间的数据传送;而其它指令在第一步置地址寄存器AR,第二步读内存(即取得一个内存单元的地址)并传送到地址寄存器AR,第三步执行另外一次读、写内存的操作。 D组指令完成的是两次读、写内存操作,在取指之后可四步完成。 十六位的教学机系统,实现了上面4组中的29条基本指令,用于支持教学机的监控程序和简单的汇编语言程序设计。保留了其余19条扩展指令,供学生在教学实验中进行扩展,即完成对这些指令的设计与调试,当然,还可以扩展另外一些指令。 为了支持汇编语言程序设计,每一条指令分配了一个汇编语句名,其命名规则是: 用一个英文单词或其缩写形式(2~4个字母)给出一个汇编语句名,例如ADD、SUB、MVRR、MVRD、JR、JMPA、STRX等; 其中的1~2个字母可能涉及到操作数寻址方式,具体规定如下: 用R代表寄存器寻址,例如ADD R0,R1 语句表示 R0←R0+R1;MVRR R0,R1语句表示把寄存器R1的内容传送到寄存器R0;在R字母两侧加上方括号,代表寄存器间接寻址,例如STRR [R8],R9 语句表示把R9的内容传送到以寄存器R8的内容为地址的内存单元之中; 用D表示立即数寻址,例如MVRD R3,1234 语句表示 R0←立即数1234; 用X表示变址寻址,例如 LDRX R1,12[R2] 语句表示把变址寄存器R2的内容与变址偏移量12相加作为内存地址,进行读操作,读出的数据传送的寄存器R1; 用A表示直接地址寻址,例如 JMPA 2008 语句表示转移到2008单元之处, STRA [2000], R2 语句表示把R2的内容写入到地址为2000的内存单元之中。 §1.2.1 基本指令汇总表 ### TEC-XP16计算机组成原理实验系统指令集解析 #### 一、概述 TEC-XP16计算机组成原理实验系统是一款专为计算机组成原理及计算机系统结构课程设计的教学平台,它由清华大学计算机系研发,是TEC-XP系列的一部分。这款教学计算机系统不仅在硬件配置上十分完整,涵盖了运算器、控制器、存储器、输入输出接口等多个方面,还在软件方面提供了丰富的支持,包括汇编语言、监控程序等。 #### 二、指令集分类与特点 在TEC-XP16计算机系统中,指令被明确地分为四大组,每组都有其特定的功能和执行步骤,这样的分类有助于理解和学习控制器设计技术。 **A组**:主要包括通用寄存器之间的数据运算或传送以及一些特殊操作。这类指令在取指后可以直接一步完成。例如: - **ADD**:寄存器加法 - **SUB**:寄存器减法 - **AND**:逻辑与 - **OR**:逻辑或 - **XOR**:逻辑异或 - **CMP**:比较 - **TEST**:测试 - **MVRR**:寄存器到寄存器的移动 - **DEC**:递减 - **INC**:递增 - **SHL**:左移 - **SHR**:右移 - **JR**:无条件跳转 - **JRC**:条件跳转(根据进位标志) - **JRNC**:条件跳转(根据非进位标志) - **JRZ**:条件跳转(根据零标志) - **JRNZ**:条件跳转(根据非零标志) **扩展指令**:如 **ADC**(带进位加法)、**SBB**(带借位减法)等,这些指令同样能够一步完成。 **B组**:主要涉及内存或I/O读写操作。这类指令在取指后需要两步来完成,第一步将地址传送到地址寄存器AR,第二步执行实际的读写操作。例如: - **JMPA**:直接地址跳转 - **LDRR**:从内存加载到寄存器 - **STRR**:从寄存器存储到内存 - **PUSH**:压栈 - **POP**:弹栈 - **PSHF**:压栈标志 - **POPF**:弹栈标志 - **MVRD**:立即数到寄存器 - **IN**:从输入设备读取 - **OUT**:向输出设备写入 - **RET**:返回 **C组**:这类指令需要三个步骤来完成。以 **CALR** 指令为例,在前两步完成一次内存写操作后,第三步执行寄存器间的移动。其他指令则先设置地址寄存器AR,然后读取内存地址,最后执行第二次读写内存的操作。例如: - **CALR**:调用并返回 - **LDRA**:直接地址加载到寄存器 - **STRA**:直接地址存储从寄存器 - **LDRX**:变址寻址加载到寄存器 - **STRX**:变址寻址存储从寄存器 **D组**:涉及两次内存读写操作,需要四个步骤来完成。例如: - **CALA**:调用 - **IRET**:中断返回 #### 三、指令寻址方式 每条指令都根据其操作数类型和寻址方式进行命名,这有助于理解指令的具体功能。具体来说: - **R**:寄存器寻址,如 **ADD R0,R1** 表示 R0←R0+R1。 - **[R]**:寄存器间接寻址,如 **STRR [R8],R9** 表示将 R9 的内容存储到以 R8 内容为地址的内存单元。 - **D**:立即数寻址,如 **MVRD R3,1234** 表示 R3←立即数1234。 - **X**:变址寻址,如 **LDRX R1,12[R2]** 表示从变址寄存器 R2 的内容与偏移量12相加后的地址处读取数据到寄存器 R1。 - **A**:直接地址寻址,如 **JMPA 2008** 表示跳转到地址2008处。 #### 四、指令编码格式 每条指令的编码格式也非常关键,以确保指令的正确识别与执行。例如,在8位指令编码中: - **IR15、IR14**:用于区分指令组(0x表示A组,10表示B组,11表示C、D组)。 - **IR13**:用于区分基本指令(0)和扩展指令(1)。 - **IR12**:暂时固定为0,简化控制器实现。 - **IR11~IR8**:用于区分同一组内的不同指令(最多16条)。 - **IR11**:用于进一步区分C组(0)和D组(1)。 #### 五、结论 通过以上分析可以看出,TEC-XP16计算机组成的指令集经过精心设计,既满足了教学目的,又便于理解和实现。通过这些指令的学习,学生不仅可以深入了解计算机内部工作原理,还能掌握如何设计和调试简单的汇编语言程序。此外,系统还提供了软件模拟环境,使得学生能够在没有真实硬件的情况下进行实验,极大地提高了教学效率和学习体验。
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助