1 / 116

§ 2 计算机指令

§ 2 计算机指令. § 2 计算机指令. 2.1 概述 2.2 计算机硬件的操作 2.3 计算机中指令的表示 2.4 计算机硬件的过程支持 2.5 人机交互 2.6 指令和数据的寻址方式 2.7 程序的编译和编译器优化方法 2.8 汇编实例 2.9 实例: IA-32 指令. § 2 指令系统. 2.1 概述. 2.1 概述. 一、指令系统 指令 是指计算机执行某种操作的命令 从计算机组成的层次结构来说,计算机的指令有: 微指令 :微程序级的命令,它属于硬件 机器指令 :简称指令,每条指令可完成一

colby-fox
Download Presentation

§ 2 计算机指令

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. §2 计算机指令 华东师范大学计算机科学技术系

  2. §2 计算机指令 2.1 概述 2.2 计算机硬件的操作 2.3 计算机中指令的表示 2.4 计算机硬件的过程支持 2.5 人机交互 2.6 指令和数据的寻址方式 2.7 程序的编译和编译器优化方法 2.8 汇编实例 2.9 实例:IA-32指令 华东师范大学计算机科学技术系

  3. §2 指令系统 2.1 概述 华东师范大学计算机科学技术系

  4. 2.1 概述 一、指令系统 指令是指计算机执行某种操作的命令 从计算机组成的层次结构来说,计算机的指令有: 微指令:微程序级的命令,它属于硬件 机器指令:简称指令,每条指令可完成一 种独立的操作 宏指令:由若干条机器指令组成的软件指 令,它属于软件 华东师范大学计算机科学技术系

  5. 一、指令系统 • 指令系统: • 一台计算机中所有机器指令的集合 • 是表征一台计算机性能的重要因素 • 指令系统是软件、硬件的主要交界面,指令 • 的格式与功能不仅直接影响到机器的硬件结 • 构,也直接影响到系统软件,影响到机器的 • 适用范围 • 设计目标:使硬件设计及编译器构造简单 • 以最低的成本获得最好的性能 华东师范大学计算机科学技术系

  6. 一、指令系统 • 计算机指令系统的发展 • ① 形成系列计算机 • 指基本指令系统相同、基本体系结构相 • 同的一系列计算机 • 解决了软件兼容问题,大大减少了软件 • 开发费用 • ② CISC与RISC • 复杂指令集与精简指令集 华东师范大学计算机科学技术系

  7. 2.1 概述 • 二、对指令系统性能的要求 • ① 完备性:要求指令系统丰富、功能齐全、 • 使用方便 • ② 有效性:利用该指令系统所编写的程序 • 能够高效率的运行 • 高效率主要表现在程序占据存储空间小、 • 执行速度快 • 一般来说,一个功能更强、更完善的指令 • 系统,必定有更好的有效性 华东师范大学计算机科学技术系

  8. 二、对指令系统性能的要求 • ③ 规整性: • ⅰ对称性:在指令系统中所有的寄存器和存 • 储器单元都可同等对待,所有的 • 指令都可使用各种寻址方式 • ⅱ匀齐性:指一种操作性质的指令可以支持 • 各种数据类型 • ⅲ格式一致性:指令长度和数据长度有一定 • 的关系,以方便处理和存取, • 通常为字节长度的整数倍 华东师范大学计算机科学技术系

  9. 二、对指令系统性能的要求 • ④ 兼容性: • · 系列机各机种之间具有相同的基本结构和 • 共同的基本指令集,因而指令系统是兼容 • 的,即在各类机种上基本软件都可以通用 • · 但由于不同机种推出的时间不同,在结构 • 和性能上有差异,做到所有软件都完全兼 • 容是不可能的,只能做到“向上兼容”,即 • 低档机上运行的软件可以在高档机上运行 华东师范大学计算机科学技术系

  10. 2.1 概述 • 三、低级语言与硬件结构的关系 • 计算机语言 • · 高级语言:如C,Java等,其语句和用法 • 与具体机器的指令系统无关 • · 低级语言:是面向机器的语言,和具体机 • 器的指令系统密切相关 • · 机器语言(二进制语言),用指令代 • 码编写程序 • ·汇编语言(符号语言),用指令助记 • 符来编写程序 华东师范大学计算机科学技术系

  11. 三、低级语言与硬件结构的关系 • 高级语言与低级语言的性能比较 华东师范大学计算机科学技术系

  12. §2 计算机指令 2.1 概述 2.2 计算机硬件的操作 华东师范大学计算机科学技术系

  13. 算术运算指令 2.2 计算机硬件的操作 通过指令要求计算机硬件完成算术运算操作: 使用汇编语言的助记符: add a,b,c ;(b)+(c)→a 特点:只执行一种操作 有且只有三个操作数(最多) 操作数取自寄存器 计算四个变量的累加和需要三条指令: add a,b,c ;(b)+(c)→a add a,a,d ;(a)+(d)→a add a,a,e ;(a)+(e)→a 硬件设计原则1:操作数格式规整,设计简单 华东师范大学计算机科学技术系

  14. MIPS是世界上十分流行的一款RISC处理器 (Microprocessorwithoutinterlockedpipedstages) 无内部互锁流水级的微处理器 80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司在此基础上开发了R系列的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用,构成各种工作站和计算机系统。如R3000、R4000、R10000等 不同系列的计算机,采用的指令助记符不一样 2.2 计算机硬件的操作 一、高级语言程序与汇编语言程序的关系 ·把C语言编译成汇编语言(MIPS) 例1)a=b+c d=a-e C编译器生成的汇编指令: add a,b,c sub d,a,e 例2)f=(g+h)-(i+j) C编译器生成的汇编指令: add t0,g,h add t1,i,j Sub f,t0,t1 华东师范大学计算机科学技术系

  15. P455图A-6-1: $S0~$s7:保存临时变量(过程调用时保留); $t0~$t7:临时变量(过程调用时不保留)。 硬件设计原则2: 越少越快 同时考虑指令字长 2.2 计算机硬件的操作 MIPS指令中寄存器的表示: $si $ti 例3)C语句:f=(g+h)-(i+j) C编译器生成的MIPS汇编指令: add $t0,$s1,$s2;g,h分配给$s1,$s2 add $t1,$s3,$s4;i,j分配给$s3,$s4 Sub $s0,$t0,$t1;f分配给$s0 二、计算机硬件的操作数 1. 寄存器操作数 以MIPS为例讨论 操作数来自寄存器,MIPS寄存器有32个,每个寄存 器为32位,对字进行访问。 有效利用寄存器是提高程序性能的关键 华东师范大学计算机科学技术系

  16. 二、计算机硬件的操作数 A是含有100个字的数组 2. 存储器操作数 通过数据传送指令将存储器中的数据送往寄存器 取数指令:lw (LDA等) 例4)C语句:g=h+A[8] 一个操作数来自存储器,运算前先将A[8]送寄存器, A[8]存储单元地址由$S3中的基址加8得到 C编译器生成的汇编指令(存储器以字编址): lw $t0,8($s3);存储器A[8] → $t0 add $s1,$s2,$t0 ;g,h分配给$s1,$s2 $S3为基址寄存器,8位偏移量 华东师范大学计算机科学技术系

  17. ◆ 存储器编址方法 大多数存储器按字节编址 ∴连续字的地址相差4 对齐限制:MIPS中的字的起始地址必须是4 的倍数 例4)C语句:g=h+A[8] C编译器生成的MIPS汇编指令: lw $t0,32($s3) ;存储器A[8] → $t0 add $s1,$s2,$t0 ;g,h分配给$s1,$s2 2. 存储器操作数 华东师范大学计算机科学技术系

  18. ◆ 两种字节寻址方式(0xABCD): ·使用最左边或“大端”字节的地址作为字地址 ·使用最右边或“小端”字节的地址作为字地址 MIPS采用大端编址 2. 存储器操作数 华东师范大学计算机科学技术系

  19. 2.存储器操作数 存数指令:sw (STR等) 例5)C语句:A[12]=h+A[8] 两个操作数来自存储器,一个为源操作数,一个为目的操作数 C编译器生成的MIPS汇编指令: lw $t0,32($s3) ;存储器A[8] → $t0 add $t0,$s2,$t0 ;h+A[8] → $t0 sw $t0,48($s3);($t0) → A[12] 华东师范大学计算机科学技术系

  20. 硬件设计原则3: 加速执行常用操作 二、计算机硬件的操作数 立即数加指令 例6)addi $s3,$s3,4 ;$s3=$s3+4 3. 常数或立即数 指令直接给出操作数,可加快运算速度 P33图2-4 上述MIPS指令和操作数总结 华东师范大学计算机科学技术系

  21. §2 计算机指令 2.1 概述 2.2 计算机硬件的操作 2.3 计算机中指令的表示 华东师范大学计算机科学技术系

  22. 以助记符编写的指令送入计算机需转换成相应的二进制码,这种转换借助汇编程序可以自动完成,汇编程序就相当于一个“翻译”。以助记符编写的指令送入计算机需转换成相应的二进制码,这种转换借助汇编程序可以自动完成,汇编程序就相当于一个“翻译”。 2.3 计算机中指令的表示 指令字(简称指令)即表示一条指令的机器字 指令格式则是指令字用二进制代码表示的结 构形式 指定参与操作的操作数的地址 表征指令的操作特性与功能 华东师范大学计算机科学技术系

  23. 2.3 计算机中指令的表示 • 一、操作码 • 对每条指令规定一个操作码,表示该指令应 • 进行什么性质的操作。 • 操作码字段的位数一般取决于计算机指令系 • 统的规模,n位操作码可表示2n条指令功能。 • 一个指令系统中操作码的位数往往是不定长 • 的,即不同类型的指令有不同的划分,以便 • 尽可能用较短的指令字长来表示更多的操作 • 种类。 华东师范大学计算机科学技术系

  24. 三地址指令 操作码 $s1 $s2 $s3 二地址指令 操作码 $s1 $s2 一地址指令 操作码 Address 零地址指令 操作码 2.3 计算机中指令的表示 • 二、地址码 • CPU用来取得所需操作数的地址 各种不同操作数的指令格式 华东师范大学计算机科学技术系

  25. 二、地址码 • 1.零地址指令 • 特点:指令字中只有操作码,而无地址码 • · 无需操作数 • · 操作数隐含 • 2.一地址指令——单操作数指令 • 特点:另一操作数地址或目的地址隐含, • ($s0)OP(Address)->$s0 表示某一隐含的寄存器中的内容 表示操作性质 表示某一存储单元的内容 华东师范大学计算机科学技术系

  26. 二、地址码 • 3.二地址指令——双操作数指令 • 特点:$s0、$s1为两操作数地址,$s1兼目的 • 地址 • ($s0)OP($s1)->$s0 • 4.三地址指令 • 特点:指令直接给出了二操作数地址及目 • 的地址 • ($s0)OP($s1)->$s2 • 优点:$s0、$s1中内容不被破坏 • 缺点:指令码加长,增加了存储空间 华东师范大学计算机科学技术系

  27. MIPS使用三地址格式 运算类指令只能为RR型指令;传送类指令为RS型指令 二、地址码 • 按操作数物理地址分类 • · 存储器-存储器(SS)型指令 • 参与操作的数都放在内存里,执行此类 • 指令需多次访问内存,速度慢 • · 寄存器-寄存器(RR)型指令 • CPU内部操作,速度快 • · 寄存器-存储器(RS)型指令 • 执行此类指令时,既要访问内存单元, • 又要访问寄存器 • 通常指令字的长度和地址结构不是单一的, • 往往混合使用,增强功能 华东师范大学计算机科学技术系

  28. 2.3 计算机中指令的表示 • 三、指令字长度 • 指令字长度 • 一个指令字中包含二进制代码的位数 • 机器字长 • 计算机能并行处理的二进制数据的位数 • 机器字长通常与寄存器的位数一致 华东师范大学计算机科学技术系

  29. MIPS指令使用32位字长,同机器字长——规整性 三、指令字长度 • 指令分类 • 单字长指令:指令字长度等于机器字长度 • 半字长指令:指令字长度等于半个机器字 • 长度 • 双字长指令:指令字长度等于两个机器字 • 长度 • 多字长优点:能提供足够的地址位寻址主存 • 缺点:占用存储空间,多次访问,速 • 度慢 华东师范大学计算机科学技术系

  30. 2.3 计算机中指令的表示 • 四、MIPS指令格式 • op: 操作码 • rs: 第一源操作数寄存器 • rt: 第二源操作数寄存器 • rd: 目的操作数寄存器 • shamt: 位移量 • funct: 函数码,选择op的特定变体 6位 5位 5位 5位 5位 6位 华东师范大学计算机科学技术系

  31. 16位字段constant or address可表示: ±215个地址或立即数 硬件设计原则4: 优秀的设计需要适当的折中 四、MIPS指令格式 • 如指令采用统一格式又要保持32位指令字长,则最大常数只能为25 • MIPS设计者采用一种折中方案: • 所有指令长度一致,但采用不同的指令格式 R型(寄存器): I型(立即数) 6位 5位 5位 5位 5位 6位 6位 5位 5位 16位 华东师范大学计算机科学技术系

  32. 四、MIPS指令格式 • P46图2-13给出了前述指令的格式 • 例7)将指令add $tO,$s1,$s2翻译为机器码: • · op: 000000 加/减 • funct:100000 选择加操作 • ·寄存器$t0-$t7分别对应寄存器8-15 • 寄存器$S0-$S7分别对应寄存器16-23 • 寄存器$zer0对应寄存器0 • $s1: 17=10001B $s2: 18=10010B • $t0: 8=01000B $zer0:0=00000B op rs rt rd shamt funct 华东师范大学计算机科学技术系

  33. 四、MIPS指令格式 • 例8)将指令lw $t0,32($s3)翻译为机器码: • 这里rt字段为目的寄存器地址 • 多种指令格式使硬件变得复杂,力求指令格 • 式基本一致,可降低复杂度 • 例R型和I型指令格式,前三段各段长度相等, • R型后三段长度等于I型第四段 op rs rt address 华东师范大学计算机科学技术系

  34. 四、MIPS指令格式 小结见P38图2-7 • 例9)C语句:A[300]=h+A[300] • 设数组A的基址放在$t1中,翻译成机器码。 • ·编译成MIPS指令: • lw $t0,1200($t1) ;A[300]→$t0 • add $t0,$s2,$t0 ;h+A[300]→$t0 • sw $t0,1200($t1);h+A[300]→A[300] • ·翻译成机器码 华东师范大学计算机科学技术系

  35. 四、MIPS指令格式 • * 当前计算机构造基于两个关键性的原则: • 指令以数据形式表示 • 和数据一样,程序存储在存储器中,并且可以读写 ——存储程序 • P39图2-8显示了存储程序的概念 华东师范大学计算机科学技术系

  36. 2.3 计算机中指令的表示 • 五、逻辑运算指令 • 逻辑运算: • · MIPS使用nor指令(其中一个操作数为0)来实现 • NOT操作 • ·逻辑乘、逻辑加支持立即数操作 华东师范大学计算机科学技术系

  37. 五、逻辑运算指令 • 例10)将指令sll $t2,$s0,4翻译为机器码 • 指令功能:将$s0内容逻辑左移4位后送$t2 • 机器码为: • Shamt:位移量,这里即指左移4位 • 原($s0)= 0000 0000 0000 0000 0000 0001 0000 1001 • 执行sll指令后: • ($t2)= 0000 0000 0000 0000 0001 0000 1001 0000 op rs rt rd shamt funct 华东师范大学计算机科学技术系

  38. 五、逻辑运算指令 • 例11)设: • ($t1)= 0000 0011 0000 0000 0000 0001 0000 1001 • ($t2)= 0000 0000 0000 0000 1111 1111 1111 1111 • 执行指令 and $t0,$t1,$t2后,$t0的内容? • 指令功能:将$t1内容与上$t2内容后送$t0 • 执行指令后: • ($t0)= 0000 0000 0000 0000 0000 0001 0000 1001 • 这种位模式习惯上称为掩码(mask),可隐藏某些位 华东师范大学计算机科学技术系

  39. 五、逻辑运算指令 逻辑乘和逻辑加还支持立即数操作 小结见P42图2-10 • 例11)设: • ($t1)= 0000 0011 0000 0000 0000 0001 0000 1001 • ($t2)= 0000 0000 0000 0000 1111 1111 1111 1111 • 执行指令 or $t0,$t1,$t2后,$t0的内容? • 指令功能:将$t1内容或上$t2内容后送$t0 • 执行指令后: • ($t0)= 0000 0011 0000 0000 1111 1111 1111 1111 • 执行指令 nor $t0,$t1,$t3后,$t0的内容? • 指令功能:将$t1内容与$t3内容或非后送$t0($t3 • 内容为0) • 执行指令后: • ($t0)= 1111 1100 1111 1111 1111 1110 1111 0110 华东师范大学计算机科学技术系

  40. 2.3 计算机中指令的表示 • 六、分支指令 • 1. 条件分支指令: • ① beq register1,register2,L1 • 指令功能:若(register1)=(register2) • 时,跳转至L1地址 • ② bne register1,register2,L1 • 指令功能:若(register1)≠(register2) • 时,跳转至L1地址 华东师范大学计算机科学技术系

  41. 六、分支指令 • 例12)将if-then-else语句编译成条件分支 • 指令 • If(i==j) f=g+h; else f=g-h; • 编译成MIPS指令: • bne $s3,$s4,else ;当i≠j转Else • add $s0,$s1,$s2 ;f=g+h • … • Else: • sub $s0,$s1,$s2 ;f=g-h • … • · f,g,h,i,j对应$s0,$s1,$s2,$s3,$s4 • ·判断相反条件代码效率较高 华东师范大学计算机科学技术系

  42. 编译器经常产生分支指令和标号,而在程序设计语言中并不出现,高级语言避免了显式标号和分支,效率高。编译器经常产生分支指令和标号,而在程序设计语言中并不出现,高级语言避免了显式标号和分支,效率高。 六、分支指令 • 2. MIPS指令系统将无条件分支指令命名为跳 • 转指令(jump),简写为j • 将例12)编译完整: • bne $s3,$s4,else ;当i≠j转Else • add $s0,$s1,$s2 ;f=g+h • j Exit ;go to Exit • Else: sub $s0,$s1,$s2 ;f=g-h • Exit: 。 • 。 • 。 华东师范大学计算机科学技术系

  43. 六、分支指令 • 循环: • 编译一个C语言while循环 • C语言: while (save[i]==k) • i+=1; • 设:i,k对应$s3,$s5,数组save的基址在$s6中 • MIPS汇编指令: • Loop:sll $t1,$s3,2 ;i×4送$t1(数组地址偏移量) • add $t1,$t1,$s6 ;$t1为数组地址 • lw $t0,0($t1) ;(save[i]) → $t0 • bne $t0,$s5,Exit;(save[i]) ≠ k,转Exit • addi $s3,$s3,1 ;i=i+1 • j Loop ;go to Loop • Exit: … 华东师范大学计算机科学技术系

  44. 2.3 计算机中指令的表示 • 七、比较指令 • slt $t0,$s3,$s4 ; 若($s3)﹤($s4),则置 • “1”$t0 • slti $t0,$s2,10 ;若($s2)﹤10,则置“1”$t0 • 小结见P45,46 图2-12、图2-13 华东师范大学计算机科学技术系

  45. §2 计算机指令 2.1 概述 2.2 计算机硬件的操作 2.3 计算机中指令的表示 2.4 计算机硬件的过程支持 华东师范大学计算机科学技术系

  46. 2.4 计算机硬件的过程支持 在过程运行期间程序必须遵循六个步骤: ① 将参数放在过程可以获取的位置 ② 向过程传递控制 ③ 获得过程所需的存储资源 ④ 执行需要的任务 ⑤ 将结果的值放在调用程序可以获取的地方 ⑥ 将控制返回初始点 充分利用寄存器: · $a0~$a3:四个参数寄存器,用于传递参数; · $v0~$v1:两个储值寄存器,用于返回值; · $ra: 一个返回地址寄存器,用于返回初始点 华东师范大学计算机科学技术系

  47. 调用者根据需要将参数放在$a0~$a3中 • 执行jal X跳转到过程X • 被调用者执行运算,将结果放在$v0、$v1中 • 执行返回指令jr $ra,返回断点处 2.4 计算机硬件的过程支持 • ◆ 过程指令(跳转-链接指令): • Jal ProcedureAddress ;跳转到某个地址,并在 • $ra中保留返回地址 • 返回地址:($ra) = (PC) + 4 程序计数器 ◆ 寄存器跳转指令(返回指令): jr $ra;无条件跳转到寄存器所指地址 华东师范大学计算机科学技术系

  48. 2.4 计算机硬件的过程支持 • 一、使用更多寄存器 • 若希望传递更多的参数——使用堆栈 • 将主存的某一部分设置为堆栈区,堆栈能够具有程序员要求的任意长度,是一组能存储和取出数据的暂时存储单元, 堆栈和其他形式存储器之间的差别就在于,它们对数据的存取方法或寻址方法有所不同 • 需要设置一个栈指针,它是CPU中一个专用的寄存器,MIPS的栈指针为$sp • 栈指针指定的存储器单元,就是堆栈的栈顶 • 堆栈操作:对栈顶操作,先进后出 • ·压栈(push) ·出栈(pop) 华东师范大学计算机科学技术系

  49. 进栈操作可描述如下: · 由指令把栈顶地址送入$sp,指针指向栈顶 · 进栈:($sp)-1→ $sp,(寄存器)→ Msp 先修改指针,指向空位,再存入数据 Msp表示栈指针指示的存储器栈顶单元 栈指针指向满栈顶 堆栈指示器 ($sp) 存储器 存储器 2FCH 300H 2FFH 2FCH 2FDH 2FDH a a 2FEH 2FEH 栈顶 a 2FFH 寄存器 寄存器 2FFH 300H 栈顶 301H 300H 302H 301H 302H 进栈以后 进栈以前 · 堆栈 • 进栈操作 堆栈指示器($sp) 华东师范大学计算机科学技术系

  50. MIPS堆栈设计为前一种方式: 栈指针指向满栈顶,栈“增长”按照从高到低的地址 顺序进行 出栈操作描述如下: · ($SP)= 2FDH,指针指向栈顶 · 出栈: (Msp)→ 寄存器, ($sp)+1→$sp 先取出数据,后修改指针 · 以上堆栈结构,指针指向满栈顶 · 另一堆栈结构,指针指向空栈顶 进栈: ( 寄存器 )→Msp,($sp)-1→$sp 先存入数据,后修改指针; 出栈: ($sp)+1→sp ,(Msp)→ 寄存器 先移动指针,再送出数据 · 堆栈 • 出栈操作 堆栈指示器($sp) 堆栈指示器($sp) 存储器 存储器 2FDH 2FEH 2FCH 2FCH 栈顶 d 2FDH d 2FDH d c 2FEH 栈顶 C 2FEH 寄存器 寄存器 b 2FFH b 2FFH a a 300H 300H 301H 301H 302H 302H 出栈以前 出栈以后 华东师范大学计算机科学技术系

More Related