【汇编】内存中字的存储、用DS和[address]实现字的传送、DS与数据段

news2024/11/26 18:26:09

文章目录

  • 前言
  • 一、内存中字的存储
    • 1.1 8086cpu字的概念
    • 1.2 16位的字存储在一个16位的寄存器中,如何存储?
    • 1.3 字单元
  • 二、用DS和[address]实现字的传送
    • 2.1 字的传送是什么意思?
    • 2.2 要求
      • 原理
      • 解决方案:DS和[address]配合
      • 8086传送16字节
    • 2.3 案例
      • 案例1
      • 案例2
  • 三、DS与数据段
    • 3.1 DS与数据段是什么?
    • 3.2 对内存单元中数据的访问
    • 3.3 将123B0H~123BAH的内存单元定义为数据段
      • 累加数据段中的前3个单元中的数据
      • 累加数据段中的前3个字型数据
  • 总结


前言

在汇编语言中,我们处理计算机内存中的数据时,需要理解如何存储和传送字(数据的一部分)。通过使用数据段寄存器 DS 和 [address] 这样的符号,我们能够有效地操作内存中的字,实现数据的传送和处理。


一、内存中字的存储

1.1 8086cpu字的概念

让我用通俗易懂的话给你介绍一下 8086 CPU 中的字的概念。

在计算机世界中,一个字通常表示一组二进制位,这个组合的长度是由计算机的架构决定的。在 8086 CPU 中,一个字由 16 位组成。每个位可以是 0 或 1,就像开关一样,有 16 个开关组合在一起,构成了一个字。

想象一下你有一串 16 个灯泡,每个灯泡可以是亮的(1)或者暗的(0)。这串灯泡就代表了一个字。当计算机处理数据时,它会以这样的字为单位进行操作。这些操作可以包括加法、减法、移动数据等等。

所以,8086 CPU 中的字就像是计算机处理信息的一种方式,就像我们平时用字来表达语言一样,计算机通过字来表达和处理数据。这个字的长度是 16 位,每位都有它的特定含义,就像字母构成单词一样,这些 16 位的二进制数构成了计算机世界中的“语言”基本单位。

1.2 16位的字存储在一个16位的寄存器中,如何存储?

1、回答
高8位放高字节,低8位放低字节
2、问题
16位的字在内存中需要2个连续字节存储,怎么存放?
3、回答
低位字节存在低地址单元,高位字节存在高地址单元
例:20000D(4E20H)存放0、1两个单元,18D
(0012H)存放在2、3两个单元

在这里插入图片描述

1.3 字单元

字单元:由两个地址连续的内存单元组成,存放一个字型数据(16位)

想象一下你有一个很长的故事,而你希望每次只读取一小段,而不是整篇文章。字单元就有点像这个故事中的一个小节,是计算机中用来处理数据的一小块单元。

在计算机的世界里,字单元是存储器中的一小部分,通常是由多个位(比如8位、16位、32位等)组成的。这些位就像是计算机的开关,可以表示不同的信息。

字单元可以存储一个数字、一个字符或者其他数据。它就像一个小盒子,可以装一些信息。当计算机需要处理数据时,它可以一次性处理一个字单元,就像你一次读一个小节的故事一样。

所以,字单元是计算机存储和处理信息的一种方式,是数据的一个小单元,让计算机更方便地管理和操作数据。

原理:在一个字单元中,低地址单元存放低位字节,高地址单元存放高位字节
在起始地址为0的单元中,存放的是4E20H
在起始地址为2的单元中,存放的是0012H
在这里插入图片描述

即是0、1可以组合:4E20H
1、2可以组合:124E
依次类推

二、用DS和[address]实现字的传送

2.1 字的传送是什么意思?

让我用通俗易懂的语言来解释一下汇编中的 DS 和 [address] 实现字的传送是什么意思。

首先,DS 是数据段寄存器的缩写,它在汇编语言中用来指示数据存储的位置。就像你有一个大抽屉,把不同类型的东西放在不同的抽屉里一样,DS 帮助计算机知道从哪里找到存储的数据。

然后,[address] 表示一个内存地址。你可以把内存地址看作是抽屉的编号,告诉计算机在哪里找到具体的数据。[address] 就像是对抽屉的引用,告诉计算机要去哪个抽屉找数据。

现在,当你在汇编语言中看到类似 MOV AX, [BX] 这样的指令时,它的意思是将 BX 寄存器中存储的地址所指向的数据(就像抽屉里的东西)传送到 AX 寄存器中。

总体来说,使用 DS 寄存器和 [address],汇编语言就像在抽屉中移动数据一样。DS 帮助找到正确的抽屉(数据段),而 [address] 则告诉计算机在这个抽屉中具体找哪个位置的数据。这样,就能够实现数据的传送和处理。

2.2 要求

CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;

原理

在8086PC中,内存地址由段地址和偏移地址组成(段地址:偏移地址)、

解决方案:DS和[address]配合

用 DS寄存器存放要访问的数据的段地址
偏移地址用[…]形式直接给出
例1

