微机原理:汇编指令集——调用传送指令、算术运算指令、转移类指令(详解)

news2024/11/15 6:50:41

文章目录

  • 一、通用传送类指令
    • 1、数据传送指令
    • 2、堆栈操作指令
  • 二、算术运算指令
    • 1、总图
    • 2、加减运算指令
      • 2.1 例子
      • 2.2 INC/DEC指令
    • 3、比较指令
  • 三、转移类指令
    • 1、无条件转移
    • 2、有条件转移
      • 2.1 无符号数条件转移指令
      • 2.2 有符号数条件转移指令
      • 2.3 例题一
      • 2.4 循环控制指令(循环一定要用间址)
      • 2.5 例题二
    • 2.6 子程序调用与返回类指令
      • 2.6.1汇编语言的过程定义语句
      • 2.6.2 段内调用CALL指令
      • 2.6.3 段间调用CALL指令
      • 2.6.4 段内/段间返回RET指令

一、通用传送类指令

前言:传送类指令执行后,不影响状态标志,主要包括通用传送类指令堆栈操作指令

1、数据传送指令

格式: MOV 目标操作数,源操作数
功能:源操作数----->目标操作数,源不变
说明

  • 立即数不能作为传送的目标。代码寄存器CS不能作为传送的目标。指令寄存器IP不能作为目标操作数和源操作数。
  • 源、目操作数,不能同时为内存操作数。源、目操作数不能同时为段寄存器(CS\DS\SS\ES)。需要借助一个通用寄存器作为中间值。
  • 源、目操作数要等长,即为两者类型属性要一样。
  • 当目标操作数为间址、变址、基址、基址+变址的内存操作数时,而源操作数为单字节/双字节立即数,即目标操作数必须要用PTR说明。

例子
(1)

在这里插入图片描述
(2)
在这里插入图片描述
(3)
在这里插入图片描述
(4)
在这里插入图片描述

2、堆栈操作指令

(1)堆栈:计算机中的堆栈是人为设置的一片连续内存区,用来存放数据,所存数据按先进后出规律存取。

  • 栈顶:栈区的低地址
  • 栈底:栈区的高地址

(2)
堆栈段寄存器SS:存放堆栈段段基址
堆栈指针ESP(SP):存放栈顶单元的偏移地址
SS、ESP(SP)初值,由程序员赋值或DOS系统自动赋值
在这里插入图片描述

注意:堆栈指针SP的初值决定了堆栈的大小,SP始终指向堆栈的顶部,即始终指向最后压入堆栈的信息所在的单元

(3)进出栈指令
进栈指令格式:PUSH 源操作数
出栈指令格式:POP 目标操作数

数据进栈不改变原值

注意:进栈时,SP向上移动,在堆栈区内,上面区域为低地址,因此SP要减去进栈的单元个数,相反出栈时,SP向下沉,SP需要加上出栈的个数。

二、算术运算指令

1、总图

在这里插入图片描述

2、加减运算指令

二进制加法:ADD 目标操作数,源操作数
二进制减法:SUB 目标操作数,源操作数
二进制加进位:ADC 目标操作数,源操作数
二进制减进位:SBB 目标操作数,源操作数


功能
在这里插入图片描述
注意

  • 此四种操作都会影响A\C\O\P\S\Z标志
  • 源、目操作数的属性长度要一致

2.1 例子

在这里插入图片描述
在这里插入图片描述

两种解法:

  1. 解一:用直接寻址,双字加法(只需三条指令)
MOV EAX FIRST
ADD EAX,SECOND
MOV SUM,EAX

2.解二:将后四位(十六进制)取出,进行相加,若有进位存放在C中,再将前四位就行相加,用ADC指令相加,因为这个指令会加上前面的进位位。

MOV AX,WORD PTR FIRST
ADD AX,WORD PTR SECOND
MOV WORD PTR SUM,AX
MOV AX,WORD PTR FIRST+2
ADC AX,WORD PTR SECOND+2
MOV WORD PTR SUM+2,AX

在这里插入图片描述

2.2 INC/DEC指令

二进制加1:INC 目标操作数
二进制减1:DEC 目标操作数
功能:相当于c++里面的自加自减功能
在这里插入图片描述
注意:对于非直接寻址的内存操作数,需要用PTR说明属性
例子:
在这里插入图片描述

3、比较指令

定义格式:CMP 目标操作数,源操作数
功能:将目标操作数减去源操作数,目标操作数不变,依据减法运算的情况设定六个状态标志。该指令,一般后面跟着条件转移指令。

三、转移类指令

大纲:

  • 按找转移条件分:无条件转移和有条件转移
  • 按照范围分:段内转移和段间转移
  • 按照获取转移地址的方法分:直接转移和间接转移

1、无条件转移

需要事先将转移的目标指令的段基址和偏移地址放入内存单元的高位单元和地位单元中,在执行JMP指令时,放入操作数的段基址偏移地址将被分别写入CS寄存器和IP寄存器中。

2、有条件转移

在下列代码段里面冒号表示注释

