16ASM 数据传送指令 算数运算指令

目录

指令种类

数据传送指令

通用传送指令

堆栈操作指令

标志寄存器进出堆栈指令

地址传送指令

算术运算指令

加法减法指令

乘法除法指令


指令种类

数据传送类指令

  • 通用数据传送指令:MOV ,XCHG,XLAT
  • 堆栈传送指令:PUSH,POP,LEA

算术运算指令:负责算术运算,影响标志位

位操作类指令

控制转移类指令

处理器控制类指令

数据传送指令

MOV,XCHG,XLAT

传送类指令不影响标志位,除了标志位传送指令外。

通用传送指令

mov指令

把一个字节或字的操作数从源地址传送至目的地址。注意:不存在存储器向存储器的传送指令。

举例:mov ax,es ;ax←es    mov  ds,ax ;ds←ax←es    mov word ptr [si+2],0bh

注意: 两个操作数类型要一致.操作宽度

不允许段寄存器向段寄存器传送

xchg指令

把两个地方的数据进行互换。不存在存储器向存储器的传送指令。

XCHG reg,reg/mem; reg <->reg/mem

应用场景1.寄存器与寄存器之间对换数据 2.寄存器与存储器之间对换数据

效率:XCHG > MOV :因为XCHG使用了内部暂存器。

示例:xchg ax,bx

xlat指令

将BX指定的缓冲区中、AL指定的位偏移的一个字节数据取出赋给AL。

XLAT ; AL <- DS:[BX+AL] //注意:无显式操作数,隐式操作数。

应用:数组遍历。以BX作为数组首地址,AL作为数组下标,访问的值存储给AL。AL = BX[AL];

作用宽度:8位(字节),固定的,不可改变。也叫累加器专用指令。

堆栈操作指令

push:将标志寄存器的内容压入堆栈,同时栈顶指针SP减2 模拟:sub sp , 2; mov [sp] , reg

pop:将栈顶单元内容送到标志寄存器,同时栈顶指针SP 加 2 模拟:movreg, [sp];add sp , 2

应用:1. 临时存放数据,2. 传递参数,3. 保存所有寄存器环境

注意:1. 低地址方向为栈出口方向,高地址方向为栈底方向。

           2. 操作单位是字16位

标志寄存器进出堆栈指令

标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作。

低八位传送:LAHF和SAHF

LAHF指令将标志寄存器的低字节送寄存器AH

LAHF;AH←FLAGS的低字节

SF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意

SAHF将AH寄存器内容送FLAGS的低字节

SAHF;FLAGS的低字节←AH

用AH的第7/6/4/2/0位相应设置SF/ZF/AF/ PF/CF标志

16位传送:PUSHF和POPF

pushf:将标志寄存器的内容压入堆栈,同时栈顶指针SP减2

popf:将栈顶单元内容送到标志寄存器,同时栈顶指针SP加2

问题:修改标志寄存器中TF标志位的方法?

思路:将标志寄存器压入栈中,然后弹出栈顶内容(标志寄存器的内容)。修改该值,然后将修改后的值压入栈,通过POPF,将修改后的值弹出到标志寄存器。

地址传送指令

将存储器单元的逻辑地址送至指定的寄存器。

  • 有效地址传送指令 LEA
  • 指针传送指令 LDS 和 LES

作用:

  • 取全局变量的地址
  • 代替加法指令表,如:多个寄存器做加法运算。【32位没有EA限制,可大大的替换】

lea指令:将存储器操作数的有效地址传送至指定的16位寄存器中

举例: LEA bx ,[bx + si] //相当于bx = bx+si。

lds指令:LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器

举例:LDS r16,mem;r16←mem,;DS←mem+2

les指令:LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器

LES r16,mem;r16←mem,;ES←mem+2

算术运算指令

标志一览

进位标志反映无符号整数运算结果是否超出范围有进位,加上进位或借位后运算结果仍然正确

溢出标志反映有符号整数运算结果是否超出范围有溢出,运算结果已经不正确

加法减法指令

add指令:

adc指令

sub指令

sbb指令

inc指令:对操作数加1(增量)再将结果返回原处。不影响进位CF标志,影响其他状态标志位

dec指令:对操作数减1(减量)再将结果返回原处。不影响进位CF标志,影响其他状态标志位

neg ax ;如果ax = 0,则CF标志位 = 0;若ax != 0, 则CF = 1

乘法除法指令

计算机的乘法指令分为无符号乘法指令和有符号乘法指令。

它们的唯一区别就在于: 数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。

功能:指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。

无符号乘法

mov ax, 5      ; 将 5 存储到累加器寄存器 ax 中
mov bx, 10     ; 将 10 存储到通用寄存器 bx 中
mul bx         ; 用 bx 中的值乘以 ax 中的值,结果存储在寄存器组中

位数

隐含的被乘数

乘积的存放位置

举例

8位

AL

AX

MUL BL

16位

AX

DX-AX

MUL BX

32位

EAX

EDX-EAX

MUL ECX

影响标志位:CF 和 OF ; 利用CF和OF判断成绩的高位是否有效。

两种标志位情况:

  • 要么CF = OF = 1;
    • 8位:说明结果超过了8位
    • 16位:说明结果超过了16位
  • 要么CF = OF = 0
    • 8位:都能存下
    • 16位:都能存下

有符号乘法

