8086cpu学习笔记(4):指令系统
指令系统按功能分类可分为六大类:
数据传送指令、数据运算指令、逻辑运算和移位指令、字符串处理指令、控制转移指令、
处理器控制指令
一、数据传送指令
MOV
格式: MOV 目的, 源
将源操作数传送到目的操作数。
注意:IP寄存器不作为操作数。
立即数和CS寄存器不作为目的操作数。
两操作数不同时为储存单元和段寄存器。
16为立即数不可以直接被传送到DS寄存器中,必须经过AX过度。
PUSH
格式:PUSH 源
压栈
POP
格式:POP 目的
弹栈
注意:CS寄存器数据只可作为源操作数,不可作为目的操作数(只可出不可进)
立即数不作为堆栈指令操作数
XCHG
格式:XCHG 目的,源
目的和源操作数数据交换
注意:段寄存器不做操作数
不可两个存储单元直接交换
XLAT
格式:XLAT 转换表 或 XLAT
将一种代码转换为表中对应另一种代码。
使用步骤:
1建立一个表格
2将表格的起始偏移地址装入BX寄存器
3将要转换的数据相对于首元素的偏移量放入AL寄存器(既最多8位256字节)
4 执行XLAT后转换代码放入AL中
IN、OUT
格式:IN AC, 地址 OUT 地址, AC
AC:AX或AL(八位或16位累加器) 完成I/O端口与累加器直接的数传输
注意:当端口地址小于FFH(255)时直接给出,大于FFH时需放在DX寄存器中间接给出。
LEA
格式:LEA 目的,源
取有效地址指令,取源操作数地址偏移量。
注意:源操作数必须是储存单元,目的操作数必须时寄存器,但不能是段寄存器。
下面两条语句作用相等:
MOV AX, OFFSET TABLE
LEA AX, TABLE
二、算数运算指令
1.加法
ADD
格式:ADD 目的, 源
源+目的->目的
ADC
带进位的加法
格式:ADD 目的, 源
源+目的+CF->目的
注意:
• 源操作数:寄存器、存储器、⽴即数;
• 目的操作数:寄存器、存储器;
• 两个操作数不能同时为存储器;
• 两个操作数的类型必须相同。
• 一条带CF的加/减指令实际上涉及两个CF,参加加/减计算的是前一个字节计算后影响的CF,本次计算后影响的CF留下给下一字节计算。
ADC可用于多字节加法:
一、多字节加法程序流程图
二、程序
DATA SEGMENT ;数据段
DATA1 DB 4 DUP(?)
DATA2 DB 4 DUP(?)
DATA3 DB 5 DUP(?)
DATA ENDSCODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AXMOV SI,OFFSET DATA1 ;取地址
MOV DI,OFFSET DATA2
MOV BX,OFFSET DATA3
MOV CX,DATA2-DATA1
CLCNEXT: ;循环做加法
MOV AL,[SI]
ADC AL,[DI]
NOP
MOV [BX],ALINC SI
INC DI
INC BXLOOP NEXTMOV AL,0 ;处理最后的进位
ADC AL,0
MOV [BX],AL
MOV AH,4CH
INT 21HCODE ENDS
END START
REF:http://www.cnblogs.com/BlueMountain-HaggenDazs/p/5031213.html
INC
格式:INC 目的
目的+1->目的
注意:
操作数不为立即数
不影响CF标志位
当操作数是存储单元时,必须说明数据类型
例:INC BYTE PTR[BX]
INC WORD PTR[BX]
2.减法
SUB减法
SBB 带借位的减法
DEC 减量指令
格式和注意同加法
NEG
取负指令
格式:NEG 目的
目的 <- -目的
CMP
比较指令
格式:CMP 目的, 源
结果不回送,仅反应在标志位上
CMP指令仅执行减法计算,不回送结果,所以目的操作数不变,但根据减计算的结果影响6个条件标志位,可用的操作数组合也与SUB等指令相同。
ZF标志位变化意义:
ZF = 1,则两个数字相等,ZF = 0,则不相等。
CF标志位意义:无符号数判断大小:
CF = 0,则被减数大于或等于减数,若CF 0 1,则相反。
OF,SF标志位意义:有符号数判断大小:
OF = 0, SF = 0,则被减数大于等于减数。
SF = 1,则被减数小于减数
OF = 1, SF = 0,则被减数大于减数
SF = 0,则被减数小于减数
OF和SF相同,被减数大于等于减数,OF和SF不同,被减数小于等于减数
三、逻辑运算和移位指令
1.逻辑运算指令
NOT
按位取反
格式:NOT 目的
下列指令的操作数的要求同算术运算类的指令,指令执⾏后,将CF和OF清零,⽽运算的结果体现在ZF、SF和PF上,源操作数不变。
AND
逻辑与指令
格式:AND 目的, 源
按位与
可用与取数据的某些位,取的位与1,其余置零与0.
OR
逻辑或
格式:OR 目的, 源
按位或
可用于取数据的某些位,取得或0,其余置1或1.
XOR
逻辑异或
保留位异或0,取反位异或1
TEST
格式:TEST 目的, 源
逻辑与操作,结果保存标志,但不回传。
2.算数逻辑移位指令
SAL/SHL
算数/逻辑左移指令
格式:SAL/SHL 目的, 计数值
注意:
当移位次数大于1时必须放在CL中。
SHR
逻辑右移指令
格式:SHR 目的, 计数值
特点:若⽬的操作数为⽆符号数,每移位⼀次,相当于⽬的操作数除以2,可以实现除法运算,但是会丢弃余数。
SAR
算数右移指令
格式:SAR 目的, 计数值
每移动一次,最高位保持不变。
四、控制转移类指令
1.JMP
无条件跳转指令 (等同于C语言中的GOTO指令)
格式:JMP 目的
根据转移的距离和寻址的方式分为四类
段内直接转移
段内间接转移
段间直接转移
段间间接转移
段内直接转移
目标地址由指令直接给出
例: JMP 0011H
JMP NEXT
段内间接转移
例:JMP AX
JMP WORD PTR[AX]
段间直接转移
例:JMP FAR PTR
段间间接转移
例:JMP DWORD PTR[BX]
实质:IP ← 远标号的偏移地址
CS ← 远标号的段地址
2.过程调用及返回指令
过程调用指令:CALL
返回指令: RET
调用类型:
近调用:被调用过程与CALL在同一代码段里
远调用:不在同一代码段里
格式:CALL 过程名
执行步骤:
(1)保存断点:将CALL指令的下一行指令的有效地址压入栈中。(近调用:压入IP,远调用:压入CS和IP)
(2)根据指令给出的地址找到子程序的入口。
调⽤⽅式:
段内直接调⽤
格式:CALL NEAR PTR ⽬标地址
段内间接调⽤
格式:CALL WORD PTR [SI]
段间直接调⽤
格式:CALL FAR PTR ⽬标地址
段间间接调⽤
格式:CALL DWORD PTR [SI]
RET
格式:RET
与CALL指令相对应,通常作为⼀个⼦程序的最后⼀条指令,执⾏时从栈中弹出返回地址,即:栈顶的内容被弹出到IP(或IP和CS),⽤以返回到调⽤这个⼦程序的主程序的断点处。
3.条件转移指令
指令执行后,根据状态标志位确定是否转移。不满足条件则顺序执行。
格式:条件操作符 标号
指令的转移范围为-128~+127字节
⑴ 直接标志转移指令
特点:这类指令直接在指令助记符中给出状态标志的测试条件,共10条指令。
助记符的命名规则:
J开头,若判定条件为对应标志位为1,则加上对应标志位符号的首字母。若判定条件为对应标志位为0,则加上N接对应标志位符号的首字母。
间接标志转移指令
特点:这类指令主要是放在CMP指令的后边,⽤来⽐较两个数的⼤⼩。
判断无符号数大小:
JA:大与
JAE:大于等与
JB:小于
JBE:小于等于
判断有符号数的大小:
JG:大于
JGE:大于等于
JL:小于
JLE:小于等于
4.循环控制指令
控制一组指令重复执行。
循环次数通常放在CX中。
循环控制均不影响标志位。
(1)LOOP
格式: LOOP 短标号
功能:CX-1 -> CX
判断CX是否为0,若不为零转移至标号后执行。
否则推出循环,顺序执行。
⑵ LOOPE/LOOPZ 相等或结果为零时循环
功能:CX-1→CX;若CX≠0且ZF=1则转移;
⑶ LOOPNE/LOOPNZ 不相等或结果不为零循环
功能:CX-1→CX;若CX≠0且ZF=0则转移;
⑷ JCXZ 若CX为0跳转
功能:判断若CX=0则转移;
注意:JCXZ指令不对CX的内容进⾏⾃动减1操作
五、处理器控制指令
标志操作指令:
助记符命名规则:
清零操作:CL开头
置一操作:ST开头
后面接目的标志位的首字母
2、停机指令和空操作指令
(1)HLT停机指令
作⽤:CPU进⼊暂停状态,不进⾏任何操作,该指令常⽤来等待中断的出现。
(2)NOP空操作指令
单字节指令,执⾏时需要3个时钟周期的时间,不完成任何操作,主要⽤于循环操作中增加延时。
8086cpu学习笔记(4):指令系统相关推荐
- 8086CPU学习笔记:8086的寻址方式
认真写好一篇文章 前言:8086汇编指令概述 计算机的指令通常包含操作码和操作数两部分.指令有单操作数.双操作数和无操作数三种,其中双操作数的两个操作数要用逗号隔开,逗号左边是目的操作数,逗号右边是源 ...
- 计算机组成原理学习笔记第5章指令系统 5.3——操作数寻址方式
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) First (在文末点击使用,返回文章首部) 目录 0.思维导图 1.立即数寻 ...
- 硬编码学习笔记(二)—— 经典变长指令
硬编码学习笔记(二)-- 经典变长指令 前言 指令结构 符号说明 寻址符号 操作数符号 上标符号 One-Byte Opcode Map 变长指令 ModR/M 例:0x88 例:0x89 例:0x8 ...
- 计算机组成原理的基础知识,计算机组成原理:基础知识部分习题解答(学习笔记)...
计算机组成原理:基础知识部分习题解答(学习笔记) 1.冯·诺依曼型计算机的主要设计思想是什么?它包括哪些主要组成部分? 答:存储程序并按地址顺序执行,是冯·诺依曼型计算机的主要设计思想.冯·诺依曼型计 ...
- 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线
文章目录 课程笔记导览 附录:英语解释 第三章 总线 3.1 总线的基本概念 使用总线的原因: 总线的定义 总线上信息的传送 总线结构举例 单总线结构 面向CPU的双总线结构 以存储器为中心的双总线结 ...
- Cortex-M3学习笔记(一)
Cortex-M3学习笔记(一) 首先,在学习Cortex-M3时,我们必须要知道必要的缩略语.整理如下:AMBA:先进单片机总线架构 ADK:AMBA设计套件 AHB:先进高性能总线 AH ...
- 计算机组成原理学习笔记一
计算机组成原理学习笔记一 计算机发展历程 一.计算机硬件发展 (1)计算机的四代变化 (2)计算机元件更新换代 二.计算机软件发展 三.计算机的分类 计算机系统层次结构 一.计算机系统的组成 二.计算 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- 计算机组成原理 | 第八章《计算机的外围设备》、第九章《输入/输出系统》 学习笔记
计算机组成原理 | 第八章<计算机的外围设备>.第九章<输入/输出系统> 学习笔记 引言 & 声明 第一章 计算机系统概论 第二章 计算机中数据的表示方法 第三章 运算 ...
- JMM 学习笔记(一) 跨平台的JMM
前言 其实关于并发.多线程这方面的文章,我已经写过了一些: <当我们说起多线程与高并发时> <Java多线程学习笔记(一) 初遇篇> <Java多线程学习笔记(二) 相识 ...
最新文章
- 综述:神经网络中 Normalization 的发展历程
- 分布式计算互相sayhello
- GIT项目管理工具(part8)--版本控制
- 6款国内外SNS开源软件 搭建社交网站利器
- React实现图片自适应
- cass绘制围墙lisp_CASS中用LISP完成高程值的可视化处理
- 程序员养生(01) -- 心态
- 3dmax脚本_3DMax二种距离测量方法
- Android 驱动开发(1)---Hello 实例
- 学会这6个强大的CSS选择器,将真正帮你写出干净的CSS代码!
- 增量式PID公式的4点疑问和理解
- 计算机软件后缀名,如何显示文件后缀名
- Sub Matrix Sum 含负数的最短区间+ 矩阵一维化
- 基于k-近邻算法的室内WiFi位置指纹定位实验报告
- Jenkins 打包项目出错汇总(持续)
- HDFS 磁盘写及balance
- maven 官方网站
- H5仿抖音上下切换翻页动态加载效果
- 去水印的手机APP哪个好用,怎么一键去水印
- solr两种安装、ik分词器设置、DIH导入mysql数据