[408计算机组成原理] 第四章 指令系统4.3

在这里插入图片描述

🚀 【考纲要求】高级语言程序和机器级代码之间的对应,编译器、汇编器的概念与链接器的基本概念,选择语句的的机器级表示,循环语句的机器级表示,过程(函数)调用对应的机器级表示
🚀 第四章的第一节内容请查看此链接 指令系统4.1-简单熟悉指令系统了解相关概念
🚀 第四章的第二节内容请查看此链接 指令系统4.2-指令的寻址方式和数据的寻址方式

三、程序的机器级代码表示

以一个简单的例子来看什么是程序的机器级代码表示;编写的C语言代码,当我们点击编译器的运行后,电脑就会自动的就将程序运行的结果给输出到屏幕;这一自动的背后,其实是电脑在背后偷偷的为我们干了很多的事情。只有机器语言即01代码才可以直接的电脑中的硬件直接执行;所以当我们的按下运行后,首先将我们编写的高级语言程序代码转变成汇编语言程序,即一条一条的指令;所以程序的机器级代码表示,就是将高级语言程序代码转变成机器级代码(汇编程序),汇编程序经过汇编器后就会变成一段01代码,此时硬件就可以直接运行了。
在这里插入图片描述
这一节的内容以X86汇编指令介绍,即就是了解如何将我们编写的高级语言程序用X86这类汇编指令表示出来。

3.1在机器指令中数据在哪?

在前面我们知道了一条指令的组成是操作码+地址码(即数据/数据地址),在4.2节学习了指令寻找数据的方式;那在X86汇编指令中,它是如何表示一条指令以及是怎么区分寻址方式的呢?这就是接下去要学习的-------X86指令寻找数据。

在这里插入图片描述

以下以X86中mov指令为例讲解其寻找数据的方式。
在这里插入图片描述

①X86处理器寄存器的分类

以下就是X86CPU的所有的寄存器

  • EAX EBX ECX EDX ESI EDI EBP ESP 都是32位的,其中EAX EBX ECX EDX是通用寄存器。(E–Extended)
  • 为了让通用寄存器更加灵活设置AX BX CX DX分别为EAX EBX ECX EDX的后16位,同时还将其进一步分为AH BH CH DH高八位和AL BL CL DL低八位。
  • ESI和EDI是变址寄存器;EBP和ESP是堆栈寄存器。
    在这里插入图片描述

②寄存器寻址

例如指令 mov eax,ebx,此条指令实现将寄存器ebx中的内容复制到eax寄存中,而此条指令采用的寻址方式就是寄存器寻址,给出寄存器编号eax和ebx,然后直接读取寄存器中的内容,再将ebx中的内容复制到eax中。

③立即寻址

例如指令mov eax,5,此条指令实现将立即数5复制到eax寄存中,而此条指令中对5的寻址方式就是立即数寻址,5是立即数。

④直接寻址

dward---两个字(四个字节 32bit)
byte---一个字节(8bit)
word---一个字(两个字节 16bit)

mov eax,dward ptr [ af786h ],此条指令实现将主存中地址为af786h的内容读出2个字的内容给eax寄存器。
mov byte ptr [ af786h ],5,此条指令实现将立即数5复制到主存地址为af786h的地方占用一个字节。

⑤寄存器间接寻址

mov eax, dword ptr [ebx]是将寄存中存储的地址取出来找到其在主存中的位置,将32bit的信息复制给eax寄存器。

⑥偏移寻址

mov eax, dword ptr [ ebx+8 ]将 ebx中的地址偏移8,然后找到其所指主存地址中的32bit信息制到 eax 寄存器中

⑦为指明移动多少位的

