微机原理及应用 您所在的位置:网站首页 微机指令dec 微机原理及应用

微机原理及应用

2024-03-10 15:45| 来源: 网络整理| 查看: 265

指令系统 指令系统 指令系统基本概念 指令与指令系统 指令格式 指令中的操作数 立即数操作数 寄存器操作数 存储器操作数 三种类型操作数的比较 寻址方式(相当重点) 立即寻址 寄存器寻址 存储器操作数的寻址方式 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 基址变址相对寻址 隐含寻址 小结 指令分类 通用数据传送指令(MOV,PUSH,POP,XCHG,XLAT,CBW,CWD) 一般数据传送指令MOV 堆栈操作指令 压栈指令PUSH 出栈指令POP 堆栈指令的操作说明 交换指令 查表指令 字位扩展指令(CBW,CWD) 字节到字 字到双字 地址传送指令(LEA LDS LES) LEA LEA和MOV操作指令的对比 LEA在程序中的作用 LDS, LES 标志传送指令(LAHF,SAHF,PUSHF,POPF) 输入输出指令 指令格式 指令寻址方式 指令示例

指令系统

有关指令系统的基本概念 对操作数的寻址方式 六大类指令的操作原理

还有指令字长和机器字长

{  操作码的含义   指令对操作数的要求   指令执行的结果  \left\{\begin{array}{l}\text { 操作码的含义 } \\ \text { 指令对操作数的要求 } \\ \text { 指令执行的结果 }\end{array}\right. ⎩⎨⎧​ 操作码的含义  指令对操作数的要求  指令执行的结果 ​

指令系统基本概念

指令及指令系统 指令的格式 指令中的操作教 指令字长与机器字长

指令与指令系统

指令:控制计算机完成某种操作的命令

机器指令和汇编指令是一一对应的

指令系统:处理器所能识别的所有指令的集合

一个CPU能识别的指令是有限的,可能不完全相同 一种CPU能识别的指令的集合叫做指令系统

指令的兼容性:同一系列机的指令都是兼容的。

自底向上兼容,前提是和Intel兼容,架构一样

一条指令应包含的信息:运算数据的来源、运算结果的去向、执行的操作

指令格式

在这里插入图片描述

操作码也叫指令码,就是功能,这里中括号表示可选,和之后指令里的中括号不一样 操作对象叫操作数,可能是运算对象,也可能是运算对象存放的地址 前面是目标操作数,运算结果去向,另外一个源操作数是运算数据来源,对象 加法需要两个运算对象,但结果一定放在目标操作数里头,目标操作数一定是个地址

{  零操作数指令 : 操作码   单操作数指令 : 操作码 操作数   双操作数指令 : 操作码 操作数,操作数   多操作数指令 : 三操作数及以上  \left\{\begin{array}{l}\text { 零操作数指令 : 操作码 } \\ \text { 单操作数指令 : 操作码 操作数 } \\ \text { 双操作数指令 : 操作码 操作数,操作数 } \\ \text { 多操作数指令 : 三操作数及以上 }\end{array}\right. ⎩⎪⎪⎨⎪⎪⎧​ 零操作数指令 : 操作码  单操作数指令 : 操作码 操作数  双操作数指令 : 操作码 操作数,操作数  多操作数指令 : 三操作数及以上 ​

根据刚刚中括号可有可无的划分 零操作数指令中,执行对象固定,因此隐藏了 多操作数指令只有大型机才有

指令中的操作数

在这里插入图片描述

程序在硬盘中,经过编译链接存放,运行时一定放在内存里,导入内存时包括指令和运算数据,,存在某一单元地址 内存也就成为了指令操作数的一种表现形式 寄存器我们不知道地址,但是有名字,面向程序员开放,具体地址操作系统知道就行了 内存操作数和寄存器操作数,一旦出现就表示运算数据的存放地址 目标操作数一定要有地址含义

立即数操作数

立即教本身是参加操作的数据,可以是8位或16位, 只能作为源操作教。

MOV是将源操作数送到目标地址,8位16位都行,但是要符合长度

例 : MOV AX, 1234H MOV BL, 22H 立即数无法作为目标操作数 立即数可以是无符号或带符号数,数值符合其取值范围

寄存器操作数

参加运算的数存放在指令给出的寄存器中,可以是16 位 或8位。 例 : MOV AX, BX MOV DL, CH

寄存器在CPU里,作为三种操作数运行最快

存储器操作数

参加运算的数存放在存储器的某一个或某两个单元中 表现形式: [ ] 中括号内容表示操作数在内存中的偏移地址

指令的操作数出现[ ], 表示要寻址的数在内存中。 存储器操作数环节更多,内存单元也很多,所以很慢 只要有[]就说明是在内存的某个地方。在内存的地址就是括号里的内容

例如 MOV AL, [1200H] MOV AX, [1200H] 在这里插入图片描述

1200H里边是个8位二进制,也就是一个字节,送到AL刚好,但是送到AX就不够了,需要一个字,MOV就会送到低AL后,再找下一个1201H单元去存在AH部分。

三种类型操作数的比较

立即教:

由指令直接给出,是常数性质 无地址含义,只表示运算的数据 → 不能作为目标操作数

常数也可以有不同含义,例如门牌号的1200和存折里的1200 也有可能是字符,但本质上还是常数

奇存器操作教

表示运算的数据存放在寄存器中 多数情况下,寄存器操作数指通用寄存器 在三类操作数中所需运行时间最短

快因为就在CPU中 控制寄存器不会在指令中直接出现 段寄存器也有些限制,一般都指通用寄存器

存储器操作教

表示运算的数据存放在内存 指令中 [ ] 里是数据所在单元的偏移地址

到底在几个单元取决于另一个操作数的字长(如上一个例子MOV AL, [1200H]和MOV AX, [1200H],方框里都是1字节)

在三类操作数中所需运行时间最长。

它最慢,内存很大,和指令代码不在同一个区域

寻址方式(相当重点)

寻找操作数所在地址的方法 操作数在哪里?? 源操作数:运算数据的来源 目标操作数:运算结果的去向 或者 另一个运算数据

上面的三种操作数,就大致对应了三类寻址方式

操作数可能的来源或运算结果可能的去处:

由指令直接给出

寄存器

内存单元

寻找操作教所在地址的方法可以有三种大类型

指令直接给出的方式 存放于寄存器中的寻址方式 存放于存储器中的寻址方式

指令直接给出的方式(运算对象由指令直接给出) 存放于寄存器中的寻址方式 存放于存储器中的寻址方式 隐含给出方式

立即寻址

给出立即数,立刻导出,不可能作为目标操作数,仅用于源操作数,因为我们之前说过源操作数要有一个返回的地址,决定指令执行完毕的位置 因为直接给出,所以在编译的时候就会和指令一起被放在内存的CS也就是代码段,指令执行时,它就会被拿出来送过目标地址,可以是8位或16位有符号数或无符号数 但实际应用很少,因为操作起来要赋值的东西太多了

立即寻址仅适合于源操作数。即源操作数是参加操作的数据本身 由指令直接给出运算的数据 (操作数是立即数)。为常数形式或字符形式。 立即数只表示运算的数据,无地址含义;

例如MOV AX, 1200H 在这里插入图片描述

思考如果不是AX而是存储器单元,是几个单元?是两个么?立即数前面可以加0,也就是说它的长度是不确定的。 如果目的操作数和源操作数都不确定,怎么办?之后的指令学习会回答这个问题。

寄存器寻址

参加操作的操作数在CPU的通用寄存器中。

数据通常在寄存器而且是通用寄存器中,不会是控制寄存器,偶尔是段寄存器

MOV AX, BX 在这里插入图片描述 此种寻址方式中的寄存器主要是通用寄存器 不含控制寄存器,段寄存器限制使用

存储器操作数的寻址方式

指令操作的对象在内存中, 表现形式为:[ ] 指令中给出运算对象在内存某个逻辑段中的偏移地址:[ 偏移地址 ] 逻辑段的段基地址通过默认或重设方式给出。

内存中,[ ],是偏移地址,不会给出段基地址,更不可能给出物理地址,因为程序在编译



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有