汇编语言程序设计 第2章:8086指令系统简介及寻址方式

文章目录

  • 1. 指针的分类及格式
    • 1.1 指令的分类
    • 1.2 指令格式
  • 2. 寻址方式
    • MOV指令简介
    • 2.1 立即寻址
    • 2.2 寄存器寻址
    • 2.3 直接寻址
    • 2.4 寄存器间接寻址
    • 2.5 寄存器相对寻址
    • 2.6 基址变址寻址
    • 2.7 相对基址变址寻址
  • 3. 数据传送指令
    • 3.1 通用数据传送指令
    • 3.2 地址传送指令(LEA、LDS、LES)
    • 3.3 堆栈操作指令(PUSH、POP)
    • 3.4 标志寄存器传送指令(LAHF、SAHF、PUSHF、POPF)
  • 总结

1. 指针的分类及格式

1.1 指令的分类

汇编语言中所使用的指令分成两类:

  1. 硬指令:与二进制的机器指令一一对应,由计算机来执行。硬指令(简称指令)分成6类。
    数据传送指令、算术运算指令、位操作指令、串处理指令、控制转移指令、处理机控制指令
  2. 伪指令:指一些固定格式的约定符号,用于只是汇编程序如何工作,不产生任何目标代码。

1.2 指令格式

8088/8086汇编语言的硬指令和伪指令的格式基本相同。

硬指令格式
[标号:] 操作符 [目的操作数] [,源操作数] [;注释]
伪指令格式
[名字] 定义符 [操作数] [;注释]

标号:指出了该条硬指令的起始地址,程序员可通过标号来引用所标识的硬指令。
名字:在伪指令中用来定义变量名、过程名等。
操作符和定义符:用于规定硬指令的操作性质和伪指令的伪操作功能。
注释:用来说明一段程序、一条或几条指令的功能,以便阅读。

标号和名字统称为标识符。关于标识符的规定:
长度不能超过31个字符,组成该字符串的字符可以是字母(A~ Z或a ~ z)、数字(0~9)、特殊符号(? . @ _ $)。其中数字不能做第一个字符,标识符中如果使用到 ”.”,则该字符必须是第一个字符。

2. 寻址方式

MOV指令简介

8088/8086汇编语言中提供了7种与数据相关的寻址方式。
以MOV指令为例介绍7种寻址方式。
MOV指令的格式:
MOV< Dest>,< Src>
Src表示源操作数,Dest表示目的操作数。
指令功能:将源操作数Src表示的内容传送到目的操作数Dest所指示的位置。

2.1 立即寻址

操作数本身作为指令的一部分直接出现在指令中,即为立即数,寻找该立即数的寻址方式称为立即寻址。

在这里插入图片描述
在这里插入图片描述
注意:立即数只能用作源操作数,不能用作目的操作数,且源操作数的长度与目的操作数的长度必须一致

2.2 寄存器寻址

当源操作数已经存储在某个寄存器中,或者要把目的操作数存入某个寄存器时,指令中就指出所要使用的寄存器名称,该操作数的寻址方式即为寄存器寻址方式。

在这里插入图片描述
在这里插入图片描述
该指令中源操作数和目的操作数的寻址方式都是寄存器寻址

2.3 直接寻址

操作数放在存储器的存储单元中,在指令中直接给出该操作数在存储器中的偏移地址,这种寻址方式称为直接寻址。该偏移地址也称有效地址EAEffective Address)

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

2.4 寄存器间接寻址

操作数放在存储器的存储单元中,其有效地址放在寄存器中,若该操作数在指令中以“[寄存器名称]”的形式出现,则该操作数的寻址方式称为寄存器间接寻址。
注意:
(1) 所用寄存器只能是BX、BP、SI、DI
(2) 当使用寄存器BX、SI、DI时,默认段寄存器是数据段寄存器DS
(3) 当使用寄存器是BP时,默认段寄存器是堆栈段寄存器SS。
(4) 寄存器间接寻址方式允许使用段跨越前缀。