mov eax, [ebx]是将ebx所指向的主存地址的32位(未指明多少位,默认32位)复制进入eax寄存器。
mov [af996h], eax是将ebx中的内容复制到主存地址为af996h的中。(未指明读写长度,默认为32bit

总结:了解了X86指令中的寻址方式不同其不同的表述,同时应该记住8086CPU中寄存器的分类,记住E开头的就是32bit的寄存器,ABCD是四个通用寄存器,同时将其划分为了16位、8位;对于EBP、ESP是堆栈寄存器,ESI、EDI是变址寄存器。

3.2常用的X86汇编指令

在上面我们了解了X86指令的中数据的寻址方式,不难总结出来。对于数据来源无非就是立即数、寄存器、主存,所以指令所需要的数据也是从这三个地方找;接下去将学习X86常用的汇编指令。

在指令系统的第一节内容中,知道了指令的操作类型一共有五种(数据传送类指令、算数和逻辑运算类指令、转移指令、移位指令、输入输出操作)

①算数运算

加 目的操作数 destination 源操作数 source ;其实现的功能就是将s的内容加上d的内容,然后将结果存入d的内容。

add d s

减 将d的内容减去s的内容,然后将结果存放到d中。

sub d s

乘 将d的内容乘上s的内容。最后将结果放入d中。

mul d s

除 对于除法操作来说,其指令中的s表示的是除数,对于被除数其是被隐含表达在edx:eax中,最后的结果其商被放在eax中,余数被放在edx中。

div s

取负数 将d取负数,最后结果放d中

neg d

自增++ 将d++,最后结果放d中。

inc d

自减 - - 将d- - ,最后结果放d中。

dec d

②逻辑运算

与 将d和s逐位相与放回d。

and d s

或 将d和s逐位相或放回d。

or d s

非 将d中的内容逐位取反放回d。

not d

异或 将d和s的内容逐位异或放回d。

xor d s

左移 将d逻辑左移s位,结果放d中。

shl d s

右移 将d逻辑右移,结果放在d中。

shr d s 

以上所说的指令都是X86指令,而对于X86指令来说,由于公司不同,语法规范也不同,如下是AT&AT格式和Intel格式的对比。
在这里插入图片描述

3.3 选择语句的机器级代码表示

选择语句通过cmp指令和跳转指令来实现的,我们首先要先来学习一系列的跳转指令

  • je <地址> 若a==b则跳转 #jump when equal
  • jne<地址> 若a!=b则跳转 #jump when not equal,
  • jg <地址> 若a>b则跳转 #jump when greater than,
  • jge <地址> 若a>=b则跳转#jump when greater than or equal to,
  • j1 <地址> 若a<b则跳转#jump when less than,
  • jle<地址> 若a<=b则跳转#jump whenlessthan orequal七o ,

cmp指令:

  • cmp a,b #比较a和b两个数

通过cmp比较指令和跳转指令就可以实现所谓的选择语句,如下面这个例子中,就将一个C语言编写的条件判断语句使用机器级代码表示了出来。

在这里插入图片描述

  • cmp eax ebx 比较eax和ebx中数值的大小,其实cmp指令在比较数的大小的是时候在背后做的事情就是将两个数进行减法操作,然后就会产生一系列的标志位OF ZF SF CF等存储在PSW中
  • jg NEXT jg先判断比较数结果是否为大于,此时只需要取出SF结果符号位的值,就可以知道是否大于,若大于则跳转到NEXT:下的代码执行
  • NEXT:mov ecx eax 将eax中的内容送入ecx中,也就是执行if判断中的内容
  • jg先判断取出的SF为负号,也就是不大于,则执行mov ecx ebx,即执行else中的内容。

也可以如下图所示来实现

在这里插入图片描述

3.4 循环语句的机器级代码表示

同样的可以使用cmp指令和跳转指令来实现,如下图所示的例子

  • 循环条件是i的值要小于等于100,所以可以先将循环体定义为一个L1:使用cmp指令判断;cmp edx 100,让i和100比较
  • 若i大于了100,跳出循环段,直接跳L2:
  • 若小于等于则,执行循环体
  • 循环体执行结束后,判断是否继续循环,cmp edx 100jle L1,还是小于等于的话继续循环

总结为以下四个步骤:①循环前的初始化②是否直接跳过循环③循环主体
④是否继续循环

这是使用条件转移指令来实现循环语句,在X86机器中,还提供了loop指令来实现循环,直接看例子

在这里插入图片描述

  • 使用 Looptop: 表示循环的开始,
  • loop Looptop: 自动的进行条件判断,若满足条件就会自动的跳转到Looptop:再次进入循环
  • 默认是同exc作为循环计数器!!!

3.5 过程调用的机器级代码表示

①高级语言函数调用

先来看一下高级语言的函数调用是如何进行的

  • main函数执行是会先开辟一个main函数的调用栈,执行到要使用p()函数的时候
  • 开辟一个p的栈帧,继续执行到Q()函数
  • 同样的会开辟Q的栈帧,随着Q函数的执行完成,栈帧会被销毁,从而继续执行到函数caller()
  • 同样的开辟栈帧caller,执行caller函数的时候执行add函数
  • 同样开辟add栈帧,直到add函数执行完成,然后依次返回,销毁栈帧

在这里插入图片描述

②机器级代码如何实现函数调用

机器级代码使用call 和 ret 来实现函数的调用以及返回
在这里插入图片描述

  • 执行caller函数时,执行到call add的指令的时候,说明call指令已经取出完成,此时的IP寄存器指向的应该就是mov [ebp-4],eax这条指令。
  • call指令执行中会首先将IP值(此时是mov [ebp-4],eax这条指令)保存,压入栈顶,同时将IP的值设置为add函数的起始地址。
  • 进入add函数首先执行push ebp 和 mov ebp esp,将ebp的压栈,同时让ebp指向新的函数add的栈帧基地址
  • 接着执行leave命令,是先将esp指向ebp的位置,因为每个开辟栈的栈底,最开始就会先例行执行push ebp 和 mov ebp esp指令(或则说是enter指令)保存上一个栈的基地址;此时会在进行pop ebp,将上一个栈的基地址弹栈赋值给ebp,弹栈后esp会自动+4,指向前一个栈的栈顶。
  • ret指令,恢复IP值

完整的实现了使用机器级代码实现函数调用;IP值的压栈,enter:上一个栈帧基地址的保护(存储在新开辟的栈帧的栈底),leave:栈帧的恢复,mov 和pop ,ret恢复保存的IP值。

③如何读取栈帧中的变量值?

pop读取, 这个很好理解
在这里插入图片描述
mov指令加上基地址偏移读取

  • sub esp,12 开辟栈帧大小
  • mov [esp+8],eax,将eax中的内容放置到esp上两格的位置,也就是放置了211
  • mov [esp+4],985,将985放置到esp上一格的位置
  • mov eax,[ebp+8],将ebp上两格的位置处的数据666赋值进入eax;其实通过该条指令已经实现读取栈帧中元素的数值了。
  • mov [esp],eax,将eax的值666复制进入主存[esp]中

在这里插入图片描述

  • add esp,8 栈顶指针加8

在这里插入图片描述

④如何切换栈帧?

绿色函数执行时候,执行到黄色函数,此时就需要开辟黄色栈帧,在开辟之前,是执行call指令的,call指令的执行首先是将当前IP值压栈,即压入绿色的栈帧,接着call指令还会将IP值改为黄色函数的入口地址;进入黄色函数,首先例行执行enter指令,保护断点(push ebpmov ebp esp);黄色函数执行完成后就需要切换栈帧。
在这里插入图片描述
切换栈帧:首先例行执行leave指令,切换栈帧,先mov esp ebp 让esp指回黄色栈底,pop ebp,出栈的是绿色函数栈帧的基地址复制给ebp,esp自动减4,栈帧切换完成;然后执行ret,返回,恢复IP值。

⑤栈帧有哪些内容

  • 例行执行enter 上一个函数的基地址
  • 函数内部的局部变量
  • 未使用区域
  • 可能会调用其他函数,传入其他函数的参数
  • IP的返回地址

在这里插入图片描述

⑥如何访问传入的参数

在这里插入图片描述

⑦如何接受返回值

在这里插入图片描述

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书以INTEL8086CPU 为核心,介绍了16位微机的组成原理,8086的指令系统及MASM宏汇编伪指令,在汇编语言程序设计中介绍DOS功能调用,汇编语言与高级语言的连接,硬件部分讨论了常用的I/O接口芯片的结构、编程及应用举例,详尽地讨论了8086的中断,介绍PC机的总线,微机的体系结构等,对于高性能微机在本书的后两章中也有所介绍。全书共分为十二章,每章都附有习题,可作为高等学校非电子类专业学生的教材,微机学习者的自学书籍及从事微机工作的广大工程技术人员的参考书。 作者简介 目录 修订版前言前言第一章 计算机基本知识 1.1 绪论 1.2 运算基础 1.3 微型计算机的基本结构 习题与思考题第二章 8086微型计算机体系结构 2.1 8086CPU结构 2.2 8086系统的结构和配置 2.3 8086CPU内部时序 习题与思考题第三章 8086的指令系统 3.1 8086指令系统的特点 3.2 8086的寻址方式 3.3 8086的指令系统 习题与思考题第四章 8086汇编语言程序设计 4.1 8086汇编语言的基本语法 4.2 IBM-PC-DOS系统的功能调用 4.3 汇编语言程序设计举例 4.4 高级语言与汇编语言的连接 习题与思考题第五章 存储器与存储系统 5.1 存储器分类 5.2 多层存储结构概念 5.3 主存储器及存储控制 5.4 8086系统的存储器组织 习题与思考题第六章 微型计算机的输入/输出……第七章 中断第八章 可编程接口芯片第九章 总线第十章 D/A,A/D转换及应用第十一章 计算机系统结构概述第十二章 高性能微处理器附录 指令系统参考文献
目录 第1 章运算器......................................................................................................................................1 1.1 基本运算器实验.....................................................................................................................1 1.2 超前进位加法器设计实验.....................................................................................................6 1.3 阵列乘法器设计实验...........................................................................................................12 第2 章存储系统................................................................................................................................14 2.1 静态随机存储器实验...........................................................................................................14 2.2 Cache控制器设计实验.........................................................................................................18 第3 章控制器....................................................................................................................................23 3.1 时序发生器设计实验...........................................................................................................23 3.2 微程序控制器实验...............................................................................................................26 第4 章系统总线与总线接口............................................................................................................36 4.1 系统总线和具有基本输入输出功能的总线接口实验.......................................................36 4.2 具有中断控制功能的总线接口实验...................................................................................41 4.3 具有DMA控制功能的总线接口实验..................................................................................43 第5 章模型计算机............................................................................................................................45 5.1 CPU与简单模型机设计实验...............................................................................................45 5.2 硬布线控制器模型机设计实验...........................................................................................53 5.3 复杂模型机设计实验...........................................................................................................57 第6 章输入输出系统........................................................................................................................71 6.1 带中断处理能力的模型机设计实验...................................................................................71 6.2 带DMA控制功能的模型机设计实验..................................................................................85 6.3 典型I/O接口8253 扩展设计实验.......................................................................................91 第7 章精简指令系统计算机............................................................................................................95 7.1 计算机的指令系统..................................................................................................................95 7.2 基于RISC技术的模型计算机设计实验................................................................................98 第8 章重叠处理机..........................................................................................................................103 8.1 重叠的基本原理和思想.....................................................................................................103 8.2 基于重叠技术的模型计算机设计实验.............................................................................105 第9 章流水线处理机........................................................................................................................ 114 9.1 流水线的原理及基本思想.................................................................................................114 9.2 基于流水技术的模型计算机设计实验.............................................................................
中文名: 微型计算机原理 作者: 宋汉珍图书分类: 硬件 资源格式: PDF 版本: 文字版 出版社: 高等教育出版社书号: 7040157403发行时间: 2004年11月 地区: 大陆 语言: 简体中文 简介: 内容简介: 本书是普通高等教育“十五”国家级规划教材。根据高职高专教育特点,本书将计算机组成原理的主干内容和微型计算机原理的内容有机结合,统筹安排,形成独具特色的一本教材。本书具有内容充实、结构严谨、深入浅出、通俗易懂的特点。 本书的内容包括:计算机系统概述、计算机中数据的表示法、运算器与控制器、Intel 80x86做处理器、存储系统、8086指令系统与汇编基础、输入输出系统及接口、中断系统串行和并行通信及常用接口电路、总线。本书各章后面均附有习题。 本书适合于高等职业学校、高等专科学校、成人高校、本科院校举办的二级职业技术学院,也可供示范性软件职业技术学院、继续教育学院、民办高校、技能型紧缺人才培养使用,还可供本科院校、计算机专业人员和爱好者参考使用。 内容截图: 目录: 第1章 计算机系统概论 1.1 计算机的发展 1.2 计算机的分类及应用 1.3 计算机的基本构成 1.4 微型计算机的基本构成 1.5 微型计算机的工作过程 1.6 计算机的性能指标 习题 第2章 计算机中数据的表示法 2.1 计数制及其相互转换 2.2 计算机中数值数据的表示 2.3 计算机中带符号数的表示 2.4 计算机非数值数据的编码 2.5 数据校验码 习题 第3章 运算器与控制器 3.1 算术逻辑运算的基本电路 3.2 定点加减运算的实现 3.3 定点乘法运算的实现 3.4 定点除法运算的实现 3.5 浮点运算 3.6 定点运算器 3.7 控制器的功能和基本组成 3.8 微程序控制器 3.9 微程序设计技术 习题 第4章 Intel 80x86微处理器 4.1 中央处理器的功能和组成 4.2 8086的内部结构 4.3 8086的引脚信号和工作模式 4.4 8086CPU的操作时序 4.5 80386微处理器 4.6 Pentium微处理器 习题 第5章 存储系统 5.1 存储系统概述 …… 第6章 8086指令系统与汇编基础 第7章 输入输出系统及接口 第8章 中断系统 第9章 串行、并行通信及常用接口电路 第10章 总线 附录 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值