汇编程序设计

文章目录

  • 第一章
    • 8086的存储器组织
    • 寻址方式
      • 立即数寻址方式
      • 寄存器寻址方式
      • 存储器寻址方式
        • 直接寻址方式
        • 寄存器间接寻址
        • 寄存器相对寻址方式
        • 寄存器基址变址寻址
        • 相对基址变址寻址
        • 相对方式的补充
    • 数据寻址方式的组合

第一章

8086的存储器组织

  • 存储单元的地址 “段基地址:段内偏移地址” 其中段基地址和段内偏移地址都是16位的,通过将段基地址*4 + 段内偏移地址 ,就可以得到该单元的物理地址(绝对地址)

寻址方式

立即数寻址方式

  • 立即数寻址方式:指令中的操作数直接存放在机器代码中,紧跟在操作码之后
mov al,05h
mov ax,1234h

寄存器寻址方式

  • 寄存器寻址方式:操作数存放在内部寄存器中
mov ax,1234h
mov bx,ax

存储器寻址方式

  • 存储器寻址方式:寄存器数目有限,不可能将数据都存储在寄存器中,大多数情况下,数据存储在主存中,那么如何寻址主存中存储的操作数?
  • 由于8086存储器是分段管理的,所以这里给出的地址都是偏移地址,即有效地址(EA),而段地址在默认的或用段超越前缀指定的段寄存器中
直接寻址方式
  • 指令直接包含有效地址,默认情况下,有效地址要与数据段寄存器DS一起构成操作数所在的存储单元的物理地址
  • 在汇编语言中,[ ]表示存储单元的内容
mov ax,[2000h]
  • 上面的指令是将 DS:[2000h] 单元的内容传送至AX 寄存器
  • 数据不仅仅可以存放于数据段,也可以根据需要存放于附加段、代码段或堆栈段中,这时应该指出段超越前缀
mov ax,es:[2000h]
寄存器间接寻址
  • 有效地址存放于寄存器,8086中寄存器只能是基址寄存器BX或变址寄存器SI、DI 中。其默认 的段地址在 DS 段寄存器,但是可以使用段超越前缀改变。
mov ax,[si]   
  • 上面假设si 已经存储了目标单元的有效地址
寄存器相对寻址方式
  • 有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以说BX、BP或SI、DI操作数的EA = BX/BP/SI/DI + 8 /16位位移量。其中BX/SI/DI 寄存器默认数据段DS,BP 寄存器默认堆栈段SS。当使用非默认段的时候,可以使用段超越。
mov ax,[di+06h]  ;相当于ax<- DS:[di+06h]mov ax,[bp+06h] ; AX<-SS:[bp+06h]
  • 指令代码中位移量采用补码表示,如果是8位,则被带符号拓展为16位。当得到的有效地址EA 超过FFFFH 的时候,则取 64K 的模
寄存器基址变址寻址
  • 基址变址寻址方式:将基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成有效地址EA。
  • 操作数的EA =BX/BP + SI/DI
  • 基址寄存器为 BX 则默认为数据段DS, 否则 BP 默认为堆栈段SS
mov ax,[bx+si]   ;ax<-DS:[bx+si]
mov ax,[bp+di]   ;ax<-SS:[BP+DI]
mov ax,ds:[bp+di]  ;ax<-ds:[bp+di]
相对基址变址寻址
  • 使用基址寄存器(BX/BP) 、变址寄存器(SI/DI) 和 一个8位或16位的位移量
mov ax,[bx+si+06h] 
  • 同样的,指令中的位移量采用补码表示,如果是8位,则被拓展为16位,如果得到的EA 超过FFFFH ,则取64k 的模
相对方式的补充
  • 在寄存器相对寻址和相对基址变址寻址方式中,位移量可以用符号表示,如
mov ax,[si+count] ;count 是实现定义的变量或常量,此处是一个数值
mov ax,[bx+si+wnum] ;wnum 也是变量或者常量
  • 同一寻址方式有时可以写成不同的形式
