【汇编】mov和add指令、确定物理地址的方法、内存分段表示法

文章目录

  • 前言
  • 一、学习汇编指令——用中学
    • 1.1 汇编指令分析
    • 汇编输出分析
  • 二、确定物理地址的方法
    • 2.1 什么叫做物理地址
    • 2.2 8086中的物理地址
    • 2.3 8086CPU给出物理地址的方法
    • 2.4 “段地址×16+偏移地址=物理地址”的本质含义
  • 三、内存分段表示法
    • 3.1 用分段的方式管理内存
    • 3.2 同一段内存,多种分段方案
    • 3.3 用不同的段地址和偏移地址形成同一个物理地址
  • 总结


前言

在汇编语言中,mov(Move)和add(Add)指令是两个基本而重要的操作码,用于在寄存器和内存之间传递数据以及执行加法运算。这两个指令为程序员提供了对计算机底层数据处理的直接控制,是编写有效和高性能汇编代码的关键。


一、学习汇编指令——用中学

1.1 汇编指令分析

在这里插入图片描述
我们首先看mov ax,18这条指令,他其实就是把我们的18送到ax中,或者如果你学过C/C++/Python这些高级语言,我们还可以这样表示:ax = 18

int main()
{

    int a;
    a = 18;

}

我们把上方的C代码转成汇编之后,关键代码如下:

mov     DWORD PTR [rbp-4], 18

我们把关键的分解一下
mov就是我们的指令嘛,然后DWORD PTR [rbp-4]可以理解成一个和ax差不多意思的寄存器,然后把18放入

接下来,我们的mov ah,78就和上面一样的啦,就是把78送入ah寄存器中

然后是add ax,8
他是将寄存器ax中的数值加上8

我们通过转汇编来理解,下方是我们的C程序

int main()
{

    int a;
    a = 18;
    a+=8;

}

关键汇编代码如下:

mov     DWORD PTR [rbp-4], 18
add     DWORD PTR [rbp-4], 8

这个DWORD PTR [rbp-4]先理解成一个寄存器,后面会讲,
然后可以看到add这个寄存器后面加了个8,其实就是把这个寄存器里面的值+上了个8

后面这个mov和add就是一样的了,这里不过多赘述。

注:汇编指令不区分大小写

汇编输出分析

在这里插入图片描述
设原AX、BX中的值均为0000H
我们可以通过计算器来算一算:

首先我们可以看第一个addadd ax,1406H指令,他的结果如下:
在这里插入图片描述
我们接下来看第二个add指令:
在这里插入图片描述

二、确定物理地址的方法

2.1 什么叫做物理地址

物理地址就像是你家的具体门牌号一样,是计算机内存中每个存储单元的具体位置标识。就像你要找到一个房间一样,计算机需要知道数据存储在内存的哪个位置,这个位置就是物理地址。
想象一下,内存就是一片很大的房子,每个存储单元就像一个小房间。物理地址就是告诉计算机数据存储在这个大房子的哪个小房间里。通过物理地址,计算机能够准确地找到并访问内存中的数据,就像你通过门牌号找到家里的具体位置一样。

2.2 8086中的物理地址

CPU访问内存单元时要给出内存单元的地址。
所有的内存单元构成的存储空间是一个一维的线性空间。
每一个内存单元在这个空间中都有唯一的地址,这个唯
一的地址称为物理地址。
事实
8086有20位地址总线,可传送20位地址,寻址能力
为1M。
8086是16位结构的CPU
运算器一次最多可以处理16位的数据,寄存器
的最大宽度为16位。
在8086内部处理的、传输、暂存的地址也是16
位,寻址能力也只有64KB!
问题:8086如何处理在寻址空间上的这个矛盾?!

2.3 8086CPU给出物理地址的方法

8086CPU的解决方法
用两个16位地址(段地址、偏移地址)
合成一个20位的物理地址。
地址加法器合成物理地址的方法
物理地址=段地址×16+偏移地址

在这里插入图片描述

2.4 “段地址×16+偏移地址=物理地址”的本质含义

要解决的问题
用两个16位的地址(段地址、偏移地址),相加得到一个20位的物理地址
本质含义
CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

三、内存分段表示法

3.1 用分段的方式管理内存

8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址。
内存并没有分段,段的划分来自于CPU!!!

在这里插入图片描述