mov eax, 5     ; 将 5 存储到累加器寄存器 eax 中
mov ebx, -10   ; 将 -10 存储到通用寄存器 ebx 中
imul ebx      ; 用 ebx 中的值与 eax 中的值相乘,结果存储在寄存器组中

影响的标志位:

两种标志位情况:

  • 如果成绩的高位是低位的符号扩展,则CF = OF = 0,否则CF = OF = 1

其他标志位:没有定义,不可预测的

无符号除法

除法也分为无符号除法和有符号除法。

除法指令的被除数是隐含操作数,除数在指令中显式地写出来。CPU会根据除数是8位、16位,还是32位,来自动选用被除数AX、DX-AX,还是EDX-EAX。

除数位数

隐含的被除数

余数

举例

8位

AX

AL

AH

DIV BH

16位

DX-AX

AX

DX

DIV BX

32位

EDX-EAX

EAX

EDX

DIV ECX

指令的格式:DIV Reg/Mem指令的功能是用显式操作数去除隐含操作数(都作为无符号数)。

影响的标志位:指令对标志位的影响无定义。

有符号除法

指令的格式:DIV Reg/Mem指令的功能是用显式操作数去除隐含操作数(都作为无符号数)。

影响的标志位:指令对标志位的影响无定义。

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

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

相关文章

嵌入式开发按怎样的路线学习较好?

嵌入式开发按怎样的路线学习较好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「嵌入式从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&…

甄知燕千云与汉得智能制造深度集成,革新智能化提单服务

当今&#xff0c;以数字技术为代表的新一轮科技革命和产业变革加速推进&#xff0c;全球正迈向数字化新时代。在数字化转型浪潮下&#xff0c;企业必须主动顺应时代潮流&#xff0c;抓住机遇&#xff0c;迎接挑战。在数字技术和解决方案的驱动下&#xff0c;推动企业提升效率、…

超级实用的防止商品超卖的 7 种实现方式,非常好用!

高并发场景在现场的日常工作中很常见&#xff0c;特别是在互联网公司中&#xff0c;这篇文章就来通过秒杀商品来模拟高并发的场景。 本文环境&#xff1a; SpringBoot 2.5.7 MySQL 8.0 X MybatisPlus Swagger2.9.2 模拟工具&#xff1a; Jmeter 模拟场景&#xff1a; 减库…

【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇

​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 HarmonyOS 4.0 技术介绍&#xff1a; HarmonyOS三大特征&#xff1a; 1.实现硬件互助&#…

离散型随机变量的分布律(也称概率质量函数:probability mass function, PMF)

设是一个离散型随机变量&#xff0c;可能的取值为&#xff0c;取各个值的概率记为&#xff1a; &#xff08;1&#xff09; 其中 并且&#xff0c; 公式&#xff08;1&#xff09;就称为离散型随机变量的分布律&#xff0c;也称概率质量函数&#xff1a;probability ma…

【带头学C++】----- 九、类和对象 ---- 9.8 动态对象创建

目录 9.8 动态对象创建 9.8.1 动态创建对象基础概念 9.8.2 C语言创建动态对象的 9.8.3 new创建动态对象 9.8.4 delete释放动态对象 9.8.5 动态对象数组 9.8 动态对象创建 9.8.1 动态创建对象基础概念 在创建数组时&#xff0c;我们通常需要预先指定数组的长度&#xff0…

Unity中的ShaderToy

文章目录 前言一、ShaderToy网站二、ShaderToy基本框架1、我们可以在ShaderToy网站中&#xff0c;这样看用到的GLSL文档2、void mainImage 是我们的程序入口&#xff0c;类似于片断着色器3、fragColor作为输出变量&#xff0c;为屏幕每一像素的颜色&#xff0c;alpha一般赋值为…

最简单的pixel刷机和安装面具、lsposed

一 下载手机对应的系统 1&#xff0c;手机usb连接然后重启进入Fastboot模式&#xff1a;adb reboot bootloader2&#xff0c;找到你下载的系统&#xff0c;Windows 系统 直接运行 flash-all.bat上图 &#xff1a;左边就是安卓11和12的系统&#xff0c;右边是对应的手机型号 下…

Java Web开发中的Servlet

目录 1. Servlet 的作用和优势 2. Servlet 的工作原理 3. Servlet 的生命周期 4. Servlet 在现代 Web 开发中的重要性 结论 当谈及 Java Web 开发&#xff0c;Servlets 是不可或缺的组件之一。Servlet 是在服务器端处理 HTTP 请求和响应的 Java 类。它们允许开发人员编写动…

牛客网(二叉树)

https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking 这个题目和leetcode比起来就是有一些不一样&#xff0c;需要我们自己来写接口函数&#xff0c;所以…

Nacos配置管理-微服务配置拉取

yaml已配置内容 目录 一、配置获取步骤 二、统一配置管理步骤 三、Nacos管理配置的步骤总结 一、配置获取步骤 二、统一配置管理步骤 1、引入Nacos的配置管理客户端依赖: <!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud&l…

python+gdal地理坐标转投影坐标

1 前言 地理坐标系&#xff0c;是使用三维球面来定义地球表面位置&#xff0c;以实现通过经纬度对地球表面点位引用的坐标系。 地理坐标系经过地图投影操作后就变成了投影坐标系。而地图投影是按照一定的数学法则将地球椭球面上点的经维度坐标转换到平面上的直角坐标。 2 流程…