1.16k likes | 1.3k Views
§ 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 概述. 一、指令系统 指令 是指计算机执行某种操作的命令 从计算机组成的层次结构来说,计算机的指令有: 微指令 :微程序级的命令,它属于硬件 机器指令 :简称指令,每条指令可完成一
E N D
§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 概述 一、指令系统 指令是指计算机执行某种操作的命令 从计算机组成的层次结构来说,计算机的指令有: 微指令:微程序级的命令,它属于硬件 机器指令:简称指令,每条指令可完成一 种独立的操作 宏指令:由若干条机器指令组成的软件指 令,它属于软件 华东师范大学计算机科学技术系
一、指令系统 • 指令系统: • 一台计算机中所有机器指令的集合 • 是表征一台计算机性能的重要因素 • 指令系统是软件、硬件的主要交界面,指令 • 的格式与功能不仅直接影响到机器的硬件结 • 构,也直接影响到系统软件,影响到机器的 • 适用范围 • 设计目标:使硬件设计及编译器构造简单 • 以最低的成本获得最好的性能 华东师范大学计算机科学技术系
一、指令系统 • 计算机指令系统的发展 • ① 形成系列计算机 • 指基本指令系统相同、基本体系结构相 • 同的一系列计算机 • 解决了软件兼容问题,大大减少了软件 • 开发费用 • ② CISC与RISC • 复杂指令集与精简指令集 华东师范大学计算机科学技术系
2.1 概述 • 二、对指令系统性能的要求 • ① 完备性:要求指令系统丰富、功能齐全、 • 使用方便 • ② 有效性:利用该指令系统所编写的程序 • 能够高效率的运行 • 高效率主要表现在程序占据存储空间小、 • 执行速度快 • 一般来说,一个功能更强、更完善的指令 • 系统,必定有更好的有效性 华东师范大学计算机科学技术系
二、对指令系统性能的要求 • ③ 规整性: • ⅰ对称性:在指令系统中所有的寄存器和存 • 储器单元都可同等对待,所有的 • 指令都可使用各种寻址方式 • ⅱ匀齐性:指一种操作性质的指令可以支持 • 各种数据类型 • ⅲ格式一致性:指令长度和数据长度有一定 • 的关系,以方便处理和存取, • 通常为字节长度的整数倍 华东师范大学计算机科学技术系
二、对指令系统性能的要求 • ④ 兼容性: • · 系列机各机种之间具有相同的基本结构和 • 共同的基本指令集,因而指令系统是兼容 • 的,即在各类机种上基本软件都可以通用 • · 但由于不同机种推出的时间不同,在结构 • 和性能上有差异,做到所有软件都完全兼 • 容是不可能的,只能做到“向上兼容”,即 • 低档机上运行的软件可以在高档机上运行 华东师范大学计算机科学技术系
2.1 概述 • 三、低级语言与硬件结构的关系 • 计算机语言 • · 高级语言:如C,Java等,其语句和用法 • 与具体机器的指令系统无关 • · 低级语言:是面向机器的语言,和具体机 • 器的指令系统密切相关 • · 机器语言(二进制语言),用指令代 • 码编写程序 • ·汇编语言(符号语言),用指令助记 • 符来编写程序 华东师范大学计算机科学技术系
三、低级语言与硬件结构的关系 • 高级语言与低级语言的性能比较 华东师范大学计算机科学技术系
§2 计算机指令 2.1 概述 2.2 计算机硬件的操作 华东师范大学计算机科学技术系
算术运算指令 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:操作数格式规整,设计简单 华东师范大学计算机科学技术系
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 华东师范大学计算机科学技术系
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位,对字进行访问。 有效利用寄存器是提高程序性能的关键 华东师范大学计算机科学技术系
二、计算机硬件的操作数 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位偏移量 华东师范大学计算机科学技术系
◆ 存储器编址方法 大多数存储器按字节编址 ∴连续字的地址相差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. 存储器操作数 华东师范大学计算机科学技术系
◆ 两种字节寻址方式(0xABCD): ·使用最左边或“大端”字节的地址作为字地址 ·使用最右边或“小端”字节的地址作为字地址 MIPS采用大端编址 2. 存储器操作数 华东师范大学计算机科学技术系
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] 华东师范大学计算机科学技术系
硬件设计原则3: 加速执行常用操作 二、计算机硬件的操作数 立即数加指令 例6)addi $s3,$s3,4 ;$s3=$s3+4 3. 常数或立即数 指令直接给出操作数,可加快运算速度 P33图2-4 上述MIPS指令和操作数总结 华东师范大学计算机科学技术系
§2 计算机指令 2.1 概述 2.2 计算机硬件的操作 2.3 计算机中指令的表示 华东师范大学计算机科学技术系
以助记符编写的指令送入计算机需转换成相应的二进制码,这种转换借助汇编程序可以自动完成,汇编程序就相当于一个“翻译”。以助记符编写的指令送入计算机需转换成相应的二进制码,这种转换借助汇编程序可以自动完成,汇编程序就相当于一个“翻译”。 2.3 计算机中指令的表示 指令字(简称指令)即表示一条指令的机器字 指令格式则是指令字用二进制代码表示的结 构形式 指定参与操作的操作数的地址 表征指令的操作特性与功能 华东师范大学计算机科学技术系
2.3 计算机中指令的表示 • 一、操作码 • 对每条指令规定一个操作码,表示该指令应 • 进行什么性质的操作。 • 操作码字段的位数一般取决于计算机指令系 • 统的规模,n位操作码可表示2n条指令功能。 • 一个指令系统中操作码的位数往往是不定长 • 的,即不同类型的指令有不同的划分,以便 • 尽可能用较短的指令字长来表示更多的操作 • 种类。 华东师范大学计算机科学技术系
三地址指令 操作码 $s1 $s2 $s3 二地址指令 操作码 $s1 $s2 一地址指令 操作码 Address 零地址指令 操作码 2.3 计算机中指令的表示 • 二、地址码 • CPU用来取得所需操作数的地址 各种不同操作数的指令格式 华东师范大学计算机科学技术系
二、地址码 • 1.零地址指令 • 特点:指令字中只有操作码,而无地址码 • · 无需操作数 • · 操作数隐含 • 2.一地址指令——单操作数指令 • 特点:另一操作数地址或目的地址隐含, • ($s0)OP(Address)->$s0 表示某一隐含的寄存器中的内容 表示操作性质 表示某一存储单元的内容 华东师范大学计算机科学技术系
二、地址码 • 3.二地址指令——双操作数指令 • 特点:$s0、$s1为两操作数地址,$s1兼目的 • 地址 • ($s0)OP($s1)->$s0 • 4.三地址指令 • 特点:指令直接给出了二操作数地址及目 • 的地址 • ($s0)OP($s1)->$s2 • 优点:$s0、$s1中内容不被破坏 • 缺点:指令码加长,增加了存储空间 华东师范大学计算机科学技术系
MIPS使用三地址格式 运算类指令只能为RR型指令;传送类指令为RS型指令 二、地址码 • 按操作数物理地址分类 • · 存储器-存储器(SS)型指令 • 参与操作的数都放在内存里,执行此类 • 指令需多次访问内存,速度慢 • · 寄存器-寄存器(RR)型指令 • CPU内部操作,速度快 • · 寄存器-存储器(RS)型指令 • 执行此类指令时,既要访问内存单元, • 又要访问寄存器 • 通常指令字的长度和地址结构不是单一的, • 往往混合使用,增强功能 华东师范大学计算机科学技术系
2.3 计算机中指令的表示 • 三、指令字长度 • 指令字长度 • 一个指令字中包含二进制代码的位数 • 机器字长 • 计算机能并行处理的二进制数据的位数 • 机器字长通常与寄存器的位数一致 华东师范大学计算机科学技术系
MIPS指令使用32位字长,同机器字长——规整性 三、指令字长度 • 指令分类 • 单字长指令:指令字长度等于机器字长度 • 半字长指令:指令字长度等于半个机器字 • 长度 • 双字长指令:指令字长度等于两个机器字 • 长度 • 多字长优点:能提供足够的地址位寻址主存 • 缺点:占用存储空间,多次访问,速 • 度慢 华东师范大学计算机科学技术系
2.3 计算机中指令的表示 • 四、MIPS指令格式 • op: 操作码 • rs: 第一源操作数寄存器 • rt: 第二源操作数寄存器 • rd: 目的操作数寄存器 • shamt: 位移量 • funct: 函数码,选择op的特定变体 6位 5位 5位 5位 5位 6位 华东师范大学计算机科学技术系
16位字段constant or address可表示: ±215个地址或立即数 硬件设计原则4: 优秀的设计需要适当的折中 四、MIPS指令格式 • 如指令采用统一格式又要保持32位指令字长,则最大常数只能为25 • MIPS设计者采用一种折中方案: • 所有指令长度一致,但采用不同的指令格式 R型(寄存器): I型(立即数) 6位 5位 5位 5位 5位 6位 6位 5位 5位 16位 华东师范大学计算机科学技术系
四、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 华东师范大学计算机科学技术系
四、MIPS指令格式 • 例8)将指令lw $t0,32($s3)翻译为机器码: • 这里rt字段为目的寄存器地址 • 多种指令格式使硬件变得复杂,力求指令格 • 式基本一致,可降低复杂度 • 例R型和I型指令格式,前三段各段长度相等, • R型后三段长度等于I型第四段 op rs rt address 华东师范大学计算机科学技术系
四、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] • ·翻译成机器码 华东师范大学计算机科学技术系
四、MIPS指令格式 • * 当前计算机构造基于两个关键性的原则: • 指令以数据形式表示 • 和数据一样,程序存储在存储器中,并且可以读写 ——存储程序 • P39图2-8显示了存储程序的概念 华东师范大学计算机科学技术系
2.3 计算机中指令的表示 • 五、逻辑运算指令 • 逻辑运算: • · MIPS使用nor指令(其中一个操作数为0)来实现 • NOT操作 • ·逻辑乘、逻辑加支持立即数操作 华东师范大学计算机科学技术系
五、逻辑运算指令 • 例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 华东师范大学计算机科学技术系
五、逻辑运算指令 • 例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),可隐藏某些位 华东师范大学计算机科学技术系
五、逻辑运算指令 逻辑乘和逻辑加还支持立即数操作 小结见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 华东师范大学计算机科学技术系
2.3 计算机中指令的表示 • 六、分支指令 • 1. 条件分支指令: • ① beq register1,register2,L1 • 指令功能:若(register1)=(register2) • 时,跳转至L1地址 • ② bne register1,register2,L1 • 指令功能:若(register1)≠(register2) • 时,跳转至L1地址 华东师范大学计算机科学技术系
六、分支指令 • 例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 • ·判断相反条件代码效率较高 华东师范大学计算机科学技术系
编译器经常产生分支指令和标号,而在程序设计语言中并不出现,高级语言避免了显式标号和分支,效率高。编译器经常产生分支指令和标号,而在程序设计语言中并不出现,高级语言避免了显式标号和分支,效率高。 六、分支指令 • 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: 。 • 。 • 。 华东师范大学计算机科学技术系
六、分支指令 • 循环: • 编译一个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: … 华东师范大学计算机科学技术系
2.3 计算机中指令的表示 • 七、比较指令 • slt $t0,$s3,$s4 ; 若($s3)﹤($s4),则置 • “1”$t0 • slti $t0,$s2,10 ;若($s2)﹤10,则置“1”$t0 • 小结见P45,46 图2-12、图2-13 华东师范大学计算机科学技术系
§2 计算机指令 2.1 概述 2.2 计算机硬件的操作 2.3 计算机中指令的表示 2.4 计算机硬件的过程支持 华东师范大学计算机科学技术系
2.4 计算机硬件的过程支持 在过程运行期间程序必须遵循六个步骤: ① 将参数放在过程可以获取的位置 ② 向过程传递控制 ③ 获得过程所需的存储资源 ④ 执行需要的任务 ⑤ 将结果的值放在调用程序可以获取的地方 ⑥ 将控制返回初始点 充分利用寄存器: · $a0~$a3:四个参数寄存器,用于传递参数; · $v0~$v1:两个储值寄存器,用于返回值; · $ra: 一个返回地址寄存器,用于返回初始点 华东师范大学计算机科学技术系
调用者根据需要将参数放在$a0~$a3中 • 执行jal X跳转到过程X • 被调用者执行运算,将结果放在$v0、$v1中 • 执行返回指令jr $ra,返回断点处 2.4 计算机硬件的过程支持 • ◆ 过程指令(跳转-链接指令): • Jal ProcedureAddress ;跳转到某个地址,并在 • $ra中保留返回地址 • 返回地址:($ra) = (PC) + 4 程序计数器 ◆ 寄存器跳转指令(返回指令): jr $ra;无条件跳转到寄存器所指地址 华东师范大学计算机科学技术系
2.4 计算机硬件的过程支持 • 一、使用更多寄存器 • 若希望传递更多的参数——使用堆栈 • 将主存的某一部分设置为堆栈区,堆栈能够具有程序员要求的任意长度,是一组能存储和取出数据的暂时存储单元, 堆栈和其他形式存储器之间的差别就在于,它们对数据的存取方法或寻址方法有所不同 • 需要设置一个栈指针,它是CPU中一个专用的寄存器,MIPS的栈指针为$sp • 栈指针指定的存储器单元,就是堆栈的栈顶 • 堆栈操作:对栈顶操作,先进后出 • ·压栈(push) ·出栈(pop) 华东师范大学计算机科学技术系
进栈操作可描述如下: · 由指令把栈顶地址送入$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) 华东师范大学计算机科学技术系
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 出栈以前 出栈以后 华东师范大学计算机科学技术系