ICS汇编学习笔记——8086的指令系统
8086/8088的指令系统包含了六种类型,其中数据传送指令14条,算术运算指令20条,逻辑运算指令13条,串操作指令10条,控制转移指令28条,处理器控制指令12条。
1)数据传送类指令(14条)
MOV: 传送
PUSH、POP:堆栈操作
XCHG:交换
IN、OUT:外设(端口)输入输出
XLAT:转换/换码/翻译 DS:[BX+AL]=>AL
LEA、LDS、LES:地址传送(计算)
PUSHF/POPF、LAHF/SAHF:标志传送
2)算术运算类指令指令(20条)
ADD、ADC、AAA、DAA: 加法
INC:加"1"
SUB、SBB、AAS、DAS: 减法
DEC:减"1"
CMP:比较;不修改被减数
NEG:求补指令;x=-x 等价于0-X
MUL、IMUL、AAM:乘法;
DIV、IDIV、AAD:除法
CBW、CWD、CDQ:累加器有符号扩展 linux CBTW、CWTD、CLTQ
MOVZX:无符号扩展
MOVSX:有符号扩展
3)逻辑运算指令(13条)-位操作指令
NOT: 求反
AND: 与、逻辑乘
OR: 或、逻辑加
XOR: 异或
TEST:位测试,同AND,不修改操作数
SHL、SHR、SAL、SAR:逻辑/算术移位
ROL、ROR、RCL、RCR:循环移位、带进位循环移位
4)串操作指令(10条) -数组操作指令
MOVSx: 串传送(拷贝) REP MOVS
CMPSx: 串比较 REPZ CMPS
SCASx: 串扫描(搜索某元素) REPNZ SCAS
LODSx: 取字符串(取数组某元素) LODS
STOSx: 存字符串(写数组某元素) (REP) STOS
注:串操作的四大准备: SI(源串地址)、DI(目的串地址)、CX(计数器)、DF(方向)
指令中的x可以取:B(1字节) W(2字节) D/L(4字节) Q(8字节)
5)控制转移类指令(28条)
CALL、RET: 子程序调用、返回
JMP:无条件转移指令
JZ/JNZ/JE/JNE、JC/JNC(CF位)、JO/JNO(OF位)、/JS/JNS、JP/JNP/JPE/JNPE:条件转移-按标志位转移指令
JA、JAE、JB、JBE:(above/below)条件转移-无符号数比较转移
JG、JGE、JL、JLE:(greater/lower)条件转移-有符号数比较转移
LOOP:循环 cx–, jnz L
LOOPE 、LOOPNE:条件循环
JCXZ:计数器CX==0转移
INT n:中断调用(BIOS/OS系统调用)
IRET:中断返回
INTO:溢出中断指令
几种转移(Jcc)
由于地址是一个32位或64位的数,在转移时如果直接用绝对地址放到指令中,会导致指令的二进制编码很长,因此在实际中往往采用跳转的目的地址与跳转指令的下一条指令的地址的偏差作为跳转的目标。
其中,短转移: 偏差在-128~127之间
判断单个标志位状态
⑴JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等)
⑵JS和JNS:利用符号标志SF,判断结果是正是负
⑶JO和JNO:溢出标志OF,判断结果是否产生溢出
⑷JP/JPE和JNP/JPO:奇偶标志PF,判断结果中最低字节“1”的个数是偶是奇
⑸JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF,判断结果是否进位或借位
无符号数的大小用高(Above)低(Below)表示
利用CF确定高低、利用ZF标志确定相等(Equal)
两数的高低分成4种关系:
⑴低于(不高于等于):JB(JNAE)
⑵不低于(高于等于):JNB(JAE)
⑶低于等于(不高于):JBE(JNA)
⑷不低于等于(高于):JNBE(JA )
有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)
两数的大小分成4种关系:
⑴小于(不大于等于):JL(JNGE)
⑵不小于(大于等于):JNL(JGE)
⑶小于等于(不大于):JLE(JNG)
⑷不小于等于(大于):JNLE(JG)
6)处理机控制指令(12条)
CLC: CF=0
CMC: CF取反
STC: CF=1
STD: DF=1
CLD: DF=0
STI: IF=1
CLI: IF=0
HLT:处理机暂停
WAIT:等待状态(FPU异常同步)
ESC:将数据传送给FPU(浮点指令)
LOCK:保证总线的控制
NOP:无操作 同XCHG AX,AX 占1个时钟,1个字节。用于延时、预留指令等
ICS汇编学习笔记——8086的指令系统相关推荐
- ICS汇编学习笔记——8086中的寄存器
程序执行两大部件:总线接口单元(BIU) 执行单元(EU) 指令和数据都在内存中 BIU与EU是并行执行的 BIU负责取指令和存取操作数 EU负责译码和指令的执行 8086的8个16位通用寄存器 AX ...
- ICS汇编学习笔记——操作数寻址方式
指令由操作码和操作数组成 操作数寻址方式有三大种: 立即数寻址:MOV EAX,12345678H 寄存器寻址:MOV EAX,EBX 存储器寻址:MOV EAX,DS:[20000H] 主要来看存储 ...
- 汇编学习笔记——汇编指令
目录 汇编指令 nop指令 mov.add.sub指令 adc.sbb指令 and.or指令 移位指令 逻辑左/右移指令 循环左/右移指令 算术左/右移指令 带进位循环左/右移指令 inc指令 pus ...
- 汇编学习笔记:对抗反汇编实验2019092801
汇编学习笔记:对抗反汇编实验2019092801 实验描述 实验环境 实验过程 实验结论 实验描述 使用相连的jz和jnz指令跳转到紧接着jnz指令的call指令的第二个字节.call指令实际上无效. ...
- 汇编学习笔记——伪指令
目录 伪指令 段定义 结束标记 段关联标记 数据定义 标号 offset指令 seg指令 地址标号 数据标号 代码分段 程序标识 多文件系统 字符输入 重复定义 注释 重复汇编伪指令 伪指令汇总 伪指 ...
- 寄存器---汇编学习笔记
第二章 寄存器 2.0 寄存器的绪论 一个典型的CPU由运算器.控制器.寄存器(CPU工作原理)等器件构成.内部总线实现 CPU 内部各个器件之间的联系,外部总线实现CPU和主板其他器件的联系. 在C ...
- GNU C内嵌汇编学习笔记
前文所述,只是针对汇编格式的整理,本文将使用coreboot项目代码对其进行实例化.以方便.清晰了解到如何在C语言里使用内嵌汇编的方法.同样地,网络上也有众多文章涉及到这方面,所以本文更多是归纳总结. ...
- 8086汇编学习笔记9-中断
中断信号可以来自CPU内部或外部. 一. 8086CPU内部中断信号有 (1) 除法错误 (2) 单步执行 (3) 执行into指令 (4) 执行int指令 1. 中断码 8086用一个字节来描述中断 ...
- 8086汇编学习笔记10-端口
8086CPU有两种地址空间,一是内存地址空间,二是端口地址空间,访问端口只能用in和out指令,分别用于从端口读数据和往端口写数据,CPU最多可以定位64KB个不同的端口,端口地址范围为0-6553 ...
最新文章
- 【jquery】文档操作
- 如何判断哪个商城系统好?
- 关于 form表单 嵌套问题的解决方案
- 数字雕刻中“节奏”的作用
- 小米路由器怎么连接无盘服务器,播放器+服务器的方法瞬间玩转小米路由方法图文介绍...
- sending data mysql_MySQL查询中Sending data占用大量时间的问题处理
- jsx就是高级点的HTML拼接,JSX与HTML的那些不同
- DVB开发之OTA升级
- c# 中代替指针的功能_C中的功能指针
- 利用词袋模型和TF-IDF实现Large Movie Review Dataset文本分类
- 300多个城市加入信用城市建设,信用时代已来!
- two day python基础知识
- 遗传算法解决作业调度c语言,应用遗传算法解决车间作业调度问题
- 金税盘显示frm000013_开票软件(金税盘版)2020年4月征期抄报方法/季报方法!
- 黑苹果HIDPI开启问题
- openSIPS(一):SIP简介
- 2017java考证_Sun认证Java程序员考试试题
- python12306买票_Python 使用 selenium 实现半自动购买12306火车票
- VC 用发音函数Beep()播放简谱音乐
- el-pagination分页自定义前往第几页样式(下拉框形式)
热门文章
- 边缘数据中心2024年市场规模将超过130亿美元
- 使用lucce分词怎么_深度学习时代,分词真的有必要吗
- IDE之EcliPse:EcliPse软件的简介、安装、入门、使用方法之详细攻略
- HighNewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具
- ML之回归预测:利用多个算法模型(LassoR、KernelRidgeR、ElasticNetR、GBR、LGBMR、XGBR)对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40
- ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)+预测新数据得分
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置
- dropout+Batch Normalization理解
- 2. Python3输入与输出