在这里插入图片描述

2.5 寄存器相对寻址

操作数放在存储器的存储单元中,其有效地址是基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容与指令中给定的8位或16位位移量之和,该操作数的这种寻址方式称为寄存器相对寻址。
注意:
(1) 当使用寄存器BX、SI、DI时,默认的段寄存器是DS
(2) 当使用的寄存器是BP是,默认的段寄存器是SS;
(3) 寄存器相对寻址方式允许使用段跨越前缀。

在这里插入图片描述

2.6 基址变址寻址

操作数放在存储器的存储单元中,其有效地址是一个基址寄存器(BX、BP)与一个变址寄存器(SI、DI)的内容之和,该操作数的这种寻址方式称为基址变址寻址。
注意:
(1) 当基址寄存器BX的内容作为有效地址的一部分时,默认的段寄存器是DS
(2) 当基址寄存器BP的内容作为有效地址的一部分时,默认的段寄存器是SS;
(3) 基址变址寻址方式允许使用段跨越前缀。

在这里插入图片描述

2.7 相对基址变址寻址

操作数放在存储器的存储单元中,其有效地址是以下三个量之和:一个基址寄存器(BX、BP)的内容、一个变址寄存器(SI、DI)的内容、一个8位或16位位移量,该操作数的这种寻址方式称为相对基址变址寻址。
注意:
(1) 当基址寄存器BX的内容作为有效地址的一部分时,默认的段寄存器是DS
(2) 当基址寄存器BP的内容作为有效地址的一部分时,默认的段寄存器是SS;
(3) 相对基址变址寻址方式允许使用段跨越前缀。

在这里插入图片描述

3. 数据传送指令

数据传送指令有5种,本章只介绍4种,其余在第10章介绍。

3.1 通用数据传送指令

(MOV、XCHG)

  1. MOV指令
    指令格式:MOV ,
    指令功能:将源操作数Src所表示的内容传送到目的操作数Dest所表示的位置。

MOV指令可分成三种形式:
(1) MOV 存储器单元/寄存器,立即数
功能:立即数赋给存储器单元或寄存器。
例如:MOV AL,‘E’
MOV Value,1234H
(2) MOV 寄存器,寄存器
功能:把寄存器中的内容赋给寄存器
例如:MOV AX,BX
MOV DS,AX
(3) MOV 寄存器,存储器单元
MOV 存储器单元,寄存器
功能:把存储器单元中的内容赋给寄存器或把寄存器的内容赋给存储器单元。
例如:MOV BX,Value
MOV Num,AX

关于MOV指令的规定(5点):
① 代码段寄存器CS、立即数不能做目的操作数;
② 源操作数和目的操作数不能同时为存储器操作数,如果一个操作数在存储器中,则另一个操作数要么是立即数,要么在寄存器中;
③ 不允许两个段寄存器之间直接传递数据;
④ 不允许为段寄存器送立即数;
⑤ 源操作数和目的操作数的类型必须相同。
以上这些规定,对于其他指令也适用。

  1. XCHG指令
    指令格式:XCHG ,
    指令功能:源操作数与目的操作数互换
    例3.14 XCHG AX,BX
    指令执行前:(AX)=1234H,
    (BX)=4567H
    指令执行后:(AX)=4567H,(BX)=1234H
    注意:
    ① 不允许使用立即寻址方式;
    ② 两个操作数必须有一个在寄存器中;
    ③ 不允许使用段寄存器;
    ④ 允许字或字节操作 。

