指令:计算机的语言.ppt_第1页
指令:计算机的语言.ppt_第2页
指令:计算机的语言.ppt_第3页
指令:计算机的语言.ppt_第4页
指令:计算机的语言.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第二章指令 计算机的语言 第二章指令 计算机的语言 2 1引言2 2计算机硬件的操作2 3计算机硬件的操作数2 4有符号和无符号数2 5计算机中指令的表示2 7决策指令2 8计算机硬件对过程的支持2 9人机交互2 10MIPS中32位立即数和地址的寻址 2 11并行与指令 同步2 12翻译并执行程序2 13以一个C排序程序为例2 14数组与指针2 15高级内容 编译C语言和解释JAVA语言2 16实例 ARM指令集2 17实例 X86指令集2 18谬误与陷阱2 19本章小结 2 1引言 一台计算机的全部指令称为该计算机的指令集计算机设计者的目标 找到一种语言 可方便硬件和编译器的设计性能最佳 成本和功耗最低MIPS指令集ARM和X86指令集 CISC和RISC 2 2计算机硬件的操作 一条指令的例子 adda b c操作数和操作码 寄存器和存储器MIPS指令类别 P44 简单源于规整算术数据传输逻辑条件分支无条件跳转一个例子 P45 高级语言和汇编语言 例1 a b c编译结果 adda b c例2 f g h i j 编译结果 addt0 g h temporaryvariablet0containsg haddt1 i j temporaryvariablet1containsi jsubf t0 t1 fgetst0 t1 whichis g h i j 2 3计算机硬件的操作数 寄存器 字 MIPS32位 设计原则 越少越快将程序变量和寄存器对应起来是编译器的工作例 f g h i j 变量fghij依次分配给寄存器 s0 s1 s2 s3 s4 求编译后的MIPS代码add t0 s1 s2 register t0containsg hadd t1 s3 s4 register t1containsi jsub s0 t0 t1 fgets t0 t1 whichis g h i j 2 3 1存储器操作数 复杂数据结构放在存储器中数据传送指令 存储器 寄存器取数指令 lw 存数指令 sw例 g h A 8 lw t0 8 s3 temporaryreg t0getsA 8 add s1 s2 t0 g h A 8 8为偏移量 s3为基址寄存器 存储器操作数 续 编译器在存储器中为数组和结构数据分配位置字节地址VS字地址对齐限制 字的地址必须为4的倍数大端 bigend 和小端 littleend 例 略 p48 编译器尽量将常用的变量保持在寄存器中 其他的变量放在存储器中 将不常使用的变量存回到存储器中的过程叫 溢出 编译器必须高效使用寄存器 高性能和节省功耗 2 3 2常数或立即操作数 其中一个操作数是常数的算术运算指令addi s3 s3 4加速执行常用操作 速度快 能耗低常数0可以简化指令集 数据传送指令MIPS将寄存器 zero恒置为0讨论 寄存器数目随时间如何变化 好像摩尔定律 2 4有符号和无符号数 二进制 字 最低有效位 最高有效位讨论 如何表示符号 补码 求补码的方法 按位取反 末位 1 0000000000000010111111111111110111111111111111110 0000000000000010的补码 2 5计算机中指令的表示 计算机中指令和数都是二进制代码指令格式 指令布局MIPS指令32位 与数据字的位数相等指令的数字形式 机器语言 000001000000000100100000100100000011010000001001 MIPS指令字段 取字指令 需要两个寄存器和一个常数 因此限制了操作数的范围 优秀的设计需要适宜的折中方案 I型指令 R型指令 用于寄存器 I型指令 用于立即数和数据传送指令 lw t0 32 s3 temporaryreg t0getsA 8 19 8 MIPS汇编中 s0 s7映射到寄存器16 23 t0 t7映射到8 15 MIPS指令编码 如何判断指令是哪种格式 计算机中指令的表示 重点 指令用数的形式表示和数一样 程序存储在存储器中 并且可以读写存储程序概念 二进制兼容 2 6逻辑操作 对字中的若干位打包或拆包的操作移位 左移 sll 右移 srl 左移相当于乘2sll t2 s0 4 reg t2 reg s0 4bits按位与 可将源操作数中某些位置0 掩码 and s0 t1 t2 按位或 任意一个操作数为1 则结果为1or s0 t1 t2 按位取反 nor s0 t1 t2 op rs rt rd shamt funct 2 7决策指令 beqregister1 register2 L1 如果相等则分支bneregister1 register2 L1 如果不相等则分支 例 将if then else语句编译成条件分支指令if i j f g h elsef g h fghij依次对应 s0 s4的寄存器bne s3 s4 Else gotoElseifi jadd s0 s1 s2 f g h skippedifi j jExit gotoExit 无条件分支Else sub s0 s1 s2 f g h skippedifi j Exit 汇编器完成分支指令的地址计算 编译器创建标签 2 7 1循环 例 编译C语言while循环语句while save i k save的基址在 s6i 1 i k放在 s3和 s5中 解答 Loop sll t1 s3 2 tempreg t1 i 4add t1 t1 s6 t1 addressofsave i lw t0 0 t1 tempreg t0 save i bne t0 s5 exitaddi s3 s3 1jLoopExit 基本块 没有分支且没有分支目标 分支标签的指令序列编译的最初任务之一就是把程序分解为基本块 其他决策指令 slt t0 s3 s4 t0 1if s3 lengthor s1 0Beq t0 zero IndexOutofBounds ifbad gotoerror 负数的补码在无符号数中看起来是一个很大的数 2 7 2case switch语句 转移地址表 由代码中标签所对应的地址构成的数组表中的项首先加载到寄存器中jr 寄存器跳转指令 2 8计算机硬件对过程的支持 过程运行期间 程序遵循6个步骤将参数放在过程可以访问到的位置将控制转移给过程获得过程需要的存储资源执行请求的任务将结果的值放在调用程序可以访问到的位置将控制返回初始点 一个过程可能由多个点调用MIPS在为过程分配寄存器时遵循以下约定 a0 a3 用于传递参数的4个寄存器 v0 v1 用于返回值的2个寄存器 ra 用于返回起始点的返回地址寄存器 跳转链接指令 跳转链接指令 跳转到某个地址时同时保存下一条指令的地址到 rajalProcedureAddress 指向调用点的地址调用者将参数值放在 a0 a3 使用jalX跳转到过程X 被调用者执行运算 结果放在 v0和 v1 使用jr ra指令将控制返回给调用者 PC 程序计数器 jal将PC 4保存在 ra中 程序计数器的作用 2 8 1使用更多的寄存器 调用者使用的任何寄存器必须恢复到过程调用前的值栈 换出寄存器使用的数据结构栈指针 sp栈操作 压栈 出栈栈 增长 方向 地址从高到底例 编译一个C过程intleaf example intg inth inti intj intf f g h i j returnf 解答 p67 图2 10 参数变量ghij对应参数寄存器 a0 a3 f对应 s0 编译结果 Leaf example addi sp sp 12 adjuststacktomakeroomfor3itemssw t1 8 sp saveregister t1foruseafterwardssw t0 4 sp saveregister t0foruseafterwardssw s0 0 sp saveregister s0foruseafterwardsadd t0 a0 a1 register t0containsg hadd t1 a2 a3 register t1containsi jsub s0 t0 t1 f t0 t1 whichis g h i j add v0 s0 zero returnsf v0 s0 0 lw s0 0 sp restoreregister s0forcallerlw t0 4 sp restoreregister t0forcallerlw t1 8 sp restoreregister t1forcalleraddi sp sp 12 adjuststacktodelete3itemsjr ra jumpbacktocallingroutine 压栈 出栈 执行过程 返回 临时寄存器和保留寄存器 为避免保存和恢复一个其值未被使用过的寄存器 t0 t9 10个临时寄存器 过程调用中不必保存 s0 s7 8个保留寄存器 过程调用中必须保存 2 8 2嵌套过程 略 静态变量和动态变量 C语言中一个变量对应内存中的一个位置 类型和存储方式动态 过程中的变量 只在过程中有效静态 过程内外 始终存在 全局和static声明的变量MIPS全局指针 gp 2 8 3在栈中为新数据分配空间 栈还保存过程中的局部变量 局部数据 结构体过程帧 或活动记录 栈中包含过程所保存的寄存器和局部变量的片段帧指针 fp 2 8 4在堆中为新数据分配空间 MIPS分配内存的约定栈由内存高端开始并向下生长堆 在栈之下反方向生长静态数据段 常量和其他静态数据正文 机器代码的第一部分保留段C语言通过显式的函数调用在堆上分配和释放空间 malloc free MIPS汇编语言寄存器约定 p71 2 9人机交互 ASCII码讨论 如何表示十进制数 MIPS字节传输指令 lb sb lbu sbu字符串 字符串复制过程的编译 略 2 10MIPS中32位立即数和地址的寻址 指令长度32 如何加载32位常量 lui 设置寄存器中常数的高16位加载32位常量00000000001111010000100100000000lui s0 61 61是高16位ori s0 2304 2304是低16位 2 10 132位立即数 问题 指令中的立即数放在哪里 2 10 2分支和跳转中的寻址 J型指令 除了6位操作码 其他都是地址字段j10000 gotolocation10000分支寻址 只有16位用于指定分支地址 则程序不能大于216 程序计数器 寄存器 分支地址PC相对寻址 由于条件分支的跳转目标很可能靠近其分支地址 6位 26位 2 10 3MIPS寻址方式总结 MIPS的寻址模式 p79 图2 18 立即数寻址 操作数是位于指令中的常数寄存器寻址 操作数在寄存器中基址或偏移寻址 操作数在内存中 其地址是指令中基址寄存器和常数的和PC相对寻址 地址是PC和指令中常数的和伪直接寻址 跳转地址是指令中26位字段和PC高位相连而成 立即数寻址 立即数寻址操作数是指令中提供的常数对于addi等算术运算 立即数为16位有符号数 取值范围 32768 32767对于andi等逻辑运算 立即数为16位无符号数 取值范围0 65535 基址或偏移寻址 基址 偏移量寻址用于装入 load 和存储 store 指令偏移量为16位有符号数 范围是相对于基址寄存器的 32768 32767字节任何通用寄存器都可以作为基址寄存器 PC相对寻址 PC相对寻址用于分支指令地址是PC的当前值 即当前指令的PC值加上4 与指令中提供的16位有符号常数左移2位相加的和 为什么左移2位 分支目标范围 正负128KB如果分支目标超过正负128KB 伪直接寻址 用于跳转指令 j 跳转地址是指令中提供的26位地址左移2位与PC当前值的高4位相连而成28位地址可以访问256MB代码空间要实现更远的跳转 转移地址超过256MB 必须使用寄存器跳转指令jr 跳转到寄存器指定的地址 2 10 4机器语言解码 例 00af8020hex对应的汇编语句 将16进制转换到二进制00000000101011111000000000100000查看操作码类型 op 000000 确定为R型指令op 000000rs 00101rt 01111rd 10000shamt 00000funct 100000 加法 add s0 a1 t7P80 图2 19所有MIPS指令的格式 2 11并行与指令 同步 同步的概念 协作时 数据竞争互斥区 仅允许单个处理器操作的区域原子操作锁变量 0表示解锁 1表示加锁加锁 用寄存器中的1与锁单元的值交换如果锁单元的值已经为1 表示锁已经被占用 只有当锁单元的值为0的时候 加锁成功 锁单元值被修改为1 链接取数和条件存数指令 ll和sc 当ll指令所指定的锁单元的内容 在相同地址的条件存数指令执行前被改变 则条件存数指令失败 存储器单元的原子交换 try add t0 zero s4 copyexchangevaluell t1 0 s1 loadlinkedsc t0 0 s1 storeconditionalbeq t0 zero try branchstorefailsadd s4 zero t1 putloadvaluein s4 条件存储指令 保存寄存器的值 如果执行成功则将寄存器的值修改为1 否则修改为0 可以使用锁单元构造互斥区 2 12翻译并执行程序 C程序 编译器 汇编语言程序 目标文件 机器语言模块 目标文件 库程序 机器语言 链接器 可执行文件 机器语言程序 加载器 存储器 汇编器 链接器 将多个模块和库程序组合在一起解析所有的引用 加载器 将可执行程序加载到内存和合适位置 2 12 1编译器 C程序 汇编语言程序过去 存储器小且编译效率不高 汇编程序用来产生高效的代码现在 优化的编译器能产生好的汇编程序 2 12 2汇编器 汇编语言程序 机器语言程序 目标程序 伪指令 move t0 t1 register t0getsregister t1add t0 zero t1 t0gets0 register t1伪指令接收不同基数的数字 16进制汇编器将标号都放入一个符号表中 由 标号 地址 组成 UNIX中目标文件的组成 目标文件头 描述目标文件其他部分的大小和位置正文段 包含机器语言代码静态数据段 包含在程序生命周期内分配的数据重定位信息 标记了一些在程序加载进内存时依赖于绝对地址的指令和数据符号表 包含未定义的剩余标记 如外部引用调试信息 包含说明目标模块如何编译的简明描述 2 12 3链接器 把独立汇编的机器语言程序 拼接 在一起 将代码和数据模块象征性地放入内存 决定数据和指令标签的地址 修补内部和外部引用链接器使用每个目标文件中的重定位信息和符号表来解析所有未定义的标签 链接器决定每个模块要占用的内存位置 链接器产生一个可执行文件 例 目标文件的链接 p86 阅读并回答问题目标文件以什么为单位 正文段和数据端开始的位置是 如何知道一个过程正文大小和数据段的大小 如何知道过程B的正文段和数据段的地址 链接器如何更新指令的地址字段 2 12 4加载器 加载器 把目标程序装载到内存中准备执行读取可执行文件头来确定正文段和数据段的大小 为正文和数据段创建一个足够大的地址空间 将可执行文件中的指令和数据复制到内存中 把主程序的参数 如果存在 复制到栈顶 初始化机器寄存器 将栈指针指向第一个空位置 跳转到启动例程 将参数复制到参数寄存器并调用程序的main函数 Main函数返回时 通过系统调用exit终止程序 2 12 5动态链接库 静态链接 尽管可能不使用库中的所有部分 它们也会被加载进来 标准C库有2 5MB 动态链接库 直到程序运行的时候 库例程才会被链接并加载 DLL的晚过程链接 只有被调用后才被链接 需要额外的空间来存储动态链接的信息 但是不需要复制或链接整个库 2 12 6启动一个JAVA程序 JAVA程序 编译器 类文件 JAVA字节码 JAVA库例程 机器语言 即时编译器 JAVA虚拟机 已经编译好的JAVA方法 机器语言 JAVA字节码 二进制版本 可以在解释器上执行 JAVA虚拟机JVM JVM在程序运行时链接JAVA库 即时编译器 JIT 在运行它的机器上把一些方法编译成宿主机上的本地机器语言 因此提高性能 解释器的优势和不足 2 13以一个C排序程序为例 阅读 理解过程调用的汇编语言代码构成压栈 保存寄存器的值执行过程返回值 如果有的话 出栈 回复寄存器的值过程返回 jr ra 2 14数组与指针 阅读 理解数组与指针在MIPS汇编中的不同操作现代的编译器可以为数组操作产生同样好的代码避免使用指针产生的混淆 可以将复杂的任务交给编译器 2 15高级内容 编译C语言和解释JAVA语言 2 16实例 ARM指令集 阅读 ARM指令集与MIPS指令集的比较寻址模式条件与分支ARM的特色 2 17X86指令集 阅读 X86指令集与MIPS指令集的比较X86的改进历程X86的寄存器与寻址模式X86整数操作X86指令编码 2 18谬误与陷阱 误解 更强大的指令意味着更更高的性能X误解 使用汇编语言编程来获得最高的性能X误解 商用计算机二进制兼容的重要性意味着成功的指令集不需改变X陷阱 忘记在字节寻址的机器中 连续的字地址相差不是1陷阱 在自动变量的定义过程外 使用指针指向该变量 2 19本章小结 指令和数字没有区别使用指令集要平衡程序指令数目 执行的时钟周期数和时钟的速度 简单源于规整 指令集越小越快 寄存器加速常用操作 立即数寻址优秀的设计需要好的折中 指令布局各类指令出现的频率不同 对体系结构的设计有重要的影响 2 20拓展阅读 2 15JAVA程序 JAVA字节码 JVM JIT 微程序控制器 1950年由英国的威尔克斯 Wilkes 提出 并在剑桥大学设计出EDSAC 2计算机 希望能实现灵活可变的计算机指令系统 用一个微程序来实现一条机器指令的功能 把微操作或串行执行的微操作组编制成 微指令 把微指令按时序先后排列成微程序 存放在一个只读存储器里 计算机执行指令时 一条条地读出微指令 产生操作控制信号 控制相应的部件执行规定的操作 微命令和微操作 微命令 控制部件通过控制线向执行部件发出的控制命令 直接作用于部件或控制门电路的命令 打开或关闭某传送通路的电位命令 或是对触发器或寄存器进行同步打入 置位 复位的控制脉冲 微操作 执行部件接受微命令后进行的操作 微命令与微操作一一对应 控制部件与执行部件通过控制线和反馈信息进行联系 微指令和微程序 微指令在机器的一个CPU周期中 一组实现一定操作功能的微命令的组合 微程序实现一条机器指令功能的许多条微指令组成的序列 微程序控制器原理框图 微程序举例 十进制加法微程序 专门取机器指令的微指令 1 从内存中取出一条机器指令 放入指令寄存器IR 2 对程序计数器加1 3 对机器指令的操作码用P1进行判别测试 然后修改微地址寄存器的内容 给出下一条微指令的地址 P1测试的 状态条件 是指令寄存器的操作码字段 即用OP字段作

温馨提示

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

评论

0/150

提交评论