汇编知识点之80x86指令系统

指令系统主要考虑以下几个方面:
①对PSW影响  影响/不影响/不定义
②B/W  字节还是字操作
③寻址方式
④功能
⑤格式

一、数据传送指令

1.通用数据传送指令

(1) MOV DST,SRC    <–>  (DST)<–(SRC)
注:1.二者不能同时为段寄存器,不能同时为存储器寻址
  2.立即数不能直接送段寄存器
  3.目的操作数不允许用立即数方式,也不允许用CS寄存器。
  4.MOV指令不影响标志位

(2)     PUSH SRC       POP DST
16位指令:(SP) <-- (SP)–2      (DST) <-- ((SP)+1,(SP))
    ((SP)+1,(SP)) <-- (SRC)    (SP) <-- (SP)+2
注意:1.PUSH和POP只能作字或双字操作。
   2.不允许PUSH、POP指令使用立即数寻址方式。
   3.POP指令的目的为段寄存器时,不允许使用CS寄存器。
   4.PUSH和POP不影响标志位。

(3) XCHG OPR1,OPR2  -->   (OPR1) <–> (OPR2)
注意:1.两个操作数必须有一个在寄存器中。
   2.不允许使用段寄存器。
   3.可用除立即数外的任何寻址方式,不影响标志位。

2.累加器专用传送指令(限用EAX,AX,AL)