格式:操作码助记符 转移地址符号
应用
CMP 目,源
条件指令
转移范围:转移到代码段任何位置
说明:操作码助记符隐含了转移的条件

JZ ;若A==B,则转移
JNZ ;若A!=B,则转移 

2.1 无符号数条件转移指令

CMP X,Y
JA ;若 X > Y,则转移
JNA ;若 X <= Y,则转移
JC ;若X < Y,则转移
JNC ;若X >= Y,则转移

2.2 有符号数条件转移指令

CMP X,Y
JG ;若 X > Y,则转移
JGE ;X >= Y,则转移
JC ;若X < Y,则转移
JNC ;若 X <= Y,则转移

2.3 例题一

在这里插入图片描述

:箭头处,大家可能会产生疑惑,JNC和JNG不是一个表示无符号数,一个表示有符号数吗?为什么两个可以同时成立?

答:AL表示八位二进制,即为2的八次方
无符号数值范围:0~255
有符号数值范围:-128~127

因此,这么来看,AL即在无符号中,又在有符号中,所以可以两种同时成立,若题中有明确规定,那就只能是一种情况。

2.4 循环控制指令(循环一定要用间址)

在这里插入图片描述
上述是所有循环控制语句,而我在这里只讲LOOP这一种。

格式如下:

MOV CX,5 ;这里的数字5,表示循环5次
AGAIN: ... ;AGAIN表示每次循环的其实头部
.
.
LOOP AGAIN ;循环到CX==0为止,跳出循环

2.5 例题二

在这里插入图片描述
核心代码编写:

MOV BX,OFFSET SCORE
MOV CX,40
MOV DL,0
AGA:CMP BYPE PTR [BX],60
    JC NEXT
    INC DL
    NEXT:INC BX
LOOP AGA 
MOV OK,DL

2.6 子程序调用与返回类指令

CALL <调用地址>
RET

子程序:能完成一定功能的相对独立的程序段
在这里插入图片描述
调用:调用子程序,即无条件转到子程序的第一条指令
返回:返回断点,即返回到CALL的后继指令

2.6.1汇编语言的过程定义语句

格式:

过程名 PROC 属性
       子程序实体
       RET
过程名 ENDP

在这里插入图片描述

2.6.2 段内调用CALL指令

何为段内?主程序,与子程序在同一代码段里。

  • 段内直接调用:CALL 过程名
  • 段内间接调用:
    CALL 寄存器操作数
    CALL 内存操作数
    功能:
    (1)断点偏移地址—>堆栈
    详细解释:
  • 调整堆栈指针(SP)-2–>SP,为了扩大空间,便于后边的工作
  • 将CALL指令的下一条指令的地址,即为断点的偏移地址压入堆栈保存
  • 将子程序的入口的偏移地址(子程序的第一指令的偏移地址)—>IP,同时CS保持不变

2.6.3 段间调用CALL指令

  • 段间直接调用 CALL 过程名
  • 段间直接调用 CALL 内存操作数

功能:
(SP)-4–>SP
(SP)+1,(SP)–>(IP)
(SP)+3,(SP)+2<----CS

2.6.4 段内/段间返回RET指令

  • 段内RET指令,从栈顶弹出2字节—>IP
    段间RET指令,从栈顶弹出4字节—>IP,CS
  • RET N指令,首先完成RET功能,再将堆栈指针再下调N个字节

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

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

相关文章

【golang】Go中的切片slice和操作笔记,垃圾回收机制,重组 reslice ,复制和追加,内存结构

切片 文章目录 切片将切片传递给函数make() 创建一个切片new() 和 make()的区别多维切片bytes包for-range切片重组 reslice切片的复制和追加 字符串、数组和切片的应用获取字符串的某一部分字符串和切片的内存结构修改字符串中的某个字符字节数组对比函数搜索及排序切片和数组a…

非侵入式负荷检测与分解:电力数据挖掘新视角

电力数据挖掘 概述案例背景分析目标分析过程数据准备数据探索缺失值处理 属性构造设备数据周波数据模型训练 性能度量推荐阅读 主页传送门&#xff1a;&#x1f4c0; 传送 概述 摘要&#xff1a;本案例将根据已收集到的电力数据&#xff0c;深度挖掘各电力设备的电流、电压和功…

全网最全面最深入 剖析华为“五看三定”战略神器中的“五看”(即市场洞察)(长文干货,建议收藏)

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; &#xff08;本文摘自谢宁专著《华为战略管理法&#xff1a;DSTE实战体系》&#xff0c;欢迎购买&#xff09; 兵法有云&#xff1a;胜兵先胜而后求战&#xff0c;败兵先战而后求胜&#xff0c;所谓胜兵先…

对被测软件来说,需要多少测试就足够了?

相信每位测试人员或者测试团队都曾遇到这样的问题“需要多少测试才能确保软件成功发布”。这个答案很难回答&#xff0c;在很大程度上&#xff0c;这取决于被测软件的类型、用途和目标受众。所有的测试人员都希望用一种比测试手电筒的应用程序更严格的方法来测试其他软件。然而…

JavaScript异步编程:提升性能与用户体验

