范文一:设计指令系统
课程设计说明书
题目: 设计一指令系统
院 系: 计算机科学与工程学院 专业班级: 计算机09-9班 学 号: 2009********* 学生姓名: ********** 指导教师: *********
2011年 06 月 30日
安徽理工大学课程设计(论文)任务书
院系
2011 年 6 月 30日
安徽理工大学课程设计(论文)成绩评定表
目录
内容摘要 . ...................................................... I 绪言 . .......................................................... 1 1 需求分析 . .................................................... 1 1.1设计背景 ................................................ 1 1.2设计目标 ................................................ 3 2 总体设计 . .................................................... 3 2.1 程序微指令分析 .......................................... 3 2.2 算术运算基本模型机微程序概述 ............................ 5 3. 详细设计 . .................................................... 5 3.1 CPTH模型机简介 ......................................... 5 3.2模型机指令设计说明 ...................................... 5 3.3 根据指令的功能设计相应的微程序 .......................... 7 3.4编程实现 ................................................ 9 4 调试与运行 . .................................................. 9 5心得体会 ..................................................... 9 参考文献 . ...................................................... 9
内容摘要
部件实验过程中,各部件单元的控制信号是人为模拟产生的,本课程设计将能在微程序控制下自动产生各部件单元的控制信号,实现特定指令的功能,通过设计流程图,编写机器指令,微指令和控制信号程序。首先向存储器中装入数据和程序,然后检查写入是否正确,启动程序执行。另外,还需设计微程序:数据传送(LDA ),加(ADD ),减(SUB),输入(IN ),输出(OUT ),跳转(JMP )。以上各微指令设计完毕后,用设计好的指令实现逻辑运算,连接线路在CPTH 计算机组成原理教学实验箱运行程序,并将实验结果显示输出。
这一课题的实现不仅使我们对各种微指令有了熟练的掌握,更对以后的学习、工作中有深远的影响。
关键词:指令,微程序,CPTH
绪言
随着社会科技的发展,计算机被应用到各行各业,人们步入自动化、智能化的生活阶段。本次课程设计课题是基本模型机的设计与实现,它正体现了这一点。利用CPU 与简单模型机来实现计算机组成原理课程及实验中所学到的实验原理和编程思想,硬件设备自拟,编写指令的应用程序,用微程序控制器实现了一系列的指令功能,最终达到将理论与实践相联系。本次设计完成了各指令的格式以及编码的设计,实现了各机器指令微代码,形成具有一定功能的完整的应用程序。
1 需求分析
1.1设计背景
通过计算机组成原理理论课和几次实验的学习,尝试使用八类机器指令中的三到四种设计,并编写相应的微程序,完成由基本单元电路构成一台基本模型机,再经过调试指令和模型机使其在微程序的控制下自动产生各部件单元的正常工作控制信号。
本课程设计的模型机的指令码为8位,根据指令类型的不同,可以有0到2个操作数,指令码的最低两位用来选择R0-R3寄存器。在微程序控制方式下,用指令码作为微地址来寻址微程序存储器,找到执行该指令的微程序。在本模型机中,一条指令最多分为四个状态周期,一个状态周期为一个时钟脉冲,每个状态周期产生不同的控制逻辑,实现模型机的各种功能。模型机有24位控制位以控制寄存器的输入输出,选择运算器的运算功能,存储器的读写。
简言之,这次设计,计算机数据通路的控制将由微程序控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一条微程序,一条微程序又有若干微指令组成,一条微指令的功能由24位操作信号(即控制位)实现。
本设计是在DJ-CPT816计算机组成原理实验仪和仿真软件上进行的 24位控制位分别介绍如下:
XRD :外部设备读信号,当给出个外设的地址后,输出此信号,从指定外设读数据。 EMWR :程序存储器EM 写信号 EMRD :程序存储器EM 读信号
PCOE :将程序计数器PC 的值送到地址总线ABUS 上
EMEN :将程序存储器EM 与数据总线DBUS 接通,有EMWR 和EMRD 决定是将DBUS 数据写入EM 中,还是从EM 读出数据到DBUS
IREN :将程序存储器EM 独处的数据打入指令寄存器IR 和微指令计数器uPC EINT :中断返回时清除中断响应和中断请求标志,便于下次中断。 ELP :PC 打入允许,与指令寄存器的IR2. ,IR3位结合,控制程序跳转。 MAREN :将数据总线DBUS 上数据打入地址寄存器MAR MAROE :将地址寄存器MAR 的值送到地址总线ABUS 上 OUTEN :将数据总线DBUS 上数据送到输出端口寄存器OUT 里 STEN :将数据总线DBUS 上数据存到堆栈寄存器里
RRD :读寄存器组R0-R3,寄存器R ?的选择由指令的最低两位决定 RWR :写寄存器组R0-R3,寄存器R ?的选择由指令的最低两位决定 CN :决定运算器是否带进位移位,CN=1带进位,CN=0不带进位 FEN :将标志位存入ALU 内部的标志寄存器
X2,X1,X0三位组合来译码选择将数据送到DBUS 上的哪个寄存器,见表1-1 WEN :将数据总线DBUS 的值打入工作寄存器W 中 AEN :将数据总线DBUS 的值打入累加器A 中 S2,S1,S0三位组合决定ALU 做何种运算,见表1-2
表1-2 运算器功能控制
续表1-2
1.2设计目标
本课程设计要求实现机器指令:,IN (输入) ,OUT (输出),LDA (不带进位算术加),ADD (带进位算术加),SUB (带进位算术减),JMP (跳转指令)。
并且要包括直接寻址,立即数寻址,寄存器寻址,间接寻址四种寻址方式。最后要在设计的指令系统基础上,编写程序实现带进位的循环左移。
2 总体设计
2.1 程序微指令分析
将程序在DJ-CPT816软件上单步运行结束后可得微指令跟踪图如下表2-1:
续表2-1
2.2算术运算基本模型机微
首先对编好的程序进行保存,然后进行汇编,看是否有语法错误,再进行单步调试, 按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC 及UPC 如何工作。 开始调试的时候是有点错,我还以为是指令错了,经过几次的核对, 检验, 和与草图对比, 指令的跳转是没有问题的, 最后估计可能接线出错了。应接J1和J2座的,却接成了J1和J3座,跳转的指令出错, 也可能是MA6∽MA0接线不对,
改正了后重新检查一编线路后, 重新开始运行程序LED 显示的十六进制数与MA6∽MA0微地址显示灯对应。拨动开关CLR (0→1)后,微地址清零。PC 程序计数器清零,然后控制台SWB~SWA开关置为“00”,按动启动开关START ,微地址显示灯“010000”(20),再按动一次START ,微地址灯显示“010010”(22),第三次按动START ,微地址显示灯显示“010111”
3. 详细设计
3.1 CPTH模型机简介
CPTH 模型机包括了一个标准CPU 所具备所有部件,这些部件包括:运算器ALU 、累加器A 、工作寄存器W 、左移门L 、直通门D 、右移门R 、寄存器组R0-R3、程序计数器PC 、地址寄存器MAR 、堆栈寄存器ST 、中断向量寄存器IA 、输入端口IN 、输出端口寄存器OUT 、程序存储器EM 、指令寄存器IR 、微程序计数器uPC 、微程序存储器uM ,以及中断控制电路、跳转控制电路。其中运算器和中断控制电路以及跳转控制电路用CPLD 来实现,其它电路都是用离散的数字电路组成。微程序控制部分也可以用组合逻辑控制来代替。
模型机为8 位机,数据总线、地址总线都为8位,但其工作原理与16位机相同。相比而言8 位机实验减少了烦琐的连线,但其原理却更容易被学生理解、吸收。
3.2模型机指令设计说明
表3-1模型机指令
续表3-1
一. 创建指令系统(助记符、机器码)
(1)打开CPTH 组成原理实验软件,选择[文件|新建指令系统/微程序],清除原来的指令/微程序系统,观察软件下方的“指令系统”窗口(图3.1),所有指令码都“未使用”。
图3.1指令系统窗口
(2)选择第二行,即“机器码1”为0000 01XX 行,在下方的“助记符”栏填入数据装载功能的指令助记符“IN ”,由于此指定了将累加器A 输出寄存器,所以不用选择“操作码1”和“操作码2”,也可在“操作数1”栏选择“A ”,表示第一个操作数为累加器A ,“操作数2”无需选择。按“修改”按钮确认。
(3)选择第三行,即“机器码1”为0000 10XX 行,在下方的“助记符”栏填入加法功能的指令助记符“LDA ”,在“操作码1”栏选择“A ”,表示第一操作数为累加器A ,在“操作数2”栏选择“#*”,表示第二操作数为立即数。按“修改”按钮确认。
(4)选择第四行,即“机器码1”为0000 11XX 行,在下方的“助记符”栏填入指令助记符“OUT ”,
由于此指定了将累加器A 输出寄存器,所以不用选择“操作码1”和“操作码2”,也可在“操作数1”栏选择“A ”,表示第一个操作数为累加器A ,“操作数2”无需选择。按“修改”按钮确认。
(5)选择第五行,即“机器码1”为0001 00XX 行,在下方的“助记符”栏填入输出数据功能的指令助记符“JMP ”,在“操作码1”栏选择“*”, 表示跳转地址为*,此指令无第二操作数,无需选择“操作数2”。按“修改”按钮确认。因为硬件设计时,跳转指令的跳转控制需要指令码的第3位和第2位IR3,IR2来决定,无条件跳转的控制要求IR3必须为1,所以无条件跳转的机器码选择此行,机器码为000011XX 。关于跳转控制的硬件设计和实验可参考前面章节。
(6)选择第六行,即“机器码1”为0001 01XX 行,在下方的“助记符”栏填入输出数据功能的指令助记符“ADD ”,在“操作码1”栏选择“A ”,表示第一个操作数为累加器A ,在“操作数2”栏选择“#*”,表示第二操作数为立即数。按“修改”按钮确认。
(7)选择第七行,即“机器码1”为0001 10XX 行,在下方的“助记符”栏填入输出数据功能的指令助记符“SUB ”,在“操作码1”栏选择“A ”,表示第一个操作数为累加器A ,在“操作数2”栏选择“#*”,表示第二操作数为立即数。按“修改”按钮确认。
图3.2指令助记符
3.3 根据指令的功能设计相应的微程序
将窗口切换到“uM 微程序”窗口,现在此窗口中所有微指令值都是0FFFFFFH ,也就是无任何操作,我们需要在此窗口输入每条指令的微程序来实现该指令的功能。
⑴每个程序开始要执行的第一条微指令应是取指操作,因为程序复位后,PC 和uPC 的值都为0,所以微程序的0 地址处就是程序执行的第一条取指的微指令。取指操作要做的工作是从程序存储器EM 中读出下条将要执行的指令,并将指令的机器码存入指令寄存器IR 和微程序计数器uPC 中,读出下条操作的微指令。根据此功能,观察窗口下方的各控制信号,有“勾”表示信号为高,处于无效状态,去掉“勾”信号为低,为有效状态。要从EM 中读数,EMRD 必需有效,去掉信号下面的“勾”使其有效;读EM 的地址要从PC 输出,所以PCOE 要有效,允许PC 输出,去掉PCOE 下面的“勾”,PCOE 有效同时还会使PC 加1,准备读EM 的下一地址;IREN 是将EM 读出的指令码存入uPC 和IR ,所以要去掉IREN 的“勾”使其有效。这样,取指操作的微指令就设计好了,取指操作的微指令的值为CBFFFFH 。然后把助记符"_FATCH_",状态"T0",微地址"00",微程序"CBFFFFH "..,按照上表格式填入,其余类同.
⑵现在我们来看把立即数装入累加器A 要做哪些工作,首先要从EM 中读出立即数,并送到数据总线DBUS ,再从DBUS 上将数据打入累加器A 中,按照这个要求,从EM 中读数据,EMRD 应该有效,EM 的地址由PC 输出,PCOE 必需有效,读出的数据送到DBUS ,EMEN 也应有效, 要求将数据存入A 中,AEN 也要有效,根据前面描述“JIAYI #*”指令有四个状态周期, T0状态取指微指令的值为CBFFFFH ,
T1状态取指微指令的值为CBFF90H ,T2状态取指微指令的值为D7FFEF ,T3 状态取指微指令的值为EF7FFF 。(取操作描述可见第⑴ 步)。
如上,根据指令的执行过程分析,并参照实验指导书上微型机指令集得出其他的微程序。如图
3.3
图3.3微程序结果
(6)选择菜单[文件|保存指令系统/微程序]功能,将新建的指令系统/微程序保存下来,以便以后调用。为不与已有的指令系统冲突,将新的指令系统/微程序保存为“new.mac ”。如图3.4。
图3.4指令系统/微程序文件图
3.4编程实现
源代码
LDA R1,#01
ADD A,#01
SUB A,#01
IN
JMP LOOP
LOOP:
OUT
将程序另存为A,ASM ,选择[文件| 跳入指令系/微程序],调入a.mac, 将程序汇编成机器码,观察反汇编窗口,会现实出程序地址, 机器码,反汇编指令。
按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC 及uPC 如何工作是否正确。
到此为止,我们利用CPTH 软件系统已经建成了一个新的指令系统/微程序。新的指令系统从汇编助记符到指令机器码到微指令都与原来的指令系统有所不同。我们只创建了四条指令,对于其它指令,用户可以做为练习来扩充完整,成为一个真正的指令系统。
4 调试与运行
使用软件中的F4-LOAD 功能装入机器指令格式文件
(1)将编程开关置为“RUN ”,“STEP ”置为“STEP ”,“STOP ”置为“RUN ”状态。
(2)拨动开关CLR (0→1),微地址寄存器清零,程序计数器清零,程序的首地址00H 。
(3)单步来运行一条微指令,每按动一次START 键,即单步调试运行一条微指令。对照微程序流程图,观察微地址显示灯是否和流程一致。
(4)当运行结束后,可检查数据寄存器中的结果是否和理论值一致。
5心得体会
通过在计算机组成原理实验课的学习,我对计算机组成原理这门课程有着更深的认识和理解,特别是这次课程设计。虽然设计出来的微指令系统比较简单,但这次课程设计使我学到了许多在书上学不到的东西。首先,我的动手能力得到了一定程度的提高,同时也一定程度上提高了自己独立
思考的能力;其次,在这次课程设计中我也遇到了一些问题,原因在于自己对这门课程的一些概念还是理解得不够深刻,但是通过查阅相关资料,还有在老师和同学的帮助下,这些问题最终得到了还好的解决,这是我对课本上的知识也有了更加深刻的理解和掌握。之前看到课本上的什么微指令系统、微指令之类的,总是感觉稀里糊涂的,这些个概念对我来说很抽象,所以自然就很难理解了。而实验仪器则有助于我去理解这些指令到底是如何实现特定的功能的。而且,从所给的软件中很容易编写出自己的指令系统,只是一个指令的详细设计还是比较难的,因为有24位要按照所完成的功能编写0或1,这是此次课程设计的关键,但是如果掌握了各个位的作用,同时又很清楚自己设计的指令要完成的功能,那么设置0和1就不会那么麻烦。这次课程设计虽然只是简单的设计的六条指令,完成了简单的与或运算,但我明白了该如何设计好一条指令,掌握了设计指令的一些方法,这对我以后在实践过程中会是一次很好的经历 。
参考文献
[1] 陈书开,王毅. 计算机组成与系统结构. 武汉:武汉大学出版社,2005
[2] 张功萱. 计算机组成原理. 北京:清华大学出版社,2005年09月
[3] 王诚. 计算机组成原理实验指导书. 北京:清华大学出版社,2002
[4] 杨小龙. 计算机组成原理与系统结构实验教程. 西安:西安电子科技大学出版社,2004
[5] 袁开榜. 计算机组成原理. 北京:高等教育出版社,1995
范文二:指令系统设计
课程设计说明书
题目: 指令系统设计
院 系:
专业班级: 学 号: 学生姓名: 指导教师:
2014 年 12 月 16 日
安徽理工大学课程设计(论文)任务书
2014年 11 月 18 日
安徽理工大学课程设计(论文)成绩评定表
本设计采用的系统是DJ-CPTH 型计算机组成原理实验系统,采用总线结构,并采用模块结构化设计,提供了两种实验模式:1.手动模式2. 自动运行。
系统提供两种控制器方式,即微程序控制器和组合逻辑控制器。本次使用的是微程序控制器。
本次课程设计正是用到了用户设计指令/微指令的功能。 设计的内容简要如下:
1. 带进位加法:ADDC A,#*;ADDC A,R?;ADDC A,*;ADDC A,@R?; 2. 带进位减法:SUBC A,#*;SUBC A,R?;SUBC A,*;SUBC A,@R?; 3. 辅助指令:MOV A,#*;MOV *,A;MOV @R?,#*;MOV R?,#*;
关键字:指令系统,微程序,计算机组成原理,DJ-CPTH
1原理介绍 .................................................................................................................... 1
1.1实验仪器逻辑图 .............................................................................................. 1 1.2功能简介 .......................................................................................................... 1 1.3 微程序控制器 ................................................................................................. 2 2 实验环境介绍 ........................................................................................................... 3
2.1 模型机的总体结构 ......................................................................................... 3 2.2 模型机的组成 ................................................................................................. 3 2.3 模型机的寻址方式 ......................................................................................... 4 3 系统设计及实现 ....................................................................................................... 5
3.1 设计思路 ......................................................................................................... 5 3.2 指令设计详述 ................................................................................................. 6 3.3 实验过程 ....................................................................................................... 11 4 总结 ......................................................................................................................... 14
4.1设计体会 ........................................................................................................ 14 4.2设计改进 ........................................................................................................ 14 参考文献...................................................................................................................... 15
1原理介绍
1.1实验仪器逻辑图
图1-1 DJ-CPTH 超强型计算机组成原理教学实验系统逻辑时序图
1.2功能简介
表1-1 数据输出功能表
表1-2 运算器功能控制
表1-3 其余功能简介
以上三个表格正是本次课程设计的模型机功能简介,课程设计中的微指令功能正是由这些功能参数结合完成的。
1.3 微程序控制器
本次课程设计是由模型机作为一个整体来实验,由前面的实验课程中可以得知,此模型机可以手动由开关输入输出;现在应切换至由软件介入控制。J1接入J2,使系统处于非手动状态;控制方式又原先的逻辑控制切换至“微程序控制”,还有一个切换至CPTH 控制的开关。最后,就是连接电脑和仪器的串行口。
2 实验环境介绍
2.1 模型机的总体结构
要设计指令就要了解本次实验的环境,以便于设计指令。
CPTH 模型机包括了一个标准CPU 所具备所有部件,这些部件包括:运算器ALU 、累加器A 、工作寄存器W 、左移门L 、直通门D 、右移门R 、寄存器组R0-R3、程序计数器PC 、地址寄存器MAR 、堆栈寄存器ST 、中断向量寄存器IA 、输入端口IN 、输出端口寄存器OUT 、程序存储器EM 、指令寄存器IR 、微程序计数器uPC 、微程序存储器uM ,以及中断控制电路、跳转控制电路。其中运算器和中断控制电路以及跳转控制电路用CPLD 来实现,其它电路都是用离散的数字电路组成。微程序控制部分也可以用组合逻辑控制来代替。以上功能在原理介绍部分已经涉及,就不再赘述
模型机为8 位机,数据总线、地址总线都为8位,但其工作原理与16位机相同。相比而言8 位机实验减少了烦琐的连线,但其原理却更容易被理解、吸收。
模型机的指令码为8 位,根据指令类型的不同,可以有0 到2 个操作数。指令码的最低两位用来选择R0-R3 寄存器,在微程序控制方式中,用指令码做为微地址来寻址微程序存储器,找到执行该指令的微程序。而在组合逻辑控制方式中,按时序用指令码产生相应的控制位。在本模型机中,一条指令最多分四个状态周期,一个状态周期为一个时钟脉冲,每个状态周期产生不同的控制逻辑,实现模型机的各种功能。因此指令的设计就受限于四个状态周期之中。
2.2 模型机的组成
CPTH 计算机组成原理实验系统由实验平台、开关电源、软件三大部分组成。 实验平台上有寄存器组R0-R3、运算单元、累加器A 、暂存器W 、直通/左移/右移单元、地址寄存器、程序计数器、堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制器、组合逻辑控制器、扩展单元、总线接口区、微动开关/指示灯、逻辑笔、脉冲源、管理单片机、24个按键、字符式LCD 、RS232。
2.3 模型机的寻址方式
寻址方式尤为重要,寻址方式的多寡决定了指令的实现方式,而本模型机所提供的寻址方式有以下五种。
累加器寻址:操作数为累加器A ,例如“CPL A ”是将累加器A 值取反,还有些指令是隐含寻址累加器A ,例如“OUT ”是将累加器A 的值输出到输出端口寄存器OUT 。
寄存器寻址:参与运算的数据在R0-R3 的寄存器中,例如 “ADD A,R0”指令是将寄存器R0 的值加上累加器A 的值,再存入累加器A 中。
寄存器间接寻址:参与运算的数据在存储器EM 中,数据的地址在寄存器R0-R3中,如 “MOV A,@R1”指令是将寄存器R1 的值做为地址,把存储器EM 中该地址的内容送入累加器A 中。
存储器直接寻址:参与运算的数据在存储器EM 中,数据的地址为指令的操作数。例如“AND A,40H ”指令是将存储器EM 中40H 单元的数据与累加器A 的值做逻辑与运算,结果存入累加器A 。
立即数寻址:参与运算的数据为指令的操作数。例如 “SUB A,#10H”是从累加器A 中减去立即数10H ,结果存入累加器A 。
以上五种寻址方式的具体实现就在系统设计里具体介绍。
3 系统设计及实现
3.1 设计思路
本设计项目的内容是带进位的加减法指令实现,由此可知,为了测试项目就需要其他的指令辅助。带进位的加减法需要四种寻址方式,为了测试这四种寻址方式,也要借由四种存储指令将操作数存入其中。我选取的四种寻址方式:寄存器寻址,内存寻址,立即数寻址,寄存器间接寻址。
经过一系列的实验,以及模型机的指令结构描述。基本上,组成每个指令的微指令中的最后一个为CBFFFF ,原因如下:单看高8位“CB ”代表EMRD ,PCOE ,IREN 为低电平(使能状态) ,PCOE 将地址送到地址线端,由EMRD 功能得到了指令,IREN 将指令存入IR 寄存器当中,同时,uPC 的值也与IR 的相同。
图3-1 指令读取
CBFFFF 完成了读取指令的功能,是设计过程中最为重要的环节,本指令系统基本上每条指令中都有这个微指令,可见其重要性。
若具体到带进位加减法的设计,那就是按照指令本身着手,比如ADDC A,#?, 这个是实现将立即数和寄存器A 相加在存入A 的功能。
构思如下:
Step1:根据立即数为操作数,首先找到存放的地方——EM(内存) 。
Step2:实现加法操作,需要ALU 的帮助,而其中的累加器A 是我们的另一个操作数,现在的步骤正是将立即数存入另一个寄存器W 中。
Step3:A中的数与W 中的数相加,送入数据缓冲器,再将数据缓冲器中的内容写入寄存器A 。
Step4:读取下一条指令。
以上只是想法,真实的实现步骤可能并不是按照所述发展。具体见设计详述。 现在讲述辅助指令的构成:四种寻址方式的Move 指令。为了实现加减法,需要这样的辅助指令,至于输入输出指令,构思的时候并没有涉及,主要就是节省设计时间;但就一个指令系统而言,那是必需的;否则,无法实现交互。项目
里没有实现的原因也很简单,就是CPTH 实验仪已经实现了各个部件数据的显示。
3.2 指令设计详述
按照思路,首先就是实现指令的书写。在设计指令时,我们把ADDC A,#?称为助记符,其中ADDC 就是名称,A 是左操作数,而#?是右操作数。在CPTH 微程序设计软件中,提供了相应的功能。机器码的选择也可以交由设计者自行选择。请注意,指令集里的_FATCH_是默认的,是指令入口地址。其指令是CBFFFF 。如果删除,则无法通过该软件修改。
图3-2 指令集设计界面
设计好指令集后,就可以进一步的设计微程序。微程序由四个状态周期构成,意味着程序功能的实现受到了限制,也表明功能简单需要组合实现更多的功能。
图3-3 微程序设计界面
当然,指令设计完成后,要存档。
1.ADDC A,#*
带进位加法的操作数中有立即数,所以要将立即数读取出来并存放到ALU 的W 寄存器中,立即数又是暂时存取在内存单元。那么我们就知道第一步所要启用的功能,EMRD ,EMEN 两个使能;当然,还要WEN 置零;但是立即数的存取地址我们并不知道,这个存取地址由PC 提供,所以,PCOE 需要置零。就此,我们完成了ADDC A,#*的第一步。
接下来,设计的就是核心内容带进位加法,这又是如何实现的呢?首先加法功能借由S2S1S0这三位实现置为010实现A+W,至于进位就交由FEN 实现,这就是标志寄存器实现进位存储。当A+W后直接送入数据寄存器,接下来就是把数据寄存器的内容送到累加器A 。而这只需一条指令就能完成。
最后还要取下一条指令。
所以这条指令的微程序就是C7FFEF ,FFFE94,CBFFFF 。
2.ADDC A,R?
带进位加法的操作数中有通用寄存器,那么将通用寄存器中的数存入W 寄存器中就是第一步。RRD ,WEN 就需要使能,剩下的就不需要。
接下来,加法功能借由S2S1S0这三位实现置为010实现A+W,至于进位就交由FEN 实现,这就是标志寄存器实现了进位存储。当A+W后直接送入数据寄存器,接下来就是把数据寄存器的内容送到累加器A 。
最后还要取下一条指令。
所以这条指令的微程序就是FFF7EF ,FFFE94,CBFFFF 。
3.ADDC A,@R?
带进位加法的操作数中有通用寄存器间接寻址。这个实现就费些功夫,首先要在通用寄存器中存入地址,而这个地址实际上是指向内存单元。我们要做的就是将内存单元的值放入W 寄存器。那么该如何实现呢?既然要内存单元的值那么肯定需要知道内容所在地址。我们将R? 中的值交给MAR 保管,因为读取其中的值需要MAR 帮助。所以,MAREN ,RRD 置零。
接下来,读取内存单元的值并存入W 寄存器。现在EMEN ,EMRD ,MAROE ,WEN 需要置零。其中,MAROE 就是将内存偏移地址给EM ,并找取内存单元的值。
之后,加法功能借由S2S1S0这三位实现置为010实现A+W,至于进位就交由FEN 实现,这就是标志寄存器实现了进位存储。当A+W后直接送入数据寄存器,接下来就是把数据寄存器的内容送到A 中。
最后还要取下一条指令。四个状态周期全都用上。
所以这条指令的微程序就是FF77FF ,D7BFEF ,FFFE94,CBFFFF 。
4.ADDC A,*
带进位加法的操作数中有内存单元。和寄存器的间接寻址很相似,不过差别就在于内存单元地址的获取。这个偏移地址的获取通过PCOE ,EMEN ,EMRD ,MAREN 置零,这样就将偏移地址存入MAR 寄存器中。
接下来,读取内存单元的值并存入W 寄存器。现在EMEN ,EMRD ,MAROE ,
WEN 需要置零。其中,MAROE 就是将内存偏移地址给EM ,并找取内存单元的值。
之后,加法功能借由S2S1S0这三位实现置为010实现A+W,至于进位就交由FEN 实现,这就是标志寄存器实现了进位存储。当A+W后直接送入数据寄存器中,接下来就是把数据寄存器的内容送到A 中。
最后还要取下一条指令。四个状态周期全都用上。
所以这条指令的微程序就是C77FFF ,D7BFEF ,FFFE94,CBFFFF 。
5.MOV A,#*
这是辅助指令,用于将用户想存取的内容放到相应的位置。
这个指令将立即数存入累加器A 。首先,立即数的获取。PCOE ,EMRD ,EMEN 置零,获取到了立即数,接着就要存储到A 寄存器中。AEN 置零。这个功能的实现其实只用到了一条微指令。
最后还要取下一条指令。
所以这条指令的微程序就是C7FFF7,CBFFFF 。
6.MOV R?,#*
这个辅助指令,是将立即数放入到通用寄存器R? 。首先,立即数的获取。PCOE ,EMRD ,EMEN 置零,获取到立即数,并把数据放到数据总线上。接下来,RWD 置零,立即数就写入到通用寄存器R? 。
最后取下一条指令。
这条指令的微程序就是C7FBFF ,CBFFFF 。
7.MOV @R?,#*
这个指令的设计难度不亚于带进位加法寄存器间接寻址。为什么这么讲? 第一,这个指令的左右操作数的寻址方式比较难以实现;第二,微指令的状态周期限制。首先,将立即数存入ST 堆栈寄存器中。PCOE ,EMRD ,EMEN ,STEN 置零,由此实现立即数的存储。
我们将R? 中的值交给MAR 保管,因为存储内存单元值需要MAR 帮助。所以,MAREN ,RRD 置零。
接着,将ST 寄存器的值放入到内存单元。EMWR ,EMEN ,MAROE 置零。选通ST 寄存器,X2X1X0的值置为010。
最后,再取下一条指令。
这条指令的微程序就是C7EFFF ,FF77FF ,B7BF5F ,CBFFFF 。
8.MOV *,A
这条辅助指令的设计是为了将数值存储到内存单元。因为立即数存储到内存单元的指令,被拒绝了。(总结再详谈)
寄存器A 的数值存储到内存单元中只需要一条微指令足以。EMWR ,PCOE ,EMEN 置零,目的就是指定可写的内存单元。接着就是将A 的数值存放到内存中,X2X1X0置为100,目的就是将数据缓冲器输出到数据总线,S2S1S0置为111,就是直接输出A 的内容到数据缓冲器中。
最后,再取下一条指令。
这条指令的微程序就是B7FF97,CBFFFF 。
注:带进位减法的指令实现,与加法的不同仅在于功能也就是S2S1S0置为101。这里就不再详细描述指令的具体实现步骤。
9.SUBC A,#*
这条指令的微程序就是C7FFEF ,FFFE95,CBFFFF 。
图3-4 SUBC A,#*简易流程图
10.SUBC A,R?
这条指令的微程序就是FFF7EF ,FFFE95,CBFFFF 。
图3-5 SUBC A,R? 简易流程图
11.SUBC A,@R?
这条指令的微程序就是FF77FF ,D7BFEF ,FFFE95,CBFFFF 。
图3-6 SUBC A,@R? 简易流程图
12.SUBC A,*
这条指令的微程序就是C77FFF ,D7BFEF ,FFFE95,CBFFFF 。
图3-7 SUBC A,* 简易流程图
3.3 实验过程
实验过程并没有截图记录,所以借用。
Step1:
调入你已经保存好的指令系统。Like this,
图3-8 调入指令系统
Step2
:
在源程序窗口输入程序,Like this,
图3-9 输入源程序
Step3:
按快捷键F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC 及uPC 如何工作是否正确。
到此为止,我们利用CPTH 软件系统已经建成了一个新的指令系统/微程序。新的指令系统从汇编助记符到指令机器码到微指令都与原来的指令系统有所不同。
4 总结
4.1设计体会
其实设计这些指令我并没有参考其余章节的内容,就是通过第二至第四章就可以编出指令了。2,3章的内容介绍了大部分功能组件的实现,通过小键盘控制也对指令的存取运行有了一定的认识。第4章模型机的综合实验便是认识和熟悉指令,微程序的概念。本次课程设计的内容也是比较简单的,比方说这个小项目就是设计带进位加减法,并使用四种寻址方式。在综合实验中都有涉及,比较有意思的就是辅助指令的设计,因为牵涉到了立即数到寄存器的间接寻址以及立即数存到内存单元两条指令,所以就开始设计。很快,也就十几分钟,不过上机测试的时候出现了些问题,便继续纠正。不过,立即数存内存单元这个指令因为ERROR 告吹。(推测是因为不支持)
课程设计的内容,如果仔细琢磨的话,还是蛮有用的,对于组成原理这门课程的认识也有不小的帮助。看似简单的指令设计,其实牵涉到很多的内容。这个新版的课程设计内容,也更基础;虽然比起用汇编写程序,并且根据你写程序,设计相应的指令这个项目要简单。但重心上是回到了指令设计。
设计上需要理解总线的使用调度,以免出现,地址冲突,数据传输冲突等问题。至少我是遇到了这样的问题,同样的,只设计所要求的指令会导致测试上的麻烦,没有辅助指令的输入,仍然无法实现,测试指令的时候也可以通过软件的逻辑图输入你的内容做测试。
4.2设计改进
其实改进倒谈不上,应该是一种想法,就是目前的指令效率是最高的吗?指令的设计难道就是有一种方案吗?这个指令方案倒是可以有多个,但是效率上的改变无法得知。但有一点是可以肯定的,你的指令状态周期越少,那么效率是要高的,同时意味着你对功能的调度全面,新的表达称为性能压榨。
参考文献
[1] 张昆藏.计算机系统结构.北京:科学出版社,1994
[2] 平玲娣,潘雪增. 计算机组成与设计. 浙江大学出版社,出版日期:2004
[3] 白中英.计算机组成原理(第二版) .北京:科学出版社,1998
[4] DJ-CPTH超强型计算机组成原理与系统结构实验指导书
[5] 李敬兆.8086/8088和基于RAM 核汇编语言程序设计. 第二版. 合肥:中国科学技术大学出版社.2012
[6]张晨曦, 王志英, 张春元, 戴蔡, 肖晓强. 计算机体系结构. 高等教育出版社,2004
[7]李文兵. 计算机组成原理(第二版). 清华大学出版社,2002
范文三:8086指令系统
通用寄存器 :
数据寄存器 :累加器 AX, 基址寄存器 BX, 计数器 CX, 数据寄存器 DX
变址寄存器 :源地址寄存器 SI, 目的变址寄存器 DI
指针寄存器:基址指针 BP ,堆栈指针 SP
段寄存器:
代码段寄存器 CS ,堆栈段寄存器 SS ,数据段寄存器 DS ,附加段寄存器 ES
标志寄存器:FLAGS ,指令指针:IP
数据寄存器
8086有 4个 16位 数 据 寄 存 器 :AX,BX,CX,DX;它 们 都 可 以 分 为 两 个 独 立 的 8位 寄 存 器 :AH/AL,BH/BL,CH/CL,DH/DL;对其中的某 8位操作 , 并不影响另外对应 8 位寄存器的数
据 . 数据寄存器是通用的 , 用来存放计算结果和操作数 , 但每个寄存器又有它们各自专用目的 , 主要是 :
AX 称为累加器 , 使用程度最高 , 用于算术 , 逻辑运算及与外设传送信息等 ;
BX 称为基地址寄存器 , 常用做存放存储器的地址 ;
CX 称为计数器 , 作为循环和串操作等指今中隐含的计数器 ;
DX 称为数据寄存器 , 常用来存放双字节长数据的高 16位 , 或存放外设端口地址 .
指针及变址寄存器
指针及变址寄存器包括 SI,DI,BP ,SP 四个 16位寄存器 , 常用于存储器寻址时提供地址 .SI 源变址寄存器 ,DI 目的变址寄存器 , 一般与 DS 联用确定数据段中某一存储单元地址 .SP 堆栈指针寄存器 , 指示栈顶的偏移地 址 ;BP 基址指针寄存器 , 表示堆栈段中的基地址 .IP16位指令指针寄存器 , 指示代码段中指令的偏移地址 , 它 与代码段寄存器 CS 联用 , 以确定下一条指令的物理地址 . 处理器利用 CS:IP取得下一条要执行的指令 , 然后 修改 IP 的内容 , 使之指向下一条指令的存储器地址 .
标志寄存器 (FLAGS) 也称为状志标志寄存器 PSW
0 CF(Carry Flag) 进位标志
1
2 PF(Parity Flag)零标志
3
4 AF(Auxiliary Carry Flag)辅助进位标志
5
6 ZF(Zero Flag)零标志
7 SF(Sign Flag)符号标志 :运算结果最高有效位的状态就是符号位的状态 .
8 TF(Trap Flag)陷井标志
9 IF(Interrupt-enable Flag)中断允许标志
10 DF(Direction Flag)方向标志
11 OF(Overflow Flag)溢出标志
12
13
14
15
状态标志 :CF,ZF,SF,PF,OF,AF
控制标志 :DF,IF,TF
8086的字长是 16位的 , 但其地址线是 32位的 .
8086处理器将 1M 存储器空间分成许多逻辑段 (Segment),每个段的最大限为 16KB. 这样 , 每个存储单元就 可以用
8位通用寄存器 AH/AL/BH/BL/CH/CL/DH/DL
16位的通用寄存器 AX/BX/CX/DX.
DST 目的操作数
SRC 源操作数
一 . 通用数据传送指令
1. 传送指令 MOV(move)
格式:MOV DST , SRC
操作:(DST)← (SRC)将原操作数 (字节或字 ) 传送到目的地址。
操作数要求:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数 DST 和源操作数 SRC 不允许同时为段寄存器;不能同时为存储器操作数, 源操作数 SRC 立即数方式,目的操作数 DST 不能是段寄存器, IP.CS 不能作为目标操作数。
2. 进栈指令 PUSH(pushontothestack)
出栈指令 POP(popfromthestack)
格式:PUSHSRC ; POPDST
操作:PUSH 指令在程序中常用来暂存某些数据,而 POP 指令又可将这些数据恢复。
PUSHSRC(SP)← (SP)-2; (SP)← (SRC)
POPDST(DST)← ((SP)); (SP)← (SP)
操作数要求:push 和 pop 指令不能使用立即数寻址方式。
对标志位的影响:PUSH 和 POP 指令都不影响标志位。
指令的特殊要求:PUSH 和 POP 指令只能是字操作,因此,存取字数据后, SP 的修改必须是 +2或者 -2;
POP 指令的目的操作数 DST 不允许是 CS 寄存器;
3. 交换指令 XCHG(exchange)
格式:XCHGOPR1, OPR2
操作:(OPR1)←→ (OPR2)
操作数要求:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
指令对标志位的影戏:不影响标志位。
指令的特殊要求:不允许使用段寄存器。
二 . 累加器专用传送指令
4. 输入指令 IN(input)
输出指令 OUT(output)
格式:IN ac, portport ≤ 0FFH
INac , DXport>0FFH
OUTport , acport ≤ 0FFH
OUTDX , acport>0FFH
操作:对 8086及其后继机型的微处理机,所有 I/O端口与 CPU 之间的通信都由输入输出指令 IN 和 OUT 来完成。 IN 指令将信息从 I/O输入到 CPU , OUT 指令将信息从 CPU 输出到 I/O端口,因此, IN 和 OUT 指令都要指出 I/O端口地址。
IN ac, portport ≤ 0FFH(AL)← (port)传送字节或 (AX)← (port+1, port) 传送字
INac , DXport>0FFH(AL)← ((DX))传送字节或 (AX)← ((DX)+1, (DX))传送字
OUTport , acport ≤ 0FFH(port)← (AL)传送字节或 (port+1, port) ← (AX)传送字
OUTDX , acport>0FFH(DX)← (AL)传送字节或 ((DX)+1, (DX))← (AX)传送字
对标志位的影响:不影响标志位。
指令的特殊要求:只限于在 AL 或 AX 与 I/O端口之间传送信息。
传送 16位信息用 AX ,传送 8位信息用 AL ,这取决于外设端口的宽度。
5. 换码指令 XLAT(translate)
格式:XLATopr 或 XLAT
操作:这条指令根据 AL 寄存器提供的位移量, 将 BX 指示的字节表格中的代码换存在 AL 中。 BX 代表表格 首地址, AL 为表内位移量, BX+AL偏移地址送给 AL 。
(AL)← ((DS)*10H+(BX)+(AL))
对标志位的影响 :不影响标志位。
指令的特殊要求:所建字节表格的长度不能超过 256字节,因为存放位移量的是 8位寄存器 AL 。
opr 为表格的首地址,因为 opr 所表示的偏移地址已存入 BX 寄存器,所以 opr 在换码指令中可有可无,有 则提高程序的可读性。
三 . 地址传送指令
6. 有效地址传送器 LEA(loadeffectiveaddress)
格式:LEAreg , src
操作:LEA 指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由 src 选定的一种存储器寻址 方式确定的。
操作数要求:各种存储器寻址方式。
对标志位的影响:不影响标志位。
指令的特出要求:指令中 reg 不能是段寄存器;
7. 指针送寄存器和 DSLDS(loadDSwithpoint)
指针送寄存器和 ESLES(loadESwithpoint)
格式:LDSreg , src
LESreg , src
操作:LDS 和 LES 指令把确定内存单元位置的偏移地址送寄存器,段地址 DS 或 ES 。这个偏移地址和段 地址(也称地址指针)是由 src 指定的两个相继字单元提供的。
LDSreg , src(reg)← (src)(DS)← (src+2)
LESreg , src(reg)← (src)(ES)← (src+2)
操作数要求:src 必须为存储器寻址方式
对标志位的影响:不影响标志位。
指令的特殊要求:指令中 REG 不能是段寄存器;
四 . 标志寄存器传送指令
8. 标志寄存器的低字节送 AHLAHF(loadAHwithFLAGS)
格式:LAHF
操作:(AH)← (FLAGS)0-7
对标志位的影响:不影响标志位
9. AH送标志寄存器低字节 SAHF(storeAHintoFLAGS)
格式:SAHF
操作:(FLAGS)0-7← (AH)
对标志位的影响:由装入值来确定标志位的值。
10. 标志进栈 PUSHF(pushtheflags)
格式:PUSHF
操作:(SP)← (SP)-2((SP)+1, (SP))← (FLAGS)0-15
对标志位的影响:不影响标志位。
11. 标志出栈 POPF(poptheFLAGES)
格式:POPF
操作:(FLAGS)0-15← ((SP)+1, (SP))(SP)← (SP)+2
对标志位的影响:由装入值来确定标志位的值。
[算术指令 ]
一 . 加法指令
12. 加法指令 ADD(addition)
格式:ADDdst , src
操作:(dst)← (src)+(dst)
操作数要求:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目 地操作数必须有一个寄存器寻址方式。
对标志位影响:SF=1加法结果为负数(符号位为 1)
SF=0加法结果为正数(符号位为 0)
ZF=1加法结果为零
ZF=0加法结果不为零
CF=1最高有效位向高位有进位
CF=0最高有效位向高位无进位
OF=1两个同符号数相加(正数 +正数或负数 +负数) ,结果符号与其相反。
OF=0两个不同符号数相加,或同符号数相加,结果符号与其相同。
13. 带进位加法指令 ADC(addwithcarry)
格式:ADDdst , src
操作:(dst)← (src)+(dst)+CF
操作数要求:他们两个操作数不能同时为存储器寻址。即除源操作数为立即数的情况外,源操作数和目地
操作数必须有一个寄存器寻址方式。
对标志位的影响:SF=1加法结果为负数
SF=0加法结果为正数
ZF=1加法结果为零
ZF=0加法结果不为零
CF=1最高有效位向高位有进位
CF=0最低有效位相高位无进位
OF=1两个同符号数相加,结果符号与其相反,
OF=0两个同符号数相加,或同符号相加,结果符号与其相同 14. 加 1指令 INC(increament)
格式:INCopr
操作:(opr)← (opr)+1
操作数要求可以使用除立即数方式外的任何寻址方式
对标志位的影响:SF=1加法结果为负数
SF=0加法结果为正数
ZF=1加法结果为零
ZF=0加法结果不为零
OF=1两个同符号数相加,结果符号与其相反,
OF=0两个同符号数相加,或同符号相加,结果符号与其相同。 二 . 减法指令
15. 减法指令 SUB(subtract)
格式:SUBdst , src
操作:(dst)← (dst)-(src)
操作数要求:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目 地操作数必须有一个寄存器寻址方式。
对标志位的影响:SF=1减法结果为负数(符号位为 1)
SF=0减法结果为正数(符号位为 0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0二进制减法运算中最高有效为向高位无借位(被减数 >=减数,够减的情况)
OF=1两数符号相反(正数 -负数,或负数 -正数) ,而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
16. 带借位减法指令 SBB(subtractwithborrow)
格式:SBBdst , src
操作:(dst)← (dst)-(src)-CF
操作数要求:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目 地操作数必须有一个寄存器寻址方式。
对标志位的影响:SF=1减法结果为负数(符号位为 1)
SF=0减法结果为正数(符号位为 0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0二进制减法运算中最高有效为向高位无借位(被减数 >=减数,够减的情况)
OF=1两数符号相反(正数 -负数,或负数 -正数) ,而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
17. 减 1指令 DEC(decrement)
格式:DECopr
操作:(opr)← (opr)-1
操作数要求:可以使用除立即数方式外的任何寻址方式。
对标志位的影响:SF=1减法结果为负数(符号位为 1)
SF=0减法结果为正数(符号位为 0)
ZF=1减法结果为零
ZF=0减法结果不为零
OF=1两数符号相反(正数 -负数,或负数 -正数) ,而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
18. 比较指令 CMP(compare)
格式:CMPopr1, opr2
操作:(opr1)-(opr2),根据相减结果设置条件码,但不回送结果。
操作数要求:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目 地操作数必须有一个寄存器寻址方式。
对标志位的影响:SF=1减法结果为负数(符号位为 1)
SF=0减法结果为正数(符号位为 0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况) CF=0二进制减法运算中最高有效为向高位无借位(被减数 >=减数,够减的情况) OF=1两数符号相反(正数 -负数,或负数 -正数) ,而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
19. 求补指令 NEG(negate)
格式:NEGopr
操作:(opr)←0-(opr)
操作数要求:可以使用除立即数方式外的任何寻址方式。
对标志位的影响:CF=1 不为 0的操作数求补时
CF=0 为 0的操作数求补时
OF=1操作数为 -128(字节运算)或操作数为 -32768(字运算)
OF=0当求补运算的操作数不为-128(字节)或-32768(字)时
三 . 乘法指令
20. 无符号乘法指令 NUL(unsignedmultiple)
有符号乘法指令 IMUL(signedmuliple)
格式:NULsrc
IMULsrc
操作:(AX)← (AL)*(src)
(DX, AX) ← (AX)*(src)
操作数要求:src 可以使用除立即数方式以外的任一种寻址方式。
对标志位的影响:乘法指令只影响标志位 CF 和 OF ,其他条件码位无定义。
MUL 指令的条件码设置为:
CFOF=00乘积的高一半为 0(字节操作的(AH )或字操作的(DX ) )
CFOF=11乘积的高一半不为 0
IMUL 指令的条件码设置为:
CFOF=00乘积的高一半为低一半的符号扩展 .
CFOF=11其他情况
指令的特殊要求:MUL 和 IMUL 指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是,指令 中只给出源操作数 src ,目的操作数是隐含的,它只能是累加器(字运算为 AX ,字节运算为 AL ) 。隐含的 乘积寄存器是 AX 或 DX (高位)和 AX (低位) 。
四 . 符号扩展指令
21. 节扩展为字 CBW(convertbytetoword)
格式:CBW
操作:(AH)=00H当 (AL)的最高有效位为 0时
(AH)=FFH当 (AL)的最高有效位为 1时
对标志位的影响:不影响标志位
指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在 AL 寄存器或 AX 寄存器中。 22. 字扩展为双字 CWD(convertwordtodoubleword)
格式:CWD
操作:(DX)=0000H当 (AX)的最高有效位为 0时
(DX)=FFFFH当 (AX)的最高有效位为 1时
对标志位的影响:不影响标志位
指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在 AL 寄存器或 AX 寄存器中。 五 . 除法指令
23. 无符号数除法 DIV(unsigneddivide)
带符号数除法 IDIV(singeddivide)
格式:DIVsrc
IDIVsrc
操作:字操作
(AL)← (AX)/src的商
(AH)← (AX)/src的余数
字节操作
(AX)← (DX, AX)/src的商
(DX)← (DX, AX)/src的余数
操作数要求:src 作为除数,可用除立即数以外的任一种寻址方式来取得。
对标志位的影响:不影响条件码。
指令的特殊要求:除法指令要求字操作时,被除数必须为 32位,除数是 16位,商和余数是 16位的;字节 操作时,被除数必须为 16位,除数是 8位,得到的商和余数是 8位的。
六 . 十进制调整指令
[逻辑指令 ]
一 . 逻辑运算
24. 逻辑与 AND(logicand)
格式:ANDdst , src
操作:(dst)← (dst)与 (src)
操作数要求:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操
作数必须有一个寄存器寻址方式。
对标志位的影响:指令执行后 CF 和 OF 置零, AF 无定义。
SF=1指令执行后的结果为负数(符号位为 1)
SF=0指令执行后的结果为正数(符号位为 0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中 1的个数为偶数时置 1
PF=0结果操作数中 1的个数为奇数时置 0
25. 逻辑或 OR(logicor)
格式:ORdst , src
操作:(dst)← (dst)或 (src)
操作数要求:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的操 作数必须有一个寄存器寻址方式。
对标志位的影响:指令执行后 CF 和 OF 置零, AF 无定义。
SF=1指令执行后的结果为负数(符号位为 1)
SF=0指令执行后的结果为正数(符号位为 0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中 1的个数为偶数时置 1
PF=0结果操作数中 1的个数为奇数时置 0
26. 逻辑非 NOT(logicnot)
格式:NOTorc
操作:(dst)← (opr)
操作数要求:除立即数寻址方式以外的其余寻址方式
对标志位的影响:对标志位无影响
27. 异或 XOR(exclusiceor)
格式:XORdst , src
操作:(dst)← (dst)异或 (src)
操作数要求:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的操 作数必须有一个寄存器寻址方式。
对标志位的影响:令执行后 CF 和 OF 置零, AF 无定义。
SF=1指令执行后的结果为负数(符号位为 1)
SF=0指令执行后的结果为正数(符号位为 0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中 1的个数为偶数时置 1
PF=0结果操作数中 1的个数为奇数时置 0
28. 测试指令 TEST
格式:TESTopr1, opr2
操作:(opr1)与 (opr2)
操作数要求:两个操作数不能同时为存储器寻址,即为除源操作数为立即数的情况外,源操作数和目的操 作数必须有一个寄存器寻址方式。
对标志位的影响:令执行后 CF 和 OF 置零, AF 无定义。
SF=1指令执行后的结果为负数(符号位为 1)
SF=0指令执行后的结果为正数(符号位为 0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中 1的个数为偶数时置 1
PF=0结果操作数中 1的个数为奇数时置 0
二 . 移位指令
29. 逻辑左移 SHL(shiftlogicalleft)
格式:SHLdst , cnt
操作:SHL 指令向左逐位移动 cnt 次,每次逐位移动后,最低位用 0来补充,最高位移入 CF 。
操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数) cnt=1时, 1可以直 接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值
OF=1当 cnt=1时,移动后最高位的值发生变化。
OF=0当 cnt=1时,移动时最高位的值未发生变化。
SF. ZF. PF根据移动后的结果设置。
30. 逻辑右移 SHR(shiftlogicalright)
格式:SHRdst , cnt
操作:SHR 指令向右逐位移动 cnt 次,每次逐位移动后,最高位用 0来补充,最低位移入 CF 。
操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数) cnt=1时, 1可以直 接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值
OF=1当 cnt=1时,移动后最高位的值发生变化。
OF=0当 cnt=1时,移动时最高位的值未发生变化。
SF. ZF. PF根据移动后的结果设置。
31. 算术左移 SAL(shiftarithmeticleft)
格式:SALdstcnt
操作:SAL 指令向左逐位移动 cnt 次,每次逐位移动后,最低位用 0来补充,最高位移入 CF 。
操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数) cnt=1时, 1可以直 接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值
OF=1当 cnt=1时,移动后最高位的值发生变化。
OF=0当 cnt=1时,移动时最高位的值未发生变化。
SF. ZF. PF根据移动后的结果设置。
32. 算术右移 SAR(shiftarithmeticright)
格式:SARdst , cnt
操作:SAR 指令向右逐位移动 cnt 次,每次逐位移动后,最高位用符号位来补充,最低位移入 CF 。 操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数) cnt=1时, 1可以直 接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值
OF=1当 cnt=1时,移动后最高位的值发生变化。
OF=0当 cnt=1时,移动时最高位的值未发生变化。
SF. ZF. PF根据移动后的结果设置。
33. 循环左移 ROL(rotateleft)
格式:ROLdst , cnt
操作:ROL 对由 dst 指定的寄存器或存储器操作数左移循环移动 cnt 所指定的次数,每左移一次,把最高 位同时移入 CF 和操作数最低位。
操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数(或位数) cnt=1时, 1可以直 接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值
OF=1当 cnt=1时,移动后最高位的值发生变化。
OF=0当 cnt=1时,移动时最高位的值未发生变化。
SF. ZF. PF根据移动后的结果设置。
34. 循环右移 ROR(rotateright)
格式:RORdst , cnt
操作:ROR 对由 dst 指定的寄存器或存储器操作数右移循环移动 cnt 所指定的次数,每右移一次,把最低 位同时移入 CF 和操作数最高位。
操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数(或位数) cnt=1时, 1可以直 接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值
OF=1当 cnt=1时,移动后最高位的值发生变化。
OF=0当 cnt=1时,移动时最高位的值未发生变化。
SF. ZF. PF根据移动后的结果设置。
35. 带进位的循环左移 RCL(rotateleftthroughcarry)
格式:RCLdst , cnt
操作:RCL 对由 dst 指定的寄存器或存储器操作数,连同进位标志 CF 左循环移动, m 所指定的次数,每
左移一次,把操作数的最高位移入 CF ,而 CF 中原有内容移入操作数的最低位。
指定支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数(或位数) cnt=1时, 1可以直接写在指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值。
OF=1当 cnt=1时,移动后最高位的值未发生变化。
OF=0当 cnt=1时,移动后最高位的值发生变化。
SF. ZF. PF标志位不受影响。
36. 带进位的循环右移 RCR(rotaterightthroughcarry)
格式:RCRdst , cnt
操作:RCR 对由 dst 指定的寄存器或存储器操作数,连同进位标志 CF 右循环移动, m 所指定的次数,每 右移一次,把操作数的最高低位移入 CF ,而 CF 中原有内容移入操作数的最高位。
操作数要求:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数(或位数) cnt=1时, 1可以直 接写入指令中, cnt>1时, cnt 必须放入 CL 寄存器中。
对标志位的影响:CF=移入的数值。
OF=1当 cnt=1时,操作数最高位的值未发生变化。
OF=0当 cnt=1时,操作数最高位的值发生变化。
SF. ZF. PF标志位不受影响。
[串处理指令 ]
一 . 设置方向标志指令
37. DF置零 CLD(cleardirectionflag)
DF 置一 STD(setdirectionflag)
格式:CLD
STD
操作:CLDDF=0
STDDF=1
二 . 串处理指令
38. 串传送 MOVSB/MOVSW(movestringbyte/word)
格式:MOVSB
MOVSW
操作:(ES:DI)← (DS:SI)
(SI)← (SI)+/-1(字节 ) 或 +/-2(字 )
(DI)← (DI)+/-1(字节 ) 或 +/-2(字 )
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是 SI 和 DI 寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。
39. 存串 STOSB/STOSW(stroefromstringbyte/word)
格式:STOSB
STOSW
操作:(ES:DI)← (AL)或 (AX)
(DI)← (DI)+/-1(字节 ) 或 +/-2(字 )
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是 SI 和 DI 寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。
40. 取串 LODSB/LODSW(loadfromstringbyte/word)
LODSW
操作:(AL)或 (AX)← (DS:SI)
(SI)← (SI)+/-1(字节 ) 或 +/-2(字 )
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是 SI 和 DI 寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。
41. 串比较 CMPSB/CMPSW(comparestringbyte/word)
格式:CMPSB
CMPSW
操作:(DS:SI)-(ES:DI)根据比较结果设置条件码
(SI)← (SI)+/-1(字节 ) 或 +/-2(字 )
(DI)← (DI)+/-1(字节 ) 或 +/-2(字 )
指令对条件码的影响:SF=1减法结果为负数(符号位为 1)
SF=0减法结果为正数(符号位为 0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0二进制减法运算中最高有效为向高位无借位(被减数 >=减数,够减的情况)
OF=1两数符号相反(正数 -负数,或负数 -正数) ,而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
42. 串扫描 SCASB/SCASW(scanstringbyte/word)
SCASW
操作:(AL)← (ES:DI)或 (AX)← (ES:DI)根据扫描比较的结果设置条件码。
(DI)← (DI)+/-1(字节 ) 或 +/-2(字 )
指令对条件码的影响:SF=1结果为负数(符号位为 1)
SF=0结果为正数(符号位为 0)
ZF=1结果为零
ZF=0结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况) CF=0二进制减法运算中最高有效为向高位无借位(被减数 >=减数,够减的情况) OF=1两数符号相反(正数 -负数,或负数 -正数) ,而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
三 . 串重复前缀
43. 重复执行串 REP
格式:REP(CX)=重复次数
操作:① (CX)=0时,串指令执行完毕,否则执行②~④
②(CX)←(CX)-1
③执行串指令(MOVS 或 STOS )
④重复执行①
44. 相等 /为零时重复执行串指令 REPE/REPZ
格式:REPE/REPZ(CX)=比较 /扫描的次数
操作:① (CX)=0或 ZF=0时,结束执行串指令,否则继续②~④
②(CX)←(CX)-1
③执行串指令(CMPS 或 SCAS )
④重复执行①
45. 不等 /不为零时重复执行串指令 REPNE/PEPNZ
格式:REPNE/PEPNZ(CX)=比较 /扫描的次数
操作:① (CX)=0或 ZF=1,结束执行串指令,否则继续②~④
②(CX)←(CX)-1
③执行串指令(CMPS 或 SCAS )
④重复执行①
[控制转移指令 ]
一.无条件转移指令
46. 短转移 JMPSHORTlabel(shortjump)
格式:JMPSHORTlabel
操作:(IP)←当前 (IP)+8位位移量 8位位移量是汇编程序在汇编源程序时, 根据目标地址和当前 IP 之间的距 离自动生成的。
指令对条件码的影响:对标志位无影响。
47. 近转移 JMPNEARPTRlabel(nearjump)
格式:直接转移 JMPlabel(directjump)
寄存器间接转移 JMPreg(registerindirectjump)
存储器间接转移 JMPWORDPTROPR(memoryindirectjump)
操作:JMPlabel(IP)← OFFSETlabel=(IP)当前+16位位移量
JMPreg(IP)← (reg)
JMPWORDPTROPR(IP)← (PA+1, PA)
操作数要求:指令中的转向地址可以是直接寻址方式 . 寄存器寻址方式 . 寄存器间接寻址方式和存储器寻址 方式。
指令对条件码的影响:对标志位无影响。
48. 远转移 JMPFARPTRlabel(forjump)
格式:JMPFARPTRlabel
操作:(IP)← label 的段内偏移地址
(CS)← label 所在段的段地址
操作数要求:远转移的目的地址可以使用除立即寻址方式外的任何寻址方式来表示。
指令对条件码的影响:对标志位无影响。
二 . 条件转移指令
格式及功能
根据条件码的值转移:
49. JZ(JE)OPRZF=1
50. JNZ(JNE)OPRZF=0
51. JSOPRSF=1
52. JNSOPRSF=0
53. JOOPROF=1
54. JNOOPROF=0
55. JPOPRPF=1
56. JNPOPRPF=0
57. JCOPRCF=1
58. JNCOPRCF=0
比较两个无符号数,根据比较的结果转移
59. JB(JNAE, JC)OPRCF=1被减数小于减数则转移
60. JNB(JAE, JNC)OPRCF=0被减数大于或等于减数则转移
61. JBE(JNA)OPRCF或 ZF=1被减数小于或等于减数则转移
62. JNBE(JA)OPRCF或 ZF=0被减数大于减数则转移
比较两个带符号数,根据比较结果转移
63. JL/JNGEOPRSF异或 OF=1被减数小于减数则转移
64. JNL/JGESF异或 OF=0被减数不小于减数则转移
65. JLE/JNE(SF异或 OF) 与 ZF=1被减数不大于减数则转移
66. JNLE/JG(SF异或 OF) 与 ZF=0被减数大于减数则转移
根据 CX 寄存器的值转移
67. JCXZ(CX)=0CX内容为零则转移
指令的特殊要求:所有条件转移指令都是短转移指令,转移的目标地址必须在当前 IP 地址的 -128至 +127字节范围之内,因此条件转移指令是 2字节指令。
三 . 循环指令
68. 循环 LOOP(loop)
格式:LOOPlabel
操作:①(CX)←(CX)-1
②若(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用 8位带符号数来表示的,转向 地址在相对于当前 IP 值的-128~+127字节范围之内。
69. 为零 /相等时循环 LOOPZ/LOOPE(loopwhilenonzeroorequal)
格式:LOOPNZ/LOOPNElabel
操作:①(CX)←(CX)-1
②若 ZF=1且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用 8位带符号数来表示的,转向 地址在相对于当前 IP 值的-128~+127字节范围之内。
70. 不为零 /不相等时循环 LOOPNZ/LOOPNE(loopwhilenonzeroornotequal)
格式:LOOPNZ/LOOPNElabel
操作:①(CX)←(CX)-1
②若 ZF=0且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用 8位带符号数来表示的,转向 地址在相对于当前 IP 值的-128~+127字节范围之内。
四 . 子程序调用
71. 段内直接近调用 CALLSUBROUT
操作:(SP)← (SP)-2
((SP)+1, (sp))← (IP)
(IP)← (IP)+16位位移量
段内间接近调用 CALLDESTIN
操作:(SP)← (SP)-2
((SP)+1, (SP))← (IP)
(IP)← (EA)
72. 段间直接调用 CALLFARPTRSUBROUT
操作:(SP)← (SP)-2, ((SP))← (CS)当前
(SP)← (SP)-2, ((SP))← (IP)当前
(IP)←偏移地址 (在指令的第 2. 3个字节 )
(CS)←段地址 (在指令的第 4. 5个字节 )
五 . 返回指令
73. 段内返回 (近返回 )RET
操作:(IP)← ((SP)+1, (SP))
(SP)← (SP)+2
段间返回 (远返回 )RET
操作:(IP)← ((SP)), (SP)← (SP)+2
(CS)← ((SP)), (SP)← (SP)+2
带立即数返回 RETN
执行操作:①返回地址出栈(操作同段内或段间返回)
②修改堆栈指针:(SP)←(SP)+N
六 . 中断及中断返回指令
74. INTn中断指令(interrupt ) , n 为中断类型号
执行操作:①入栈保存 FLAGS :(SP)←(SP)-2,((SP))←(FLAGS)②入栈保存返回地址:(SP)←(SP)-2,((SP))←(CS) (SP)←(SP)-2,((SP))←(IP)③转中断处理程序:(IP)←(n×4)
(CS)←(n×4+2)
75. IRET中断返回指令(returnfrominterrupt )
执行操作:①返回地址出栈:(IP)←((SP)),(SP)←(SP)+2
(CS)←((SP)),(SP)←(SP)+2 ② FLAGS 出栈:(FLAGS)←((SP)),(SP)← (SP)+2 76. INTO溢出则中断(中断类型为 4)
执行操作:若 OF=1(有溢出) ,则:
① 入栈保存 FLAGS :(SP)←(SP)-2,((SP))←(FLAGS)② 入栈保存返回地址:(SP)←(SP)-2,((SP))←(CS) (SP)←(SP)-2,((SP))←(IP)③ 转中断处理程序:(IP)←(4×4)=(10H)
(CS)←(4×4+2)=(12H)
范文四:DSP的指令系统
TI 公司三大系列DSP 的指令系统简述
姓名:刘帅民 学号:201120195005 班级:SJ1126 专业:通信与信息系统 摘要:文章首先引入TI 公司三大系列DSP 的设计步骤,指出在这些设计步骤当中,软件系统的设计是十分关键的。但是对于不同的DSP 芯片它们的指令系统是不同的,所以它们的软件系统的设计也是不同的。鉴于此,本文在此原因的前提下对三大系列DSP 的指令系统进行了简要的叙述。
关键词:DSP ;软件系统;指令系统
Abstract :The article first introduces three series of DSP's designing steps of the TI company , and among these designing steps,the design of software system is crucial.Because different DSP chip's instruction set is different, so the designs of their software system are different.According to this, a brief description about the three series of DSP instruction set is been made under the premise of this reason.
Keyword:DSP;software system;instruction set
一 引言
TI 公司的三大系列芯片主要是TMS320C2000、TMS320C5000、TMS320C6000系列,对于这些芯片的设计步骤主要包括:确定系统性能指标、核心算法模拟和验证、选择DSP 芯片及其他系统组件、软件设计和测试、硬件设计和测试、系统测试和集成。
这些芯片具有许多强大的功能,但是在实现DSP 系统的设计过程当中,系统的软件设计和测试是非常重要的一步。由于三大系列DSP 芯片的具体功能以及结构不同,所以它们在进行软件设计和测试时的指令系统也是不尽相同的。下面就三大系列DSP 芯片的指令系统做一个简要的概述。
二 三大系列DSP 芯片指令系统简介
1 TMS320C2000的指令系统
TMS320C2000系列DSP 提供了十分丰富的指令系统,支持32位操作。从功能上可以分为配置指令、算术指令、逻辑指令、程序控制指令以及装载与存储指令等5大类,总共有300多条指令。
1)配置指令
配置指令主要用来对DSP 芯片的工作模式、片上外设等进行配置,使DSP 芯片工作于开发者所希望的工作模式。一般来讲,配置指令是通过对特定的配置寄存器进行操作来完成其功能的。常用的两个配置指令是SETC 和CLRC ,前者将相应的寄存器位设置为1,后者将相应的寄存器位设置为0。此外还有许多其它的命令也可以完成配置命令。
2)算术指令
算术指令是指用于算术运算的指令,包括加法、减法、乘法、乘累加、乘累减以及其它一些专用指令。值得一提的是,由于内核的增强特性,TM S320C2000系列DSP 芯片支持32位硬件乘法,也就是说,它可以单周期完成一个32位×32位的定点乘法或者乘累加运算, 或者单周期完成两个16位×16位的定点乘累加运
算。
3)逻辑指令
逻辑指令包括与、或、异或、移位和测试等指令。TMS320C2000系列DSP 中C28x 系列芯片除了提供C24x 系列DSP 支持的各种逻辑指令外,还支持64位的逻辑运算,共提供了9个支持64位逻辑运算的逻辑指令。
4)程序控制指令
程序控制指令主要是指用来完成程序跳转控制、子程序调用和返回、指令和指令块循环、中断处理等功能的相关指令。TMS320C2000系列芯片提供了丰富的程序控制指令,这使得开发人员可以灵活地在程序中设置各种跳转,可以进行模块化的程序设计,提高程序的可读性和可维护性。
5)装载和存储指令
装载和存储指令一般用在算术运算和逻辑运算的前后,给相应的寄存器转载需要运算的数或包含有需要运算的数的地址,或将运算的结果存储到相应的存储单元里面去。这一类的指令总的来说使用起来非常简便。
2 TMS320C5OOO的指令系统
TMS320C5000的指令系统共有129条基本指令,由于操作数的寻址方式不同,由它们可以派生多至205条指令。按指令的功能可分成四大类算术运算指令、逻辑运算指令、程序控制指令装载和存储指令。下面将进行逐一描述。
1)算术运算指令
算术运算指令是实现数学计算的重要指令集合。TMS320C5000的算术指令具有运算功能强、指令丰富等特点。
常用的算术运算指令如下:加法指令(ADD)、减法指令(SUB)、乘法指令(MPY)、乘法-累加/减指令(MAC/MAS)、双字运算指令(DADD) 、特殊用途指令。
2)逻辑运算指令
TMS320C5000具有丰富的逻辑运算指令,主要包括一下一些常用的:与运算指令(AND)、或运算指令(OR)、异或运算指令(XOR)、移位操作指令(SHIFT)、测试操作指令(TEST)。
3)程序控制指令
程序控制指令主要包括以下几类:分支转移指令(B[D]、BACC[D]、BANZ[D]、BC[D]、FB[D]、FBACC[D])、子程序调用指令(CALA[D]、CALL[D]、CC[D]、FCALA[D]、FCALL[D])、中断指令(INTR 、TRAP )、返回指令(FRET[D]、FRETE[D]、RC[D]、RET[D]、RETE[D]、RETF[D])、重复操作指令(RPT 、RPTB[D]、RPTZ )、堆栈操作指令(FRAME 、POPD 、POPM 、PSHD 、PSHM )、其他程序控制指令(IDLE 、MAR 、NOP 、RESET 、RSBX 、SSBX 、XC )。
4)装载和存储指令
装载和存储指令是从存储器中将源操作数传送到目的操作数所指定的存储
器中。其主要包括:装载指令(有21条主要包括DLD 、LD 、LDR 、LDU 等)、存储指令(有14条主要包括DST 、ST 、STH 、STL 等)、条件存储指令(CMPS 、SACCD 、SRCCD 、STRCD )、其它装载和存储指令(有12条主要有MVDD 、MVDK 、MVDM 、MVDP 等 )。
5)并行执行指令
并行操作是利用流水线和并行操作的硬件电路,将单指令的数据传送和存储与各种运算同时进行操作。可充分利用TMS320C5000的流水线特性,提高代码和时间效率。
其主要包括: 并行装载和存储指令(ST src,Ymem|| LD Xmem,dst 累加器移位存储并行移位加载累加器、ST src,Ymem|| LD Xmem,T 累加器移位存储并行加载T 寄存器)、并行存储和加/减指令(LD Xmem ,dst|| MAC Ymem ,dst_操作数移位加载累加器并行乘法累加运算、LD Xmem ,dst|| MACR Ymem, dst_操作数移位加载累加器并行带舍入乘法累加运算、LD Xmem ,dst|| MAS Ymem,dst_操作数移位加载累加器并行乘法减法运算、LD Xmem ,dst|| MASR Ymem, dst_操作数移位加载累加器并行带舍入乘法减法运算)、并行装载和乘法指令(ST src ,Ymem|| ADD Xmem,dst 累加器移位存储并行移位加法运算、ST src,Ymem|| SUB Xmem,dst 累加器移位存储并行移位减法运算)、并行存储和乘法指令(ST src ,Ymem|| MAC Xmem,dst 累加器移位存储并行乘法累加运算、ST src ,Ymem|| MACR Xmem, dst 累加器移位存储并行乘法累加运算、ST src ,Ymem|| MAS Xmem ,dst 累加器移位存储并行乘法减法运算、ST src ,Ymem|| MASR Xmem, dst 累加器移位存储并行乘法减法运算、ST src ,Ymem|| MAY Xmem ,dst 累加器移位存储并行乘法运算)。
3 TMS320C6OOO的指令系统
TMS320C6000的指令主要有以下几类:算术运算类指令、数据搬移类指令、程序转移类指令、逻辑及位域操作指令。下面将对它们进行逐一的介绍。
1)算术运算类指令
其主要有:有符号数加减运算指令(ADD 、SUB 、ADD2、SUB2)、无符号数加减运算指令(ADDU 、SUBU )、带饱和的有符号数加减运算指令(SADD 、SSUB )、与16位常数进行加法操作的指令(ADDK )、乘法运算指令(MPY 、MPYU 、MPYSU 、MPYHL 、MPYHLU 、MPYHULS 、MPYHSLU 、MPYLH 、MPYLHU 、MPYLUHS 、MPYLSHU 、SMPY 、SMPYLH 、SMPYHL )。
2)数据搬移类指令
其主要包括三类:MV 指令用于在通用寄存器之间传送数据、MVC 指令用于在通用寄存器和控制器之间传送数据,只能使用.S2功能单元、MVK 类指令用于把16位常数送入通用寄存器。
3)程序转移类指令
该类指令主要有四种:B (.unit) label 用标号label 表示目标地址的转移指令、B .S2 src2用寄存器表示目标地址的转移指令、B .S2 IRP 从可屏蔽中断寄存器取目标地址的转移指令、B .S2 NRP 从不可屏蔽中断寄存器取目
标地址的转移指令。
4)逻辑及位域操作指令
它主要有四种:逻辑运算指令(AND 、OR 、XOR 、NEG )、移位指令(SHL 、SHR 、SHRU 、SSHL )、位操作指令(CLR 、SET 、EXT 、EXTU 、LMBD 、NORM )、比较判别类指令(CMPEQ 、CMPGT(U)、CMPLT(U))。
三 结论
由于TI 三大系列DSP 的结构与功能的差异造成在对他们进行软件系统设计时,它们的指令系统是不相同的,以上对它们的指令系统的叙述只是简单的叙述,如果要进一步了解指令系统需要查阅相关资料。
范文五:8086指令系统
嘉应学院 计算机学院 实验报告
课程名称:汇编语言程序设计 开课学期:2017-2018学年第 1学期 班 级:
指导老师:
实验题目:80x86的指令系统
学 号:
姓 名:
一、实验目的:
学会使用 80x86的指令系统中的指令
二.实验内容
使用指令序列完成两个运算任务
三、实验过程描述
(一 ) 设 X 、 Y 、 Z 均为双精度数,它们分别存放在地址为 X , X+2; Y , Y+2; Z , Z+2的存储单元中,存放时高位字在高地址中,低位 字在低地址中。在 8086和 80286中可用下列指令序列实现 w<>
并用 w 和 w+2单元存放运算结果。
ADC :带低位的进位加法
SBB :带低位借位减法
ADC DX,0:加进位
低位与低位对应加减,带进位高位与高位对应加减。
X,Y,Z,W 的值
运行过程:
最终结果:
(二 ) 算术运算综合举例,计算:(V-(X*Y+Z-540) ) /X
其中 X , Y , Z,V 均为 16位带符号数,已分别装入 X,Y,Z,V 单元中, 要求上式计算结果的商存入 AX , 余数存入 DX 寄存 器。编制程序如下:
8086CPU 在机器指令中要指明,指令进行的是字操作还是字 节操作。 在没有寄存器名存在的情况下, 用操作符 WORD 或 BYTE PTR 指明内存单元的长度, WORD PTR表示取字操作
带符号数运算需要扩展到 32位
X,Y,Z,V 的值
运行过程:
最终结果:
四、实验小结
通过本实验, 我了解到了 8086指令系统中数据传输指令和基本运算 指令的使用方法和使用规范, 如高低位对应加减, 高位字存在高地址中, 低位字存在低地址中,加 0加进位,无指明寄存器时指明操作的长度, 带符号位扩展等。