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

news2024/12/25 22:09:12

指令系统主要考虑以下几个方面:
①对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.coloradmin.cn/o/878850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java练习3.快速查找

题目: 数组 arr[6,1,3,7,9,8,5,4,2],用快速排序进行升序排序. import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一轮:以0索引为基准数,确定基准数在数组正确的位置,* 比基准数小的放到左边,比基准数大的放在右边…

python实战-将mysql表结构导出到word文档

背景 将项目中用到的表的结构写入到word文档&#xff0c;格式如下&#xff1a; 解决思路 -- 注意这次最初的思路&#xff0c;操作简单但是重复的操作很多最后选择了python 使用sql将这些字段查出来&#xff0c;然后导出到excel或者excel xml&#xff0c;然后粘贴到word SELEC…

Mathematica 与 Matlab 常见复杂指令集汇编

Mathematica 常见指令汇编 Mathematica 常见指令 NDSolve 求解结果的保存 sol NDSolve[{y[x] x^2, y[0] 0, g[x] -y[x]^2, g[0] 1}, {y, g}, {x, 0, 1}]; numericSoly sol[[1, 1, 2]]; numericSolg sol[[1, 2, 2]]; data Table[{x, numericSoly[x], numericSolg[x]},…

Redis_缓存1_缓存类型

14.redis缓存 14.1简介 穿透型缓存&#xff1a; 缓存与后端数据交互在一起&#xff0c;对服务端的调用隐藏细节。如果从缓存中可以读到数据&#xff0c;就直接返回&#xff0c;如果读不到&#xff0c;就到数据库中去读取&#xff0c;从数据库中读到数据&#xff0c;也是先更…

基于鲲鹏平台Ceph深度性能调优

刘亮奇 架构师技术联盟 2021-04-12 07:50 摘自&#xff1a; https://mp.weixin.qq.com/s/o9HH-8TF0DbMqHrvsFh1NA 随着 IOT、大数据、移动互联等应用的暴涨&#xff0c;产生的数据也越来越多&#xff0c;整个存储市场总量也逐年增长&#xff0c;预计到 2021 年分布式存储会占到…

文本分类实战-NLP

数据集及任务分析 项目主题&#xff1a;新闻的主题分类&#xff0c;10分类任务 一般对于NLP项目来说的话需要进行数据预处理的&#xff0c;但是由于本项目的数据是经过处理过的&#xff0c;所以就不需要进行数据预处理了&#xff0c;但是数据预处理对NLP项目是重中之重的。 TH…

【力扣周赛】第 358 场周赛

文章目录 竞赛链接Q1&#xff1a;6939. 数组中的最大数对和竞赛时代码—— O ( n 2 ) O(n^2) O(n2)解法2——一次遍历 O ( n ) O(n) O(n)&#xff0c;维护最大数位为 i 的元素的最大值 Q2&#xff1a;6914. 翻倍以链表形式表示的数字竞赛时代码——存入列表再计算解法2——只有…

批量提取文件名到excel,详细的提取步骤

如何批量提取文件名到excel&#xff1f;我们的电脑中可能存储着数量非常多的电子文件&#xff0c;现在需要快速将这些文件的名称全部提取到Excel中。虽然少量数据可以通过复制粘贴的方式轻松完成&#xff0c;但是对于上万个数据而言&#xff0c;复制粘贴都是行不通的&#xff0…

【考研数学】高等数学第三模块——积分学 | Part II 定积分(反常积分及定积分应用)

文章目录 前言三、广义积分3.1 敛散性概念&#xff08;一&#xff09;积分区间为无限的广义积分&#xff08;二&#xff09;积分区间有限但存在无穷间断点 3.2 敛散性判别法 四、定积分应用写在最后 前言 承接前文&#xff0c;梳理完定积分的定义及性质后&#xff0c;我们进入…

陪诊小程序开发|陪诊陪护小程序让看病不再难

陪诊小程序通过与医疗机构的合作&#xff0c;整合了医疗资源&#xff0c;让用户能够更加方便地获得专业医疗服务。用户不再需要面对繁琐的挂号排队&#xff0c;只需通过小程序预约服务&#xff0c;便能够享受到合适的医疗资源。这使得用户的就医过程变得简单高效&#xff0c;并…

vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />当表达式为true的时候&#…

使用 Python 在 NLP 中进行文本预处理

一、说明 自然语言处理 &#xff08;NLP&#xff09; 是人工智能 &#xff08;AI&#xff09; 和计算语言学的一个子领域&#xff0c;专注于使计算机能够理解、解释和生成人类语言。它涉及计算机和自然语言之间的交互&#xff0c;允许机器以对人类有意义和有用的方式处理、分析…

Debian 10驱动Broadcom 无线网卡

用lspci命令查询无线网卡品牌&#xff1a; 运行下面代码后&#xff0c;重启即可。 apt-get install linux-image-$(uname -r|sed s,[^-]*-[^-]*-,,) linux-headers-$(uname -r|sed s,[^-]*-[^-]*-,,) broadcom-sta-dkms

Springboot MultipartFile文件上传与下载

yml文件配置是否可以上传及上传附件大小 servlet:multipart:# 允许文件上传enabled: true# 单个文件大小max-file-size: 20MB# 设置总上传的文件大小max-request-size: 50MB /*** param files* param request* Description 上传文件* Throws* Return java.util.List* Date 202…

Dynamics 365 视图

1 视图分类 如图,视图分为查找视图、关联视图、公共视图三类。其中查找视图又可分为查找视图、高级查找视图、快速查找视图。 查找视图从名称来看,就是查找记录使用的,相当于预置了一些过滤条件,且控制查询的结果展示的列。只不过使用的位置不同,具体如下。 公共视图是最…

实践-CNN卷积层

实践-CNN卷积层 1 卷积层构造2 整体流程3 BatchNormalization效果4 参数对比5 测试效果 1 卷积层构造 2 整体流程 根据网络结构来写就可以了。 池化 拉平 训练一个网络需要2-3天的时间。用经典网络来&#xff0c;一些细节没有必要去扣。 损失函数&#xff1a; fit模型&…

量子计算的突破:从理论到实践

章节一&#xff1a;引言 随着信息时代的到来&#xff0c;计算科学与技术也在不断迎来新的突破与革新。其中&#xff0c;量子计算作为一项引人瞩目的前沿技术&#xff0c;正逐渐从理论走向实践。量子计算以其在处理复杂问题上的巨大潜力&#xff0c;吸引着全球科学家和工程师的关…

需求调研前需要做哪些准备?

大家好&#xff0c;我是沐尘而生&#xff0c;今天让我和大家一起走进&#xff0c;产品经理实战百问百答&#xff0c;从问题入手&#xff0c;一步一个脚印&#xff0c;习惯产品经理岗位。 我将从需求调研的角度出发&#xff0c;为大家详细介绍一下在开始调研前需要做哪些准备工作…

项目难点:解决IOS调用起软键盘之后页面样式布局错乱问题

需求背景 &#xff1a; 开发了一个问卷系统重构项目&#xff0c;刚开始开发的为 PC 端&#xff0c;其中最头疼的一点无非就是 IE 浏览器的兼容适配性问题&#xff1b; 再之后项目经理要求开发移动端&#xff0c;简单的说就是写 H5 页面&#xff0c;到时候会内嵌在 App 应用或办…