mov ax,[bx][si] ;相当于 mov ax,[bx+si]
mov ax,count[si]  ; 相当于 mov ax,[si+count]
mov ax,wnum[bx][si] ; 相当于 mov ax,[bx+si+wnum]

数据寻址方式的组合

  • 立即数寻址方式只能用于原操作数,使用IMM 表示立即数
  • 寄存器寻址主要是指通用寄存器寻址。使用REG 表示通用寄存器。有8个16位的通用寄存器(AX,BX,CX.DX,SI,DI,BP,SP) 和 8个8位通用寄存器(AH,AL,BH,BL,CH,CL,DH,DL) ,段寄存器(SEG) (CS,DS,SS,ES)
  • 存储器寻址访问的数据在主存,利用逻辑地址指示。段基地址由默认或者指定的段寄存器指出,指令代码只能表达偏移地址、称为有效地址。用MEM 表示存储器操作数,可以是16位或8位,分别用M16 和 M8 表示。
  • 指令操作数:左边的是DEST (目的操作数),右边 SRC (源操作数)
处理器指令助记符  reg,imm/reg/mem
处理器指令助记符  mem,imm/reg
  • 源操作数可以是立即数、寄存器、存储器寻址,但是目的操作数只能是寄存器或存储器寻址,并且两个操作数不能同时为存储器寻址

在这里插入图片描述

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

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

相关文章

Adobe AE(After Effects)2021下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件&#xff0c;由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能&#xff0c;可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

【C语言】每日一题,快速提升(2)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a;杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f &#xff08;加上 -f 就是强制&#xff09; 二、 先拉取最新代码&#xff0c;再推送 1.git pull origin master 2.git push origin master

保护视力,从 CareUEyes 开始 —— 你的电脑护眼小助手

在数字化时代&#xff0c;我们的眼睛比以往任何时候都更频繁地面对屏幕。长时间盯着电脑工作&#xff0c;不仅影响视力&#xff0c;还可能导致眼疲劳和不适。今天&#xff0c;我要向大家推荐一款专为电脑用户设计的护眼软件——CareUEyes。 CareUEyes&#xff1a;你的视力守护者…

Linux系统中LVM与磁盘配额

目录 一、LVM逻辑卷管理 二、LVM的管理命令 物理卷管理 卷组管理 逻辑卷管理 *创建并使用LVM步骤 三、磁盘配额概述 实现磁盘限额的条件 Linux 磁盘限额的特点 四、磁盘配额管理 磁盘限额 一、LVM逻辑卷管理 能够在保持现有数据不变的情况下动态调整磁盘容量&#…

C++算法题 - 矩阵

目录 36. 有效的数独54. 螺旋矩阵48. 旋转图像73. 矩阵置零289. 生命游戏 36. 有效的数独 LeetCode_link 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现…

selenium反反爬虫,隐藏selenium特征

一、stealth.min.js 使用 用selenium爬网页时&#xff0c;常常碰到被检测到selenium &#xff0c;会被服务器直接判定为非法访问&#xff0c;这个时候就可以用stealth.min.js 来隐藏selenium特征&#xff0c;达到绕过检测的目的 from selenium import webdriver from seleniu…

Day 2 正式coding之基础模块的搭建

Day 2 正式coding之基础模块的搭建 这里会总结构建项目过程中遇到的问题&#xff0c;以及一些个人思考&#xff01;&#xff01; 学习方法&#xff1a; 1 github源码 文档 官网 2 内容复现 &#xff0c;实际操作 项目源码同步更新到github 欢迎大家star~ 后期会更新并上传前端…

Spring基础篇-快速面试笔记(速成版)

文章目录 1. Spring概述2. 控制反转&#xff08;IoC&#xff09;2.1 Spring声明Bean对象的方式2.2 Spring的Bean容器&#xff1a;BeanFactory2.3 Spring的Bean生命周期2.4 Spring的Bean的注入方式 3. Spring的事件监听器&#xff08;Event Listener&#xff09;3.1 Spring内置事…

自学Java的第二十四次笔记