mov bx,1000H
mov ds,bx
mov al, [0]

将10000H(1000:0)
中的数据读到al中

例2

mov bx,1000H
mov ds,bx
mov [0],al

将al中的数据写到
10000H(1000:0)中

将段地址送入DS的两种方式
(1) mov ds, 1000H

(2)

mov bx, 1000H
mov ds, bx

例1

mov bx,1000H
mov ds,bx
mov al, [0]

8086CPU不支持将数据直接送入段寄存器
(硬件设计的问题)
套路:数据→一般的寄存器→段寄存器

8086传送16字节

8086CPU可以一次性传送一个字(16位的数据)

例如:

mov bx, 1000H
mov ds, bx
mov ax, [0] ;1000:0处的字型数据送入ax
mov [0], cx ;cx中的16位数据送到1000:0处

2.3 案例

案例1

mov ax, 1000H
mov ds, ax
mov ax, [0]
mov bx, [2]
mov cx, [1]
add bx, [1]
add cx, [2]

案例2

mov ax, 1000H
mov ds, ax
mov ax, 2C31
mov [0], ax
mov bx, [0]
sub bx, [2]
mov [2], bx

三、DS与数据段

3.1 DS与数据段是什么?

DS寄存器:

想象一下,你有一个大书柜,里面存放了很多不同的书籍。每一本书都有一个特定的位置,你需要知道在哪个部分找到它。DS 寄存器就好像是一张告诉你在书柜的哪个部分找书的地图。它指示计算机在内存中的哪个区域找到数据。

数据段:

现在,把这个书柜比作内存,而书柜的每个抽屉就是一个数据段。每个抽屉里存放着一些相关的信息,可能是一组数字、字符或其他数据。数据段就像是书柜的一个部分,用来组织和存储特定类型的数据。

因此,当我们说 DS 寄存器与数据段有关时,我们是在告诉计算机在内存中的哪个区域找到数据。就好比你要找一本书,首先要知道在哪个书柜的哪个抽屉里找,DS 寄存器就提供了这个信息,而数据段就是具体的书柜部分,其中存放着相关的数据。

在汇编语言中,通过设置 DS 寄存器,我们可以定位到正确的数据段,就像通过地图找到正确的书柜一样。这有助于我们在程序中有效地访问和处理数据。

3.2 对内存单元中数据的访问

对于8086PC机,可以根据需要将一组内存单元定义为一个段。
物理地址=段地址×16+偏移地址
将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数
据的内存空间,从而定义了一个数据段。
例:用123B0H~123B9H的空间来存放数据
段地址:123BH 起始偏移地址:0000H 长度:10字节
段地址:1230H 起始偏移地址:00B0H 长度:10字节
… :处理方法:(DS)😦[address])
用DS存放数据段的段地址
用相关指令访问数据段中的具体单元,单元地址由[address]指出

3.3 将123B0H~123BAH的内存单元定义为数据段

累加数据段中的前3个单元中的数据

mov ax, 123BH
mov ds, ax
mov al, 0
add al, [0]
add al, [1]
add al, [2]

在这里插入图片描述

累加数据段中的前3个字型数据

mov ax, 123BH
mov ds, ax
mov ax, 0
add ax, [0]
add ax, [2]
add ax, [4]

在这里插入图片描述


总结

在汇编语言中,理解如何存储和传送字是关键的。通过使用 DS 寄存器和 [address],我们能够精确地定位内存中的数据,并在不同的数据段中操作。这就好比在巨大的书库中,通过标识书架和特定页面的方式找到并使用我们需要的信息。这些概念是理解计算机内存工作原理和编写有效汇编代码的基础。

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

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

相关文章

【LeetCode刷题-滑动窗口】--340.至多包含K个不同字符的最长子串