在这里插入图片描述

3.2 同一段内存,多种分段方案

起始地址( 基础地址)为10000H,
段地址为1000H,大小为100H
在这里插入图片描述

在这里插入图片描述
起始地址( 基础地址 )为10000H和10080H,
段地址为1000H和1008H,大小均为80H

(1)段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;
(2)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。

3.3 用不同的段地址和偏移地址形成同一个物理地址

物理地址 段地址 偏移地址
21F60H 2000H 1F60H
	 0F60H   2100H
	 0060H   21F0H
	 0000H   21F6H
	 2F60H   1F00H

偏移地址16位,变化范围为0~FFFFH,用偏移地址最多寻址64KB。
例:给定段地址2000H,用偏移地址寻址的范
围是:20000H~2FFFFFH,共64K
例:数据在21F60H内存单元中,段地址是2000H,说法
(a)数据存在内存2000:1F60单元中;
(b)数据存在内存的2000H段中的1F60H单元中。
在8086PC机中存储单元地址的表示方法
段地址很重要!——用专门的寄存器存放段地址。
4个段寄存器:
CS - 代码段寄存器 DS - 数据段寄存器
SS - 栈段寄存器 ES - 附加段寄存器


总结

mov指令用于将数据从一个地方移到另一个地方,可以是寄存器之间的传递,也可以是从内存到寄存器的加载或者反之。这种直接的数据传递操作是汇编语言中基本的操作之一,为程序提供了对数据的灵活控制。

add指令则执行加法运算,允许程序员将两个操作数相加,并将结果存储在目标操作数中。这是进行算术运算的基础指令之一,为实现各种复杂的数学和逻辑运算提供了基础。

综合而言,mov和add指令在汇编语言中扮演了关键的角色,它们的合理使用能够使程序更加高效、精确地执行各种任务。通过深入理解这两个指令的功能和应用场景,程序员可以更好地利用计算机底层的处理能力,编写出性能卓越的汇编代码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的实验室仪器设备管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

【数据结构高阶】二叉搜索树

接下来我们来开始使用C来详细讲解数据结构的一些高阶的知识点 本期讲解的是二叉搜索树,对于初阶二叉树有所遗忘的同学可以看到这里: 【精选】【数据结构初阶】链式二叉树的解析及一些基本操作 讲解二叉搜索树主要是为了后面的map和set做铺垫&#xff…

HTML易忽略的角落【目录】

目前已有文章 **** 篇 本专栏是汇集了一些HTML常常被遗忘的知识,这里算是温故而知新,往往这些零碎的知识点,在你开发中能起到炸惊效果。我们每个人都没有过目不忘,过久不忘的本事,就让这一点点知识慢慢渗透你的脑海。 …

【Spring】超详细讲解AOP(面向切面编程)

文章目录 1. 前言2. 什么是AOP3. AOP快速入门4. AOP的核心概念5. 切点表达式6. 切点函数7. 通知8. 总结 1. 前言 本文围绕AOP进行讲解,AOP可以做什么,涉及到了哪些注解,以及各个注解运行的时机,以及Around相较于其它注解有什么不同,并且如果要执行目标方法需要怎么做 2. 什么…

群晖7.2版本通过Container Manager安装xiaoya-alist

小雅Alist,可以说是Alist应用中挂载阿里云最完美的成功案例。 一、下载镜像 注册表中下载镜像 Container Manager应该是7.2版本才改名,就是以前的docker。 打开【Container Manager】-【注册表】-【搜索框】搜索 xiaoya 内容区域,搜出的…

新零售系统平台解决方案 线上线下小程序怎么做

新零售线上线下解决方案是将传统零售业务与互联网科技相结合,通过数字化、智能化手段提升零售业务效率和用户体验的解决方案,它既有提供消费者线下体验,强调“稳”,又有互联网线上的“快”。 线上线下小程序可以通过一体化的进销存…

ubuntu20.04安装cv2

查看ubuntu的版本 cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE20.04 DISTRIB_CODENAMEfocal DISTRIB_DESCRIPTION"Ubuntu 20.04.3 LTS"更改镜像源 cp /etc/apt/sources.list /etc/apt/sources.list.bak cat > /etc/apt/sources.listdeb http://mirr…

第二证券:注册制退市规则?