目录 什么是异步编程&#xff1f; 回调函数 Promise Async/Await 总结 在Web开发中&#xff0c;处理耗时操作是一项重要的任务。如果我们在执行这些操作时阻塞了主线程&#xff0c;会导致页面失去响应&#xff0c;用户体验下降。JavaScript异步编程则可以解决这个问题&…

睿趣科技:抖音开网店多久回本

随着互联网的发展&#xff0c;越来越多的人选择在抖音上开设网店。然而&#xff0c;开店容易&#xff0c;经营难。许多人关心的问题是&#xff1a;抖音开网店多久能回本? 首先&#xff0c;我们需要明确一点&#xff0c;抖音开网店的回本时间并不是固定的&#xff0c;它受到许多…

经典卷积神经网络 - NIN

网络中的网络&#xff0c;NIN。 AlexNet和VGG都是先由卷积层构成的模块充分抽取空间特征&#xff0c;再由全连接层构成的模块来输出分类结果。但是其中的全连接层的参数量过于巨大&#xff0c;因此NiN提出用1*1卷积代替全连接层&#xff0c;串联多个由卷积层和“全连接”层构成…

C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2

下面介绍四道题目和解法 1.杨氏矩阵 算法&#xff1a;右上角计算 题目&#xff1a;有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N…

react笔记基础部分(组件生命周期路由)

注意点&#xff1a; class是一个关键字&#xff0c; 类。 所以react 写class, 用classname &#xff0c;会自动编译替换class 点击方法&#xff1a; <button onClick {this.sendData}>给父元素传值</button>常用的插件&#xff1a; 需要引入才能使用的&#xf…

ubuntu执行普通用户或root用户执行apt-get update时报错Couldn‘t create temporary file /tmp/...

apt-get update无法更新&#xff0c;报错&#xff1a; Couldnt create temporary file /tmp/apt.conf.GSzv74 for passing config to&#xff0c;&#xff0c;&#xff0c; 这是由于/tmp目录没有权限导致的&#xff0c;解决办法&#xff1a; chmod 777 /tmp

额定电压输出电流:电源性能测试指标之一

额定电压和额定电流是电源设计生产时需要考虑的两个重要参数&#xff0c;额定电压是电源输出的电压标准&#xff0c;额定电流是电源能够提供的最大电流容量。这两个参数是评估电源性能的重要指标之一&#xff0c;指导着电气设备的正常工作运行。 额定电压输出电流测试方法 额定…

上门家政维修多城市代理多商户师傅入驻小程序开源版开发

上门家政维修多城市代理多商户师傅入驻小程序开源版开发 用户登录/注册&#xff1a;用户可以使用手机号或第三方账号登录或注册小程序。 服务分类&#xff1a;在主页上显示不同的服务分类&#xff0c;例如电器维修、家具拆装、管道疏通、清洁保洁等。 城市选择&#xff1a;用…

C++反转链表递归

文章目录 题目描述解题思路代码复杂度分析 题目描述 LCR 024. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 解题思路 这里我们采用递归的思路来解决首先我们分为两个视角来查看…

竞赛选题 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…

超好用的数据可视化工具推荐,小白也适用!

Excel、Tableau……可以做数据可视化的工具不少&#xff0c;但简单、好用又高效&#xff0c;甚至连无SQL基础的小白也能轻松使用的就真没几个。奥威BI数据可视化工具是少有的操作难度低、成本支出低、灵活自助分析能力强的BI工具。 1、操作难度低 奥威BI数据可视化工具的操作…

图片放大镜效果

安装&#xff1a; vueuse 插件 npm i vueuse/core 搜索&#xff1a; useMouseInElement 方法 <template><div ref"target"><h1>Hello world</h1></div> </template><script> import { ref } from vue import { useM…

图纸管理制度《三》

一、目的和使用范围 为了更好的规范设备及设计图纸的保管、发放和使用&#xff0c;根据业主仅提供四套图纸的实际情况&#xff0c;本着施工图纸服务施工的第一原则&#xff0c;合理利用有限的图纸资源&#xff0c;将《管理制度汇编》中的图纸管理制度进行细化&#xff0c;制定本…

视频与png图片批量分类技巧:轻松管理文件

在我们的日常工作中&#xff0c;经常会遇到需要处理大量文件的情况&#xff0c;其中就包括视频和png图片。这些文件数量繁多&#xff0c;如果一个个手动分类&#xff0c;不仅耗时而且容易出错。因此&#xff0c;掌握批量分类技巧成为了高效管理文件的关键。本文将为您运用云炫文…

地面文物古迹保护方案,用科技为文物古迹撑起“智慧伞”

一、行业背景 当前&#xff0c;文物保护单位的安防系统现状存在各种管理弊端&#xff0c;安防系统没有统一的平台&#xff0c;系统功能不足、建设标准不同&#xff0c;产品和技术多样&#xff0c;导致各系统独立&#xff0c;无法联动&#xff0c;形成了“信息孤岛”。地面文物…

64从零开始学Java之关于日期时间的新特性

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了Java里的格式化问题&#xff0c;这样我们就可以个性化设…