(1)IN AL,DX(字节) -->  (AL)<-- ((DX))
  IN AX,DX(字)  -->  (AX)<-- ((DX+1,(DX))
  IN EAX,DX(双字) -->  (EAX)<-- ((DX+3,(DX)+2,(DX)+1,(DX))

(2)OUT DX,AL   -->    ((DX)) <-- (AL)
 OUT DX,AX    -->    ((DX+1,(DX)) <--  (AX)

这里的端口号或DX的内容均为地址,而传送的是端口中的信息。
例:MOV DX,3FCH
  IN EAX,DX
  从端口03FCH送一个双字到EAX寄存器。
例:OUT 5,AL
  从AL寄存器输出一个字节到端口5。

(3)XLAT 换码指令
建立一个字节表格,表格的首地址提前存入BX寄存器,相对于表格首地址的位移量也提前存入AL寄存器中,表格的内容则是要换取的代码,该指令执行后就可在AL中得到转换后的代码。
   XLAT / XLAT OPR   -->   (AL) <-- ((BX)+(AL))
例: MOV AL,X
   LEA BX,TABLE
   XLAT TABLE

3.地址传送指令

LEA REG,SRC     -->     (REG) <-- SRC
将源操作数的有效地址送到指定寄存器中。
例: (假设存储单元地址为0100H,存储单元内容为3412H)
MOV AX,BUF      -->AX=3413H
MOV BX,OFFSET BUF -->BX=0100H
LEA  BX,BUF      -->BX=0100H
注意:1.不能使用段寄存器。
   2.可使用除立即数和寄存器外的任一种存储器寻址方式。
   3.不影响标志位。

4.类型转换指令

CBW                CWD
字节转换为字指令           字转换为双字指令
例如:MOV AL,80H
   CBW
   则AX=0FF80H

二、算术指令
1.加法指令

(1)ADD DST,SRC    -->   (DST)<–(SRC)+(DST)
(2)ADC DST,SRC --> (DST)<–(SRC)+(DST)+CF
  DX  AX    <-- SRC   ADD BX,AX
 +
  CX  BX    <-- DST    ADC CX,DX
————————————
  CX   BX
(3)INC OPR --> (OPR)<–(OPR)+1
   注意:需准确说明是字还是字节
例:INC AX (√)
  INC [BX] (×)
  INC BYTE  PTR [BX]  (√)
  INC WORT PTR [BX]  (√)

2.减法指令

(1)SUB DST,SRC -->  (DST)  <--  (SRC)+(DST)
(2)SBB DST,SRC -->   (DST)  <--  (SRC)-(DST)-CF
(3)DEC OPR   -->   (OPR) <--  (OPR)-1
(4)NEG OPR   -->   (OPR) <--    -(OPR) 求补指令
(5)CMP OPR1,OPR2  -->   (OPR1)-(OPR2)

3.乘法指令

(1)MUL 无符号数乘法
(字节)(AX)<–(AL)×(SRC)
(字) (DX,AX)<–(AX)×(SRC)
(2)IMUL 带符号数乘法
  8位SRC     16位SRC
  ×  AL     ×   AX
——————   ——————
 AH  AL     DX  AX
注意:(1) MUL  1234H(×)
     IMUL  DS  (×)
     IMUL  [BX] (×)
   (2)不能与立即数相乘
   (3)乘数寄存器:AL(AX)    乘积寄存器:AX(DX,AX)
   (4)乘法指令对除CF位和OF位以外的条件码位无定义。

4.除法指令

(1)DIV SRC
(2)IDIV SRC
   字节操作:(AL) <-- (AX)/(SRC)的商
        (AH) <-- (AX)/(SRC)的余数
    字操作:(AX) <-- (DX,AX)/(SRC)的商
        (DX) <-- (DX,AX)/(SRC)的余数
注意: AX(DX,AX)  <--  被除数寄存器
    AL(AX)    <--  商寄存器
    AH(DX)   <--  余数寄存器

三、逻辑指令
1.逻辑运算指令

(1)AND DST,SRC–>(DST)<–(DST)∧ (SRC)
(2)OR DST,SRC–>(DST)<–(DST)∨ (SRC)
(3)NOT OPR(OPR不能为立即数)
(4)XOR DST,SRC
(5)TEST OPR1,OPR2–>(OPR1)∧(OPR2)

2.移位指令

(1)SHL  OPR,CNT     逻辑左移指令
(2)SHR OPR,CNT    逻辑右移指令
(3)SAL  OPR,CNT    算术左移指令
(4)SAR OPR,CNT    算术右移指令
(5)ROL  OPR,CNT    循环左移指令
(6)ROR OPR,CNT    循环右移指令
(7)RCL  OPR,CNT    带进位循环左移指令
(8)RCR  OPR,CNT    带进位循环右移指令

 这里最高有效位右移,同时再用它自身的值填入,即如果原来是0,则仍为0,原来是1则仍为1。
在这里插入图片描述

算术移位指令用于带符号数运算,SAL用来乘以2,SAR用来除以2;
逻辑移位指令用于无符号数运算,SHL用来乘以2,SHR用来除以2;
有多少次,则乘多少次或除多少次。

注意:OPR:用除立即数以外的任何寻址方式。
   移位次数由CNT决定,可以为1或CL,若移位次数大于1,则可以在该移位指令前把移位次数置于CL寄存器中,而移位指令中的CNT写为CL即可。
例:MOV AX,62H  或  MOV AL,62H
  SHR  AX,1       MOV CL,4
               SHR AL,CL

3.串处理指令

①SI<–源串地址(DS)
②DI<–串长度地址(ES)(DI是相匹配字符的下一个地址)
③CX<–串长度
④设置DF=0 CLD,DF=1 STD
⑤串指令(REP)

(1)REP string primitive
其中string primitive可为MOVS (串传送)、LODS(从串取)、STOS(存入串)、INS(串输入)和OUTS(串输出)指令。
与REP重复串操作直到计数寄存器的内容为0为止。
例:LEA SI,X
  LEA DI,Y
  MOV CX,count
  CLD
  REP MOVSB
(2)REPE/REPZ string primitive当相等/为零时重复串操作
其中string primitive可为CMPS(串比较)或SCAS(串扫描)指令
(3) REPE/REPZ string primitive当不相等/不为零时重复串操作
其中string primitive可为CMPS(串比较)或SCAS(串扫描)指令

串比较指令:
CMPS SRC,DST
CMPSB、CMPSW、CMPSD
指令由源变址寄存器指向的数据段中的一个字节,字或双字与由目的变址寄存器所指向的附加段中的一个字节、字或双字相减。

串扫描指令:
SCAS DST
SCASB(字节)、SCASW(字)、SCASD(双字)
指令把AL、AX或EAX的内容与由目的变址寄存器指向的在附加段中的一个字节,字或双字进行比较。

串传送指令:
MOVS  ES:BYTE PTR[DI],DS:[SI]
  把源变址寄存器指向的数据段中的一个字(字节或双字)传送到由目的变址寄存器指向的附加段中的一个字(字节或双字)中去。
MOVSB(字节)、MOVSW(字)、MOVSD(双字)
  该指令与REP联用时,则可将数据段中的整串数据传送到附加段中。(源串必须在数据段中、目的串必须在附加段中)还须先把数据串的长度值送入计数寄存器中。

存入串指令:
STOS DST
把AL、AX或EAX的内容存入由目的变址寄存器指向的附加段的某单元中。
STOSB(字节)、STOSW(字)、STOSD(双字)
与REP联用时,可把AL、AX或EAX的内容存入一个长度为(Count Reg)的缓冲区中。
STOS指令在初始化某一缓冲区时很有用。

从串取指令:
LODS SRC
该指令把由源变址寄存器指向的数据段中某单元的内容送到AL、AX或EAX中
LODSB(字节)、LODSW(字)、LODSD(双字)
一般来说,该指令不和REP联用。有时缓冲区中的一串字符需要逐次取出来测试时,可采用本指令。

4.控制转移指令

(1)JMP 无条件转移指令
①JMP SHORT OPR     段内直接短转移(CS不变,IP变)
相对寻址方式  操作码 操作数  (IP=现行IP+8位位移量)
(2B机器码): XX   XX

②JMP NEAR PTR OPR  段内直接近转移(CS不变,IP变)
相对寻址方式 操作码  操作数 (IP=现行IP+16位位移量)
(3B机器码): XX  XX,XX

③JMP WORD PTR OPR  段内间接近转移(CS不变,IP变)
等价于JMP OPR(寄存器或存储器)
IP从操作数中获得

④JMP FAR PTR OPR   段内直接远转移(CS,IP变)
 直接寻址方式    操作码    IP     CS
  (5B机器码):  XX    XX XX,XX XX

⑤JMP DWORD PTR OPR  段间间接远转移(CS,IP变)
   OPR为存储器操作数。
   IP从操作数中获得前两字节的内容。
   CS从操作数中获得后两字节内容。

(2)条件转移指令
①JZ(JE)   OPR    结果为零(或相等)则转移
②JNZ(JNE) OPR   结果不为零(或不相等)则转移

③JS  OPR       结果为负 则转移
④JNS  OPR        结果为正则转移
⑤JO OPR        溢出则转移
⑥JNO OPR       不溢出则转移
⑦JP(JPE) OPR    奇偶位为1则转移
⑧JNP(JPO)  OPR   奇偶位为0则转移
⑨JB(JNAE、JC)  OPR 
 低于,或者不高于或等于,或进位为1则转移
⑩JNB(JNE、JNC) OPR
 不低于,或者高于或等于,或进位为零则转移

比较两个无符号数,并根据比较的结果转移:
①JB(JNAE、JC) OPR
 低于,或者不高于或等于,或进位为1则转移
②JNB(JNE、JNC) OPR
 不低于,或者高于或等于,或进位为零则转移
③JBE(JNA) OPR   低于或等于,或不高于则转移
④JNBE(JA) OPR   不低于或等于,或高于则转移

比较两个无符号数,并根据比较的结果转移:
①JL(JNGE) OPR 
 低于,或者不高于或等于,或进位为1则转移
②JNL(JGE) OPR
 不低于,或者高于或等于,或进位为零则转移
③JLE(JNG) OPR
 低于或等于,或不高于则转移
④JNLE(JG) OPR
 不低于或等于,或高于则转移

5.循环指令

LOOP OPR(CX中存放循环次数)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/90771.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ardupilot参数的mavlink实现

专业名词释义&#xff0c;参数缩写 gimbal 云台&#xff0c;万向接头 failsafe 故障保护 Collective&#xff1a; 总距 Swashplate &#xff1a; 倾斜盘 SW&#xff1a; Swashplate 倾斜盘 RSC&#xff1a; Rotor Speed Control RC&#xff1a; Radio Channel 无线通道 DDFP&am…

创建一个 React+Typescript 项目

接下来 我们来一起探索一下用TypeScript 来编写react 这也是一个非常好的趋势&#xff0c;目前也非常多人使用 那么 我们就先从创建项目开始 首先 我们先找一个 或者 之前创建一个目录 用来放我们的项目 然后 在这个目录下直接输入 例如 这里 我想创建一个叫 tsReApp 的项目…

docker部署springboot

基础知识 什么是docker 官网&#xff1a; Docker Docs: How to build, share, and run applications | Docker Documentation Docker 是一个基于go语言开发的开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到…

指针---进阶篇(二)

指针---进阶篇&#xff08;二&#xff09; 前言一、函数指针1.抛砖引玉2.如何判断函数指针&#xff1f;&#xff08;方法总结&#xff09; 二、函数指针数组1.什么是函数指针数组&#xff1f;2.讲解函数指针数组3.模拟计算器&#xff1a;讲解函数指针数组 三、指向函数指针数组…

组态王-实现语音播报告警点位信息及语音通知-语音播报器|声光报警器|工业报警方案|语音报警器|工业报警器|语音播报模块

需求简介 本文将介绍组态王如何对产生的告警实现声光语音播报&#xff0c;根据不同的告警点位&#xff0c;朗读具体的告警内容。 本文使用大连英仕博科技有限公司生产的博灵语音通知终端A4与北京亚控开发的组态王进行联动。 本文章分2部分讲解 第一部分为demo调用演示第二部…

调试 SELinux

semanage port -a -t http_port_t -p tcp 82 题目&#xff1a; 非标准端口 82 上运行的 WEB 服务器在提供内容时遇到问题。根据需要调试并解决问题&#xff0c; 并使其满足以下条件&#xff1a; 系统上的 web 服务器能够提供/var/www/html 中所有现在有的 html 文件&#xff…

无涯教程-Perl - getpwnam函数

描述 此函数基于EXPR指定的用户名,从/etc/passwd文件提取的列表context中返回字段列表。通常这样使用- ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) getpwnam($user); 在标量context中,返回数字用户ID。如果尝试访问整个/etc/passwd文件,则应使用getpwent…

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理 MapReduce简介 MapReduce是一种分布式计算模型&#xff0c;由Google提出&#xff0c;主要用于搜索领域&#xff0c;解决海量数据的计算问题。 MapReduce分成两个部分&#xff1a;Map&#xff08;映射&#xff09;和Reduce&#xff08;归纳&#xff09;。…

idea常见错误大全之:解决全局搜索失效+搜索条件失效(条件为空)+F8失灵

问题一&#xff1a;全局搜索快捷键ctrlshiftf 突然失灵了&#xff0c;键盘敲烂了 都没反应&#xff0c;这是为什么呢&#xff1f; 肯定不是idea本身的原因&#xff0c;那么就是其它外在因素影响到了idea的快捷键&#xff0c;那么其它的快捷键为什么没失效呢&#xff0c;原因只有…

IDEA简单拷贝一份新项目记录

IDEA简单拷贝项目记录 拷贝后改项目名&#xff0c;然后iml 配置文件改项目名&#xff0c;然后 .idea 中的compiler.xml 里面的name标签改项目名。 就可以了

ubuntu中安装python

最简单方便的是 apt 使用第三方的 ppa 源&#xff0c;然后直接 apt 安装 python3.9 安装 software-properties-common 获取add-apt-repository命令&#xff1a;apt install -y software-properties-common添加第三方的 ppa 源&#xff1a;add-apt-repository ppa:deadsnakes/p…

el-table分页后序号连续的两种方法

实现效果&#xff1a; 第一页排序到10&#xff0c;第二页的排序应从11开始 实现方法一&#xff1a; 在el-table的序号列中使用template定义 <el-table><el-table-columnmin-width"10%"label"序号"><template slot-scope"scope"…

平板选择什么电容笔比较好?ipad手写笔推荐品牌

在现在的生活上&#xff0c;有了iPad平板&#xff0c;一切都变得简单了许多&#xff0c;也让我们的学习以及工作都更加的便利。这其中&#xff0c;电容笔就起到了很大的作用&#xff0c;很多人都不知道&#xff0c;到底要买什么牌子的电容笔&#xff1f;哪些电容笔的性价比比较…

uniApp引入vant2

uniApp引入vant2 1、cnpm 下载&#xff1a;cnpm i vantlatest-v2 -S2、main.js文件引入 import Vant from ./node_modules/vant/lib/vant;Vue.use(Vant);3.app.vue中引入vant 样式文件 import /node_modules/vant/lib/index.css;

静态网页和动态网页区别

1&#xff0c;静态网页和动态网页有何区别 1) 更新和维护 静态网页内容一经发布到网站服务器上&#xff0c;无论是否有用户访问&#xff0c;这些网页内容都是保存在网站服务器上的。如果要修改网页的内容&#xff0c;就必须修改其源文件&#xff0c;然后重新上传到服务器上。…

软考高级架构师下篇-11信息系统架构设计理论与实践

目录 1. 考情分析2. 基本概念3. 信息系统架构风格与分类4. 信息系统常用架构模型5. 企业信息系统总体框架6. 信息系统架构设计方法7. 前文回顾1. 考情分析 下半年软考要改成机考了,已经有几个省份确认了机考信息,虽然解决了论文手写不好修改的问题,但是考试的难度肯定加大了…

mysql 索引 区分字符大小写

mysql 建立索引&#xff0c;特别是unique索引&#xff0c;是跟字符集、字符排序规则有关的。 对于utf8mb4_0900_ai_ci来说&#xff0c;0900代表Unicode 9.0的规范&#xff0c;ai表示accent insensitivity&#xff0c;也就是“不区分音调”&#xff0c;而ci表示case insensitiv…

Unity 实现2D地面挖洞!涂抹地形(碰撞部分,方法二)

文章目录 前言一、初始化虚拟点1.1点结构:1.2每个点有的状态:1.3生成点结构: 二、实例化边缘碰撞盒2.1计算生成边缘碰撞盒 三、涂抹部分3.1.虚拟点3.2.鼠标点3.3.内圈3.4.外圈 四、关于优化结语: 前言 老规矩先上效果图 继上一篇涂抹地形文章讲解发出后&#xff0c;有不少网友…

文献综述|NLP领域后门攻击、检测与防御

前言&#xff1a;在信息安全中后门攻击&#xff08;Backdoor Attack&#xff09;是指绕过安全控制而获取对程序或系统访问权的方法。而随着深度学习以及各种神经网络模型的广泛应用&#xff0c;神经网络中存在的后门问题也引起了研究人员的广泛关注。神经网络后门攻击就是使网络…

机器学习深度学习——循环神经网络RNN

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习—语言模型和数据集 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助…