跟着我国本钱商场不断发展和完善,持续注重退市原则改造也成为了商场中的热点话题。而注册制退市规矩的施行,无疑是新的退市原则下的一大重要内容。 首要,咱们需求了解什么是注册制退市规矩。所谓注册制退市规矩,指的是在注册制下…

App加固中的代码混淆功能,让逆向工程师很头疼

App加固中的代码混淆功能,让逆向工程师很头疼 “我想离开浪浪山。” 在数次尝试破解某个App 时,某个逆向工程师无奈感慨道。 逆向工程师顾名思义就是把一个个完整的软件逆推,还原成一段段代码,方便破解。 比如给他们一个手机Ap…

windows 使用WinSW制作服务

背景:最近维护老项目,需要使用windows server 2012 r2部署项目。使用springboot开发项目,nginx部署前端,于是打算把jar包和nginx都制作成服务 下载winsw地址:https://github.com/winsw/winsw/releases 下载这两个文件…

内衣迷你洗衣机什么牌子好?选购内衣裤洗衣机的方法

洗衣机在我们的生活中可谓是非常常见的了,几乎每家每户都具备着一台。即便是有洗衣机,也有不少人不会将自己我贴身衣物直接扔在洗衣机里清洗,而是会自己手工手洗。这跟我们传统上的观念有很大的关系,认为把内衣、内裤等贴身衣物放…

【23真题】发错试卷?想多了,只是题型大改!

今天分享的是23年南昌大学811的信号与系统试题及解析。南昌大学23年题型大改,加入了很多电路题目!23考研的同学,甚至考场上以为发错试卷,考的电路原理。所以学有余力的同学,一定跟着我做各种院校的真题,见多…

华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯

近日,日经新闻联合研究公司Fomalhaut Techno Solutions对华为 Mate 60 Pro 进行了拆解,揭示了这款于8月发布的新型智能手机的成本结构。拆解结果显示,该手机的国产零部件比例达到了47%,相较于三年前的 Mate 40 Pro,提高…

Js:获取最近6个月的月份(包含本月、不包含本月)

一、需求 获取最近6个月的月份(不包含本月),比如现在是11月份,则需要获取到的月份是:10、9、8、7、6、5将月份从小到大排列 二、解决 1、获取最近的6个月份(不包含本月) var monthALL[]; …

欧盟铅镉RSL邻苯项目化学物质检测报告办理(RSL Report 资质)REACH 认证

如果您在亚马逊上销售商品,则必须遵守所有适用的欧盟和地方法律法规,以及适用于这些商品和商品信息的亚马逊政策。要在亚马逊上销售某些商品,)您需要向我们提供 REACH 符合性声明或检测报告。 RSL-Phthalate资质 欧盟RSL邻苯项目检测报告 Ph…

JVM jstat 查看内存新生代老年代回收情况,排查oom

jstat 命令 jstat - [-t] [-h] [ []] option:我们经常使用的选项有gc、gcutil vmid:java进程id interval:间隔时间,单位为毫秒 count:打印次数 每秒打印一次 jstat -gc 9162 1000S0C:年轻代第一个survivor的容量…

Kubernetes(k8s)介绍和环境部署

文章目录 Kubernetes一、Kubernetes介绍1.Kubernetes简介2.Kubernetes概念3.Kubernetes功能4.Kubernetes工作原理5.kubernetes组件6.Kubernetes优缺点 二、Kubernetes环境部署环境基本配置1.所有节点安装docker2.所有节点安装kubeadm、kubelet、kubectl添加yum源containerd配置…

用照片预测人的年龄【图像回归】

在图像分类任务中,卷积神经网络 (CNN) 是非常强大的神经网络架构。 然而,鲜为人知的是,它们同样能够执行图像回归任务。 图像分类和图像回归任务之间的基本区别在于分类任务中的目标变量(我们试图预测的东西)不是连续…

图片转excel表格怎么弄?有何密笈?

一般的软件要将图片转excel表格,都需要待识别的图片要有明显清晰的表格线,但金鸣识别则不需要这些条件的限制,即便是无表格线或缺少横线或竖线的图片,也能很好地识别成excel,另外,别的软件一般会限制文件大…

Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享

Windows Server 2012系统在没有安装远程多界面的情况下,最多只能同时运行2个远程桌面,如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面,但是没有安装就很不方便,今天飞飞来和你们分享Windows server 2012R2系统远…