340.至多包含K个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String s, int k) {int len s.length();if(len < k){return len;}//滑动窗口的左右指针int left 0,right 0;//定义一个哈希映射HashMap<Character,Integer> hash…

外汇天眼:世界级的交流碰撞!Wiki Finance EXPO悉尼2023圆满落幕

11月16日对于外汇天眼来说是个特殊的日子&#xff0c;而对于整个世界金融界来说也是一个意义非凡的日子&#xff0c;由WikiGloba展会品牌WiKiEXPO举办的2023 Wiki Finance Expo在悉尼富丽敦酒店顺利举办并圆满落幕。 金融科技作为金融业创新变革的重要引擎&#xff0c;在全球数…

【Python基础篇】字符串的拼接

博主&#xff1a;&#x1f44d;不许代码码上红 欢迎&#xff1a;&#x1f40b;点赞、收藏、关注、评论。 格言&#xff1a; 大鹏一日同风起&#xff0c;扶摇直上九万里。 文章目录 一 Python中的字符串拼接二 join函数拼接三 os.path.join函数拼接四 号拼接五 &#xff0c;号…

【开源】基于JAVA的高校宿舍调配管理系统

项目编号&#xff1a; S 051 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S051&#xff0c;文末获取源码。} 项目编号&#xff1a;S051&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统…

⑩② 【MySQL索引】详解MySQL`索引`:结构、分类、性能分析、设计及使用规则。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL索引 ⑩② 【MySQL索引】1. 索引2. 索引的…

Spring Cloud Netflix微服务组件-Hystrix

目录 Hystrix的主要功能 传统容错手段 超时机制 应用容错三板斧 超时机制 舱壁隔离 熔断降级 侵入式Command用法 改进版一&#xff1a;ribbon与hystrix组合 改进版二&#xff1a;feign与hystrix组合 Hystrix三态转换图 源码分析 流程图 原理流程图 核心实现流程…

【开源】基于Vue.js的社区买菜系统的设计和实现

项目编号&#xff1a; S 011 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S011&#xff0c;文末获取源码。} 项目编号&#xff1a;S011&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

11.13ASM图,FSM的一些verliog实现,串并转换

ASM图 除法器 FSM的verilog实现 状态机的状态就不用编码&#xff0c;而是用参数的定义进行转换 1. 在次态确定当中&#xff0c;只要w和y发生变化&#xff0c;就进行操作 在次态当中&#xff0c;只要时钟上升沿来临或者复位信号&#xff0c;就进行操作 2 Mealy型状态机 串…

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

【导师不教&#xff1f;我来教&#xff01;】同济计算机博士半小时就教会了我五大深度神经网络&#xff0c;CNN/RNN/GAN/transformer/LSTM一次学会&#xff0c;简直不要太强&#xff01;_哔哩哔哩_bilibili了解的五大神经网络&#xff0c;整理笔记如下&#xff1a; 视频是唐宇…

瑞萨RZ/G2L平台 初起动(SD卡启动)

文章目录 一 准备条件1 工具2 硬件3 镜像 二 烧录SD卡启动盘三 写Bootloader1 烧录文件2 启动烧录3 烧录 四 启动设置 一 准备条件 1 工具 ** BalenaEtcher&#xff08;俗称“ Etcher”&#xff09;&#xff0c;是一款快速将系统镜像文件&#xff08; .iso 或 .img 或 .zip或…

数据库实验报告(六)

实验报告&#xff08;六&#xff09; 1、实验目的 &#xff08;1&#xff09; 掌握关联查询的用法 &#xff08;2&#xff09; 掌握集合查询的区别和用法 &#xff08;3&#xff09; 掌握EXISTS的用法 2、实验预习与准备 &#xff08;1&#xff09; 了解ANY&…

精彩回顾|从架构到实践,AntDB融合型数据库揭秘

当今社会中的信息除了“多”&#xff0c;人们对于“效率”和“速度”的要求也越来越高。譬如&#xff0c;对于很多企业决策者来说&#xff0c;在当前的经济形势下需要尽一切可能降本增效。过去每周看看经营报表的习惯&#xff0c;现在慢慢转变为实时可视化分析企业当前的经营状…

「Verilog学习笔记」实现3-8译码器①

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 ① 本题要求根据38译码器的功能表实现该电路&#xff0c;同时要求采用基础逻辑门实现&#xff0c;那么就需要将功能表转换为逻辑表达式。 timescale 1ns/1nsmodule d…

ROS 学习应用篇(七)ROS中的坐标变换管理之tf广播与监听的编程实现

偶吼吼胜利在望&#xff0c;冲冲冲 老规矩新建功能包 工作空间目录下/src下开启终端输入 catkin_create_pkg learning_tf roscpp rospy tf turtlesim 如何实现tf广播 引入库 c python …

网络原理-IP/数据链路层协议

一. IP IP协议有两个版本,IPv4和IPv6.我们通常所用的IP协议,若没有特殊说明,默认都是IPv4. IPv4数量2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址.对于全世界的计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128位,是IPv4的4倍).但因为目前IPv4还广…

java集合,栈

只有栈是类 列表是个接口 栈是个类 队列 接口有双链表,优先队列(堆) add会报错 offer是一个满了不会报错 set集合 有两个类实现了这个接口

基于IDEA 进行Maven依赖管理

1. 依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…

基于Java+Vue+uniapp微信小程序居住证申报系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

分享一个自用的Win11护眼主题(无需下载)

先放上几张效果图 设置方法 首先&#xff0c;把主题设置为高对比度主题——沙漠。 然后点击编辑&#xff0c;依次设置为以下值 背景&#xff1a;#1C5E75文本&#xff1a;#FFF5E3超链接&#xff1a;#6EFFA4非活动文本&#xff1a;#FFF5E3选定文本&#xff1a;#903909、#8EE3F0…

Wordpress多语言插件:WPML插件使用教程,最佳的多语言建站方案

今天小编讲的是另外一款多语言插件WPML。相比Gtranslate采用的是机器翻译,难免存在翻译不准确,词不达意的情况,WPML可以支持人工翻译内容添加。 事先说明一点:用插件实现多语言较为方便,但此方法做出的多语言网站SEO性能一般,只建议展示站使用,如果想要SEO营销型多语言网…