3.2 地址传送指令(LEA、LDS、LES)

  1. LEA指令
    指令格式:LEA < Dest>,< Src>
    指令功能:把源操作数的有效地址送到指定寄存器中。
    注意:其中Dest必须是16位的寄存器(且不能是段寄存器),Src必须放在存储器单元中。
    在这里插入图片描述
  2. LDS指令
    指令格式:LDS < Dest>,< Src>
    指令功能:将由Src指定的存储单元中的字类型的数据传送到Dest所指定的16位寄存器中,并将下一个字单元中的数据传送到DS中。即:(Src)Dest,(Src+2)DS
    注意:Dest必须是16位的寄存器(且不能是段寄存器),Src必须放在存储器单元中。
    在这里插入图片描述
  3. LES指令
    指令格式:LES < Dest >,< Src>
    指令功能:将由Src指定的存储单元中的字类型的数据传送到Dest指定的16位寄存器中,并将下一个字单元中的数据传送到ES中。即:(Src)Dest,(Src+2)ES。
    注意:Dest必须是16位的寄存器(且不能是段寄存器),Src必须放在存储器单元中。

3.3 堆栈操作指令(PUSH、POP)

  1. PUSH指令
    指令格式:PUSH
    指令功能:将源操作数压入堆栈中。
    注意:源操作数的寻址方式可以是立即寻址方式以外的任何一种寻址方式 。
    在这里插入图片描述
  2. POP指令
    指令格式:POP
    指令功能:栈顶元素弹出送给目的操作数。
    注意:目的作数的寻址方式可以是除立即寻址方式以外的任何一种寻址方式,且目的操作数不能是CS。
    在这里插入图片描述

3.4 标志寄存器传送指令(LAHF、SAHF、PUSHF、POPF)

  1. LAHF
    指令格式:LAHF
    指令功能:取FLAGS低8位(SF、ZF、AF、PF、CF)到AH中。
  2. SAHF
    指令格式:SAHF
    指令功能:取AH内容送入FLAGS低8位。
  3. PUSHF
    指令格式:PUSHF
    指令功能:将FLAGS的内容压入堆栈。
  4. POPF
    指令格式:POPF
    指令功能:将栈顶内容弹出送入FLAGS。
    此指令为PUSHF指令的逆过程。

总结

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

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

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

相关文章

C语言黑魔法第三弹——动态内存管理

本文由于排版问题&#xff0c;可能稍显枯燥&#xff0c;但里面知识点非常详细&#xff0c;建议耐心阅读&#xff0c;帮助你更好的理解动态内存管理这一C语言大杀器 进阶C语言中有三个知识点尤为重要&#xff1a;指针、结构体、动态内存管理&#xff0c;这三个知识点决定了我们…

手把手教你打造研究生个人简历模板|轻松驾驭简历设计

在简历设计中&#xff0c;如何展现自己的学历优势&#xff0c;是很多学生困扰的问题。 下面&#xff0c;我们首先从即时设计中分享一些不同风格的研究生简历模板。 风格多样的免费简历设计模板https://js.design/community?categorysearch&search%E7%AE%80%E5%8E%86&…

使用STM32+ESP8266(ESP-01S)+点灯科技(手机端Blinker)实现远程控制智能家居

硬件准备&#xff1a;STM32单片机、ESP8266&#xff08;ESP-01S&#xff09;、CH340C下载烧录器 软件准备&#xff1a;STM32CubeMX、Keil uVision5、Arduino IDE、 点灯科技&#xff08;手机端APP Blinker&#xff09;点灯科技 (diandeng.tech)点击进入 值得注意的是&#x…

【EfficientNetV2】《EfficientNetV2: Smaller Models and Faster Training》

google ICML-2021 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4. 1 Understanding Training Efficiency4.2 Training-Aware NAS and Scaling4.3 Progressive learning 5 Experiments5.1 Datasets and Metrics5.2 ImageNet ILSVR…

力扣654 最大二叉树 Java版本

文章目录 题目描述解题思路代码 题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上…

【Python】新手入门学习:详细介绍单一职责原则(SRP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍单一职责原则&#xff08;SRP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

力扣106 从中序与后续遍历序列构造二叉树

文章目录 题目描述解题思路代码 题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], …

海豚调度系列之:认识海豚调度

海豚调度系列之&#xff1a;认识海豚调度 一、海豚调度二、特性三、建议配置四、名次解释 一、海豚调度 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过…

使用 opencv 识别答题卡,生成填涂答案

