汇编程序设计

文章目录

  • 第一章
    • 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.hqwc.cn/news/623869.html

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

相关文章

【读点论文】YOLOX: Exceeding YOLO Series in 2021,无锚框单阶段目标检测方案,解耦检测头的分类和回归分支,优化标签分配策略

YOLOX: Exceeding YOLO Series in 2021 Abstract 在本报告中&#xff0c;我们介绍了YOLO系列的一些经验改进&#xff0c;形成了一种新的高性能探测器—YOLOX。我们将YOLO检测器切换到无锚方式&#xff0c;并进行其他先进的检测技术&#xff0c;即去耦头和领先的标签分配策略S…

Self-Attention 机制和多头注意力机制

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 Self-Attention 机制和多头注意力机制是Tra…

Wireshark TS | 再谈应用传输缓慢问题

问题背景 来自于朋友分享的一个案例&#xff0c;某某客户反馈电脑应用软件使用时打开很慢&#xff0c;并提供了一个慢时所捕获的数据包文件以及服务端 IP。以前也说过&#xff0c;所谓的慢有很多种现象&#xff0c;也会有很多原因引起&#xff0c;在没有更多输入条件的情况下&…

嵌入式基础知识学习:DA/AD—数模/模数转换

AD/DA—数模/模数转换概念 数字电路只能处理二进制数字信号&#xff0c;而声音、温度、速度和光线等都是模拟量&#xff0c;利用相应的传感器&#xff08;如声音用话筒&#xff09;可以将它们转换成模拟信号&#xff0c;然后由A/D转换器将它们转换成二进制数字信号&#xff0c…

27.8k Star,AI智能体项目GPT Pilot:第一个真正的人工智能开发者(附部署视频教程)

作者&#xff1a;Aitrainee | AI进修生 排版太难了&#xff0c;请点击这里查看原文&#xff1a;27.8k Star&#xff0c;AI智能体项目GPT Pilot&#xff1a;第一个真正的人工智能开发者&#xff08;附部署视频教程&#xff09; 今天介绍一下一个人工智能智能体的项目GPT Pilot。…

IO流高级流

前言 缓冲区能够提升输入输出的效率 虽然FileReader和FileWriter中也有缓冲区 但是BufferedReader和BufferWriter有两个非常好用的方法. 缓冲流 字节缓冲流 import java.io.*;public class BufferedStreamDemo {public static void main(String[] args) throws IOExceptio…

小阳同学嵌入式学习日记-QFile读写文件

一、QFile简介 在Qt中&#xff0c;QFile是一个用于文件I/O操作的类。它提供了一种方便的方式来读取和写入文件内容&#xff0c;以及获取有关文件的信息。 QFile类提供了许多函数&#xff0c;用于打开、关闭、读取和写入文件。一些常用的QFile函数包括&#xff1a; open(): 打开…

工作的第五天了

1.今天内容 1.现在的基本都增删改查都有 2.下一步做规格商品添加规格的方式 3.商品规格比较特殊 4.我们添加一个商品。通用一个商品&#xff0c;然后下面添加规格信息 5.如何做 6.第一个是添加商品 7.商品对应多个属性方式&#xff0c;简单来说是一个一对多的方式&#x…

想自学网络安全_Web安全,一般人我还是劝你算了吧

由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; 有哪些方向&#xff1f; 怎么选&#xff1f;…

如何将Oracle 中的部分不兼容对象迁移到 OceanBase

本文总结分析了 Oracle 迁移至 OceanBase 时&#xff0c;在出现三种不兼容对象的情况时的处理策略以及迁移前的预检方式&#xff0c;通过提前发现并处理这些问题&#xff0c;可以有效规避迁移过程中的报错风险。 作者&#xff1a;余振兴&#xff0c;爱可生 DBA 团队成员&#x…

基于SSM的游戏攻略管理系统

游戏攻略管理系统的构建与实现 一、系统概述二、系统架构与技术选型三、系统功能模块四、系统特点五、总结与展望 随着网络游戏的普及和发展&#xff0c;游戏攻略成为玩家们提升游戏技能、了解游戏机制的重要途径。为了更好地满足玩家需求&#xff0c;提高游戏攻略的管理效率和…

Java——static成员

目录 一.再谈学生类 二.static修饰成员变量 三.static修饰成员方法 四.static成员变量初始化 1.就地初始化 2.静态代码块初始化 一.再谈学生类 使用前面推文&#xff08;Java——类和对象&#xff09;中介绍的学生类实例化三个对象s1、s2、s3&#xff0c;每个对象都有自…