一,方法重载 1.基本介绍 java 中允许同一个类中&#xff0c;多个同名方法的存在&#xff0c;但要求 形参列表不一致&#xff01; 比如&#xff1a; System.out.println(); out 是 PrintStream 类型 2.重载的好处 1) 减轻了起名的麻烦 2) 减轻了记名的麻烦 3.快速入门案…

认识海康摄像头的编码信息以及使用等

认识海康摄像头的编码信息以及使用等 主要是来源一下文章&#xff1a; 海康摄像头、NVR命名规则-弱电新人学习&#xff01; - 知乎 大体是分了三类&#xff0c;当然海康的产品实在是有点多&#xff0c;没找见官方权威的解答&#xff0c;参考着先看看。 网络摄像机、网络球机…

浅谈Java JVM

Java虚拟机&#xff08;Java Virtual Machine&#xff0c;简称JVM&#xff09;是Java语言的核心组成部分&#xff0c;它是一个抽象的计算机&#xff0c;负责执行Java字节码指令。JVM是Java平台无关性的基石&#xff0c;它为Java代码提供了一个标准的运行环境&#xff0c;使Java…

golang-基础语法

make 和 new 的区别 make 和 new 都是用来分配内存 make 只能对 slice map channel 进行初始化结构体实例。new 可以对任意类型进行初始化make 用于分配数据对象的具体实例&#xff0c;new 用于分配数据类型的默认值&#xff0c;并返回该数据的指针。 new 出来的 slice 、ma…

html5测试题整理--针对标签的概念性,我们究竟还要学习哪些软件测试知识

先自我介绍一下&#xff0c;小编浙江大学毕业&#xff0c;去过华为、字节跳动等大厂&#xff0c;目前阿里P7 深知大多数程序员&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;但自己不成体系的自学效果低效又漫长&#xff0c;而且极易碰到天花板技术停滞…

Ubuntu20.04版本命令行设置挂载磁盘,并设置开机自动挂载

最近部署应用 系统是Ubuntu20.4版本的Linux系统&#xff0c;加了数据盘&#xff0c;需要格式化后挂载&#xff0c;记录下&#xff1a; Linux 数据盘挂载(采用 parted 分区工具)-格式化为 ext4 1. 初始化 Linux 数据盘 挂载数据盘后或者随实例创建时一并创建的数据盘&#xff…

使用SpringBoot3+Vue3开发公寓管理系统

项目介绍 公寓管理系统可以帮助公寓管理员更方便的进行管理房屋。功能包括系统管理、房间管理、租户管理、收租管理、房间家具管理、家具管理、维修管理、维修师傅管理、退房管理。 功能介绍 系统管理 用户管理 对系统管理员进行管理&#xff0c;新增管理员&#xff0c;修改…

碳课堂|碳关税是什么?企业如何从容应对?

2023年10月1日&#xff0c;欧盟碳边境调节机制&#xff08;CBAM&#xff09;法规&#xff0c;即全球首个“碳关税”开始实施。据世界银行研究报告称&#xff0c;如果“碳关税”全面实施&#xff0c;在国际市场上&#xff0c;中国制造可能将面临平均26%的关税&#xff0c;出口量…

Android JetPack Compose+Room----实现搜索记录功能

文章目录 需求概述功能展示实现搜索功能使用的技术1.Android Jetpack room2.Android JetPack Compose 代码实现编写搜索界面接入Room实现搜索功能的管理引入依赖定义包结构定义操作表的Dao类定义数据库的基础配置定义数据库的Dao管理类使用数据库升级 源码地址 需求概述 搜索功…

台灯目前口碑最好的护眼灯有哪些?分享多款高口碑护眼灯

根据数据表明中国近视患者人数已达到7亿&#xff0c;关于视力问题&#xff0c;而儿童及中小学生居多&#xff0c;关于视力问题&#xff0c;很多人都归咎于幼时学习时的用眼时间过长&#xff0c;但这只是其中的一部分&#xff0c;不合适的光源环境影响也是非常大的&#xff0c;尤…

006Node.js cnpm的安装

百度搜索 cnpm,进入npmmirror 镜像站https://npmmirror.com/ cmd窗口输入 npm install -g cnpm --registryhttps://registry.npmmirror.com