一般答题卡设计时都在试卷4个角预留4个一样大小的黑块 仅能识别选择题判断题之类的填涂答题的题目&#xff0c;不能识别填空题应用题等其它主观题 使用 opencv 识别试卷图片中所有黑块&#xff0c;再根据黑块大小获取四个角的位置&#xff0c;根据四个黑块位置校正图像 将图…

Ubuntu下txt中文显示乱码问题常规解决方法

在正常使用ubuntu 文档时&#xff0c;突然发现txt文档出现&#xff0c;如下情况 无法正常观看&#xff0c;后来搜了一下发现是gedit 没有对应打开文件的编码格式&#xff0c;Ubuntu用的是utf-8,所以打开会有乱码&#xff01;初始没有GBK和GB2312&#xff0c;把GBK和GB2312添加…

vi 显示行号 显示色彩

首先进入当前用户目录下的.vimrc文件/.virc文件&#xff08;具体要看操作系统&#xff09; vi ~/.virc 显示行号 set number 显示色彩 highlight LineNr guifgred 效果

怎样才能选择一套好的ai智能语音系统呢?人工智能电话机器人系统各版本搭建

如今竞争激烈的市场环境下&#xff0c;企业需要不断创新&#xff0c;提高效率&#xff0c;以获得更多的市场份额和利润。而智能电销机器人&#xff0c;作为一种新型的营销工具&#xff0c;正逐渐成为越来越多企业的首选工具&#xff0c;接下来我们看看怎样才能选择一套好的ai智…

生态碳汇涡度相关监测与通量数据分析

朱老师&#xff08;副教授&#xff09;&#xff1a;来自国内重点高校&#xff0c;长期从事涡度通量观测与分析研究&#xff0c;发表SCI论文多篇&#xff0c;主持国家与地方科研项目多个&#xff0c;在生态环境数据处理与分析中具有丰富的实践项目经验。 本文基于MATLAB语言、以…

滑动窗口最大值(leetcode hot100)

给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], k 3 输…

2024年初中生古诗文大会备考:多选题真题和独家解析(持续更新)

今天我们继续来做初中古诗文大会的一道难题&#xff1a;多选题&#xff0c;让大家了解初中生古诗文大会的考察内容和形式&#xff0c;并且提供了我独家的题目解析和答案&#xff0c;供初中的同学们学习和参考。 Tips&#xff1a;古诗文大会的许多题目都来自于中考、高考&#…

使用Barrier共享鼠标键盘,通过macos控制ubuntu系统

之前文章写过如何使用barrrier通过windows系统控制ubuntu系统&#xff0c;该文章将详细介绍如何使用barrier通过macos系统控制ubuntu系统 一、macOS安装barrier macOS版本barrier链接 1、双击点开安装包 2、将安装包里的barrier拷贝到macOS的达达->应用程序中 3、在达达…

(黑马出品_高级篇_03)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_高级篇_03&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术——多级缓存 今日目标1.什么是多级缓存2.JVM进程缓存2.1.导入案例2.1.1.安装MySQL2.1.1.1.准备目录2.1.1.2.运行命令2.1.1.3.修改配置 2.1.1.4.…

边框检测在 Python 中的应用

在游戏开发中&#xff0c;我们经常会回使用到边框检测。我们知道&#xff0c;边框检测是计算机视觉中常用的技术&#xff0c;用于检测图像中的边界和轮廓。在Python中&#xff0c;可以使用OpenCV库来实现边框检测。具体是怎么实现的&#xff1f;以下是一个简单的示例代码&#…

深入探索Java中的MarkWord与锁优化机制——无锁、偏向锁、自旋锁、重量级锁

引言 在Java并发编程领域&#xff0c;有效管理对共享资源的访问显得尤为关键。为了保障线程安全&#xff0c;Java虚拟机&#xff08;JVM&#xff09;引入了一系列精妙的锁机制&#xff0c;这其中的核心概念就是Java对象头中的MarkWord。本文将详尽解析MarkWord的作用&#xff…

Vue.js+SpringBoot开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…