第三章 指令集结构._第1页
第三章 指令集结构._第2页
第三章 指令集结构._第3页
第三章 指令集结构._第4页
第三章 指令集结构._第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 三三 章章 指 令 集 结 构 指令集结构(instruction set architecture) ,即 ISA,是微处理器的接口,包含了与该微处理器进行交互所需要的信息,但并不涉及微处理器自身如何设计和实现的细节。 什么是指令集结构?什么是指令集结构? ISA包括:微处理器的指令集、程序员可直接访问的寄存器的细节、访问内存所需的信息、微处理器如何响应中断。1. 1. 程序设计语言的级别程序设计语言的级别2. 2. 汇编语言指令汇编语言指令 3. 3. 指令集结构设计指令集结构设计4. 4. 两种微处理器两种微处理器( (相对简单相对简单CPUCPU和和80858085微处理微处理

2、器器) )的指令集结构的指令集结构 主要内容:主要内容:3.1 程序设计语言的级别程序设计语言的级别 3.1.1 3.1.1 语言种类语言种类 高级语言(高级语言(high-level languageshigh-level languages) 汇编语言(汇编语言(assembly languageassembly language) 向下兼容(backward compatible) 平台无关(platform-independent) 机器语言机器语言3.1.2 3.1.2 编译和汇编程序编译和汇编程序 1. 1. 编译、汇编编译、汇编2. 2. 编译器编译器 源程序、源代码、目标代码源

3、程序、源代码、目标代码 连接器连接器、装载器装载器3. 3. 编译过程编译过程 同一高级语言源代码可以经过编译在不同一高级语言源代码可以经过编译在不 同的微处理器和操作系统或者计算平台上运行同的微处理器和操作系统或者计算平台上运行。 图图3.1 3.1 高级程序的编译过程高级程序的编译过程 装载器包含在计算平台中装载器包含在计算平台中 4.4.汇编器和汇编过程汇编器和汇编过程 图图3.2 3.2 汇编语言程序的汇编过程汇编语言程序的汇编过程 每一种汇编语言对应一种微处理器,不需要针对不同平台的汇编器 。3.2 3.2 汇编语言指令汇编语言指令 3.2.1 指令类型 3.2.1.1 数据传送指令

4、 将数据从一个地方移到另一个地方(实际是“拷贝”),包括:内存取数据到微处理器、微处理器中的数据存到内存、微处理器内移动数据、输入数据到微处理器、从微处理器输出数据。3.2.1.2 数据运算指令 包括算术运算指令、逻辑运算指令 、移位指令。3.2.1.3 程序控制指令 控制程序流程的指令,包括:跳转指令(条件或无条件)或分支指令、子程序调用和子程序返回指令、“软中断”指令、停机指令。3.2.2 数据类型 数值数据 无符号整型数、有符号整型数、浮点数据 布尔类型 数据值常以0表示FALSE,以非0表示TRUE 字符数据 字符编码标准(ASCII、EBCDIC、UNICODE、或别的)3.2.3

5、寻址方式 寻址方式(addressing modes):确定操作数地址的方法。3.2.3.1 直接寻址 在该寻址方式中,指令包含有要访问单元的内存地址。 例如:LDAC 5 从内存单元5读取数据并且把数据存储在CPU的累加器中。 3.2.3.2 间接寻址指令中指定的是含有操作数地址的内存单元的地址。 OP5IR10操作数35操作数的地址105例如:LDAC 5 或 LDAC (5)要进行两次内存访问。例如:假设寄存器R中存储了数值5,则: LDAC R ;把数值5从寄存器R中拷贝到CPU的累加器中 LDAC (R) 或 LDAC R ;相当于 LDAC 5,从寄存器R中获取地址3.2.3.4

6、立即值寻址 指定的操作数不是一个地址,而是确实要用到的数据。例如:LDAC #5 ;把数据值5移到累加器中3.2.3.3 寄存器直接寻址和寄存器间接寻址 与直接和间接寻址方式相似,但指定的寄存器,而不是内存单元。3.2.3.5 隐含寻址 并不明确地指出操作数,因为总是用到特定的寄存器。例如: CLAC ;清空CPU中的累加器,即将其值置为0 常用于用堆栈存储数据的CPU中。指令中不需要指定操作数,因为它暗示操作数一定来自堆栈。 3.2.3.6 相对寻址 该方式中,操作数不直接提供地址,而是提供一个偏移量。它与CPU中程序计数器的内容相加生成所需的地址。 程序计数器存有当前正在执行指令的地址。例

7、如:LDAC $5 ;若该指令定位于内存单元10,且它占用两个内存单元, ;则下一条指令会位于单元12,指令从单元(12517) ;读取17号单元中的数据并且把它存于累加器中。 该寻址方式对于短跳转和可重定位代码很有用。 3.2.3.7 变址寻址方式和基址寻址 变址寻址方式与相对寻址方式类似,但它是将指令提供的地址与变址寄存器中而不是程序计数器中的内容相加 。 例如: LDAC 5(X) ;变址寄存器X:数值10,则 51015 ;读取15号单元中的数据并且把它存储在累加器中。 除了用基址寄存器替换变址寄存器外,基址寻址方式和变址寻址方式完全一样。 3.2.4 指令格式 指令代码(instru

8、ction code):汇编语言指令转换成对应的机器代码,以二进制数值的形式表现。 操作码地址码指令的基本格式为: 考虑一个简单的例子:ABC 一个操作: 加法 三个操作数: 两个源操作数 B、C 一个目的操作数 A 假定微处理器可以执行16种不同的操作。 需要4位来代表其中的操作(因为2416) (假设位模式1010 加法) 假定仅有4种可能的操作数A,B,C和D。 用两位来表示每一种操作数: 00A ,01B ,10C ,11D图图3.4 3.4 采用采用(a)(a)三操作数,三操作数,(b)(b)二操作数,二操作数,(c)(c)单操作数,单操作数,(d)0(d)0操作数的指操作数的指令格

9、式和计算令格式和计算A AB BC C的汇编语言程序以及机器代码。的汇编语言程序以及机器代码。 微处理器可以设计成能运行具有3、2、1或0个操作数的指令。 查看图3.4的代码,我们能发现较少的操作数通常转化为较多的指令来完成同样的任务。 本例子简单地说明了三,二,一和零操作数指令的不同。实际上,这些指令需要比本例更多的位数。一个操作数字段可以指定一个任意的内存地址,而不只是四个寄存器中的一个。每个操作数可能需要16、32甚至更多的位数。另外还需要一些位用于指定每个操作数的寻址方式。 3.3 3.3 指令集结构设计指令集结构设计 完整性问题:该指令集是否有足够的指令可以让程序完成它必须的任务?

10、正交性问题:如果指令不重叠或者不执行同样的操作,那么它们就是正交的。在最小的指令集中为程序员提供必需的操作。 设计者可以优化ISA的另一个地方就是寄存器组。本小节:分析设计一套指令集结构时应考虑哪些问题?本小节:分析设计一套指令集结构时应考虑哪些问题? 要考虑的其它问题:。处理器必须向下兼容其它的微处理器吗?。微处理器将处理何种类型和大小的数据? 。需要中断吗? 。需要条件指令吗?3.4 3.4 相对简单的指令集结构相对简单的指令集结构存储器模型:该微处理器可以访问64K(216)字节的存储器(每字节8位)或者64K8的存储器。从外部设备输入数据和输出数据到外部设备,都可以被看作是访问内存。有

11、三个寄存器:累加器(AC)、寄存器R、1位零标志Z。包含16条指令,每一条都是8位指令码,见表3.1 InstructionInstruction InstructionInstruction CodeCode OperationOperation NOP 0000 0000 No operation LDAC 0000 0001 ACM STAC 0000 0010 MAC MVAC 0000 0011 RAC MOVR 0000 0100 ACR JUMP 0000 0101 GOTO JMPZ 0000 0110 IF(Z1)THEN GOTO JPNZ 0000 0111 IF(Z0)

12、THEN GOTO ADD 0000 1000 ACACR,If(ACR0)Then Z1 Else Z0 SUB 0000 1001 ACACR,If(ACR0)Then Z1 Else Z0 INAC 0000 1010 ACAC1,If(AC10)Then Z1 Else Z0 CLAC 0000 1011 AC0,Z1 AND 0000 1101 ACACR,If(ACR0)Then Z1 Else Z0 OR 0000 1101 ACACR,If(ACR0)Then Z1 Else Z0 XOR 0000 1110 ACACR,If(ACR0)Then Z1 Else Z0 NOT

13、0000 1111 ACAC,If(AC0)Then Z1 Else Z0 表表3.1 3.1 相对简单相对简单CPUCPU的指令集的指令集 LDAC、STAC、JUMP、JMPZ和JPNZ指令都需要16位的存储地址。这些指令在存储器中每个都需要3字节。第一个字节包含指令的操作码,另外两字节对应地址。 3 3字节格式字节格式 1 1字节格式字节格式 相对简单CPU的指令格式。例如:25:JUMP 1234H该指令以如下形式存储在存储器中: 25:0000 0101(JUMP) 26:0011 0100(34H) 27:0001 0010(12H)注意:第二字节低8位,第三字节高8位指令集结构的

14、用法举例: 用相对简单CPU编程计算12n,或者 。 则其高级语言的代码片断如下: nii1 可以把数值n存储在标明为n的存储单元中,结果存在标明为total的内存单元处,内存单元i用于存储求和的次数。确定运算步骤如下: total 0; FOR i1 TO n DO totaltotali; 1 1:total0,i0 2 2:ii1 3 3:totaltotali 4 4:IF in THEN GOTO 2实现这一算法的相对简单CPU的代码如下: CLAC STAC total STAC i Loop: LDAC i INAC STAC i MVAC LDAC total ADD STAC

15、 total MVAC LDAC n SUB JPNZ Looptotal0,i0ii1totaltotaliIF in THEN GOTO Loop指令指令 1st Loop1st Loop 2nd Loop2nd Loop 3rd Loop3rd Loop 4th Loop4th Loop 5th Loop5th Loop CLAC AC0 STAC total total0 STAC i i0 LDAC i AC0 AC1 AC2 AC3 AC4 INAC AC1 AC2 AC3 AC4 AC5 STAC i i1 i2 i3 i4 i5 MVAC R1 R2 R3 R4 R5 LDAC

16、 total AC0 AC1 AC3 AC6 AC10 ADD AC1 AC3 AC6 AC10 AC15 STAC total total1 total3 total6 total10 total15 LDAC n AC5 AC5 AC5 AC5 AC5 SUB AC4, Z0 AC3, Z0 AC2, Z0 AC1, Z0 AC0, Z0 JPNZ Loop JUMP JUMP JUMP JUMP NO JUMP 下表显示了当n5时代码的运行过程:表表3.2 3.2 循环求和程序的执行步骤循环求和程序的执行步骤 怎样看待这个指令集结构? 它满足了以教学为目的的设计目标。当我们在第6和7章中

17、设计这种CPU时我们就会看到,其复杂度足以阐明很多CPU的设计原则,却又没有掉进自身复杂度的陷阱中。 对于简单的应用程序来说,指令集完整。如果一个应用程序需要使用浮点型数据,它就不是十分完整。对于通用计算机(例如个人计算机),该指令集显然是不够的。 该指令集是相当正交的。只是多了OR指令,但有时CPU的指令集不是完全正交更好一些。 寄存器组是它最大的弱点。寄存器的缺乏导致执行任务较慢,并且降低了性能。 3.5 3.5 实例:实例:80858085微处理器指令集结构微处理器指令集结构3.5.1 8085微处理器的寄存器组 通用数据寄存器: 累加寄存器A - 总是接收一个8位的算术或逻辑指令的结果

18、;也为所有采用二操作数的指令提供一个操作数。 六个通用寄存器 - 命名为B,C,D,E,H和L ,可成对访问:B和C,D和E,H和L 。寄存器对HL常用来指向内存单元。 16位的堆栈指针寄存器SP:包含堆栈顶部的地址。 5个标志,共同称为标志寄存器: 符号标志符号标志S S:表明算术或逻辑指令计算出的结果的符号。其中,值1表示负数;值0表示正数(或零)。 零标志零标志Z Z:如果算术或逻辑运算指令产生的结果为0,则将Z置为1;否则Z为0。 奇偶标志奇偶标志P P:如果算术或逻辑运算结果中有偶数个1,则将P置为1;否则P为0。 进位标志进位标志CYCY:当算术运算产生进位时才去设置它。 例如,加

19、法1111 00001000 00001 0111 0000,对两个8位值相加但产生了9位结果。最左边的1被存储在CY中;如果加法不产生进位1,则CY中会存储0。 辅助进位标志辅助进位标志ACAC:与进位标志类似。它不指明进位值,但指出从结果的低四位向高四位传递了进位。 例如,加法0000 11110000 10000001 0111中断标志寄存器IM:用于允许和禁止中断而且检查待处理的中断。程序员可以读取并且设置该寄存器中的值来处理中断。 3.5.2 8085微处理器指令集 8085指令集总共包含了74条指令。 可分为三个部分:数据传送指令、数据运算指令和程序控制指令。 采用如下记号描述:

20、r r,r1r1,r2r2:表示任何一个8位寄存器A,B,C,D,E,H,或者L。 M M:表示内存单元。MHL表明该内存单元的地址存在寄存器对HL中。 rprp:表示寄存器对BC,DE,HL,或者堆栈指针SP。 :一个16位地址或者数据。 n n:是一个存储在内存中且紧跟操作码后的8位地址或者数据值。 condcond:条件指令的一个条件。值为:NZ、Z、P、N、PO、PE、NC、C。除了POP PSW指令外,其它指令都不会修改标志的值。 (PSWPSW:处理器状态字(保存累加器和标志器中的内容:处理器状态字(保存累加器和标志器中的内容 ) 指令 操作操作 NOP No operation

21、MOV r1,r2 r1r2 MOV r,M rMHL MOV M,r MHLr MVI r,n rn MVI M,n MHLn LXI rp, rp LDA AM STA MA LHLD HLM,M1 SHDL M,M1HL 指令指令 操作操作 LDAX rp AMrp(rpBC,DE) STAX rp MrpA(rpBC,DE) XCHC DEHL PUSH rp Stackrp(rpSP) PUSH PSW StackA,flag register POP rp RpStack(rpSP) POP PSW A,flag registerStack XTHL HLStack SPHL SP

22、HL IN n Ainput port n OUT n output port nA 表表3.3 80853.3 8085微处理器的数据传送指令微处理器的数据传送指令 (立即寻址)(立即寻址)(直接寻址直接寻址) 指令的通用格式。一些指令有指定寄存器的字段,而另一些指令这些部分却是固定的。 图图3.6 3.6 80858085的的指令格指令格式式一字节一字节二字节二字节三字节三字节 指令指令 操作操作 标志标志位位 ADD r AAr ALL ADD M AAMHL ALL ADI n AAn ALL ADC r AArCY ALL ADC M AAMHLCY ALL ACI n AAnCY

23、ALL SUB r AAr ALL SUB M AAMHL ALL SUI n AAn ALL SBB r AArCY ALL SBB M AAMHLCY ALL SBI n AAnCY ALL INR r rr1 Not CY INR M MHLMHL1 Not CY DCR n rr1 Not CY DCR M MHLMHL1 Not CY INX rp rprp1 None DCX rp rprp1 None DAD rp HLHLrp CY DAA Decimal adjust ALL 指令指令 操作操作 标志标志位位 ANA r AAr ALL ANA M AAMHL ALL ANI

24、 n AAn ALL ORA r AAr ALL ORA M AAMHL ALL ORI n AAn ALL XRA r AAr ALL XRA M AAMHL ALL XRI n AAn ALL CMP r Compare A and r ALL CMP M Compare A and MHL ALL CPI n Compare A and n ALL RLC CYA7,AA60,A7 ALL RRC CYA0,AA0,A71 ALL RAL CY,AA,CY CY RAR A,CYCY,A CY CMA AA NONE CMC CYCY CY STC CY1 CY 数据运算指令大多数会影响

25、表中的标志。 表表3.4 80853.4 8085微处理器的微处理器的数据运算指数据运算指令令 13条程序控制指令。DI,EI,RIM和SIM包含在此因为它们可以处理中断,而中断最终又会影响程序控制。这些指令都不修改标志。 InstructionInstruction OperationOperation JUMP GOTO Jcond If condition is true then GOTO PCHL GOTO address in HL CALL Call subroutine at Ccond If condition is true then call subroutine at

26、RET Return from subroutine Rcond If condition is true the return from subroutine RSTn Call subroutine at 8*n(n5.5,6.5,7.5) RIM AIM SIM IMA DI Disable interrupts EI Enable interrupts HLT Halt the CPU 表表3.5 80853.5 8085微处理器的程序控制指令微处理器的程序控制指令 3.5.3 一个简单的8085程序 计算和12n,并且把结果存储于内存单元total中 。n值最初存于标志为n的内存单元

27、中。 当设计此程序时,我们计算如n(n1)1形式的总和。 算法如下: 与相对简单CPU中的程序不同,8085程序把它的运行值存储在CPU寄存器中。寄存器B包含数值i,总和存储在寄存器A中。 1: 1: in,sum0 2 2:sumsumi,ii1 3 3:IF i0 THEN GOTO 2 2 4 4:totalsum 执行该算法的8085代码如下: LDA n MOV B,A XRA A sumAA0 Loop: ADD B sumsumi DCR B ii1 JNZ Loop IF i0 THEN GOTO Loop STA total totalsumin运行值存储在CPU寄存器,减少了内存访问次数,程序更短、运行速度更快 该程序仅需要七

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论