【汇编】数据在哪里?有多长、div指令实现除法、dup设置内存空间

news2024/9/22 1:33:52

文章目录

  • 前言
  • 一、汇编语言中数据位置的表达
    • 1.1 汇编中有哪几种数
      • 1.立即数(idata):
      • 2.寄存器(Register):
      • 3.内存(Memory):
      • 4.段地址(Segment Address,SA):
      • 5.偏移地址(Effective Address,EA):
    • 1.2 指令要处理的数据有多长?
      • 字word操作
      • 字节byte操作
      • 用word ptr或byte ptr指明
  • 二、div指令
    • 2.1 div介绍
    • 2.2 当除数为不同大小时
      • 除数为8位
      • 除数为16位
    • 2.3 示例
  • 三、dup设置内存空间
    • 3.1 dup指令是什么?
    • 3.2 示例
    • 3.3 dup的使用格式
  • 总结


前言

汇编语言是一种底层的编程语言,直接与计算机硬件交互。在这个世界中,我们需要关心数据存储的位置、数据的大小,以及如何进行一些基本的操作,比如除法运算。本文将带你探索这其中的一些概念,首先,我们将了解数据在计算机内存中的存储方式,考察数据的位置和大小。接着,我们将深入研究汇编语言中的 div 指令,它是如何实现除法运算的。最后,我们将介绍 dup 这个神秘的操作符,它在汇编语言中是如何帮助我们设置内存空间的。

数据在哪里?有多长:

计算机内存是程序运行时存储和访问数据的地方。但是,数据并不是随意散落在内存中的,而是按照一定规则组织的。在汇编语言中,我们需要关心数据的位置和大小。了解数据存储的位置对于正确读写数据至关重要。同时,每个数据都有自己的大小,这影响着它在内存中占据的空间大小。理解数据的位置和大小是编写高效程序的基础。

div指令实现除法:

在计算机科学中,除法是一项基本的数学运算。在汇编语言中,我们使用 div 指令来实现除法运算。这个指令负责将一个寄存器中的值除以另一个寄存器或者内存中的值,并将商和余数存放在指定的寄存器中。深入了解 div 指令的原理,能够让我们更好地利用计算机的底层特性进行数学运算。

dup设置内存空间:

编写程序时,我们常常需要为数组或者缓冲区分配内存空间。在汇编语言中,使用 dup 操作符可以方便地重复定义数据块,从而分配一块连续的内存空间。这种操作对于有效地管理内存是至关重要的。了解如何使用 dup 设置内存空间,将使我们能够更灵活地处理程序中的数据结构,提高代码的可读性和可维护性。


一、汇编语言中数据位置的表达

1.1 汇编中有哪几种数

当我们谈论汇编语言时,有几个关键的概念需要理解:立即数(Immediate Data,idata)、寄存器(Register)、内存(Memory)、段地址(Segment Address,SA)和偏移地址(Effective Address,EA)。

1.立即数(idata):

立即数是一个直接给定的数值,它被直接包含在指令中。当我们在汇编指令中看到像 mov ax, 5 这样的语句时,其中的 5 就是一个立即数。这个数是直接提供给指令的,而不是从寄存器或内存中读取的。

2.寄存器(Register):

寄存器是计算机中的小型存储单元,可以快速存储和检索数据。在汇编语言中,我们使用寄存器来执行各种操作,如存储临时数据、进行运算等。例如,mov ax, 5 中的 ax 就是一个寄存器。

3.内存(Memory):

内存是计算机用于存储数据和程序的地方。在汇编语言中,我们可以通过使用内存地址来读取或写入数据。例如,mov ax, [bx] 意味着将 bx 寄存器中的地址指向的内存数据加载到 ax 寄存器中。

4.段地址(Segment Address,SA):

由于早期计算机硬件的限制,内存被划分为许多段。段地址是一个指向这些内存段的地址。在汇编语言中,我们通常使用段寄存器(如 ds、cs 等)来存储段地址。

5.偏移地址(Effective Address,EA):

偏移地址是相对于段地址的位移量,用于唯一标识内存中的特定位置。例如,在指令 mov ax, [bx+2] 中,[bx+2] 就是一个偏移地址,它告诉计算机从 bx 寄存器中的地址开始,向后偏移2个单位,找到数据的位置。

总体来说,汇编语言通过使用寄存器、立即数、内存段地址和偏移地址来执行各种计算机操作。理解这些概念对于编写和理解汇编语言程序至关重要。

1.2 指令要处理的数据有多长?

字word操作

mov ax,1
mov bx,ds:[0]
mov ds,ax
mov ds:[0],ax
inc ax
add ax,1000

mov ax,1:

意思是将寄存器 ax 的值设置为 1。
通俗来说,就是给 ax 寄存器赋值为 1。
mov bx,ds:[0]:

意思是将 ds 段的偏移地址为 0 的内存数据加载到寄存器 bx 中。
通俗来说,就是把 ds 段中存储的数据(在偏移地址为 0 处)取出来,放到 bx 寄存器里。
mov ds,ax:

意思是将 ax 寄存器的值设置为新的 ds 段地址。
通俗来说,就是把 ax 寄存器的值作为新的数据段地址。
mov ds:[0],ax:

意思是将 ax 寄存器的值存储到 ds 段的偏移地址为 0 的内存位置。
通俗来说,就是把 ax 寄存器的值放到 ds 段中偏移地址为 0 的地方。
inc ax:

意思是将 ax 寄存器的值增加 1。
通俗来说,就是把 ax 寄存器的值加 1。
add ax,1000:

意思是将 ax 寄存器的值加上 1000。
通俗来说,就是把 ax 寄存器的值加上 1000。

字节byte操作

mov al,1
mov al,bl
mov al,ds:[0]
mov ds:[0],al
inc al
add al,100

mov al,1:

将寄存器 al 的值设置为 1。
换句话说,就是给 al 寄存器赋值为 1。
mov al,bl:

将寄存器 bl 的值复制到寄存器 al。
这行代码的效果是,al 的值变成了和 bl 寄存器相同。
mov al,ds:[0]:

从 ds 段的偏移地址为 0 的内存位置读取数据,然后将其存储到寄存器 al 中。
换句话说,就是把 ds 段中偏移地址为 0 的数据读取到 al 寄存器中。
mov ds:[0],al:

将寄存器 al 的值存储到 ds 段的偏移地址为 0 的内存位置。
换句话说,就是把 al 寄存器的值写入到 ds 段中偏移地址为 0 的地方。
inc al:

将 al 寄存器的值增加 1。
换句话说,就是把 al 寄存器的值加 1。
add al,100:

将 al 寄存器的值加上 100。
换句话说,就是把 al 寄存器的值加上 100。

用word ptr或byte ptr指明

mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2
mov byte ptr ds:[0],1
inc byte ptr [bx]
inc byte ptr ds:[0]
add byte ptr [bx],2

mov word ptr ds:[0],1:

将值 1 存储到 ds 段的偏移地址为 0 的内存位置。
换句话说,就是把数字 1 放到 ds 段中偏移地址为 0 的地方,而且因为是 word ptr,表示存储的是一个字(16位)的数据。
inc word ptr [bx]:

将 bx 寄存器所指向的内存位置中的值增加 1。
换句话说,就是把 bx 寄存器指向的内存中的数据(假设是一个字),增加 1。
inc word ptr ds:[0]:

将 ds 段的偏移地址为 0 的内存位置中的值增加 1。
换句话说,就是把 ds 段中偏移地址为 0 的数据(假设是一个字),增加 1。
add word ptr [bx],2:

将 bx 寄存器所指向的内存位置中的值增加 2。
换句话说,就是把 bx 寄存器指向的内存中的数据(假设是一个字),增加 2。
总体来说,这段代码涉及了内存中的数据存储和读写操作,以及对存储在内存中的值进行递增和加法运算。 word ptr 表示每次操作的是一个字的数据,而 ds:[0] 则指明了内存位置。

二、div指令

2.1 div介绍

div是除法指令,使用div作除法的时候
被除数:(默认)放在AX 或 DX和AX中
除数:8位或16位,在寄存器或内存单元中
结果:……

2.2 当除数为不同大小时

除数为8位

当除数为8位,被除数为ax里面的值
除法的位数示例
6879H÷A2H:商A5,余FH

除数为16位

当除数为16位,被除数为ax和dx里面的值
除法的位数示例
12345678H÷2EF7H:
商633AH,余2D82H
那么使用ax和dx一起的要这样:
(dx)*10000H+(ax)除数为这样算

2.3 示例

在这里插入图片描述

三、dup设置内存空间

3.1 dup指令是什么?

在汇编语言中,dup 是一种伪操作符,用于在程序中为数组或缓冲区分配内存空间。它通常与 times 操作符一起使用。

具体而言,dup 用于重复一段数据或变量的定义多次,从而分配一块连续的内存空间。这在创建数组或缓冲区时非常有用。

3.2 示例

指令 功能 相当于
db 3 dup (0) 定义了3个字节,它们的值都是0 db 0,0,0
db 3 dup (0,1,2) 定义了9个字节,由0、1、2重复3次构成 db 0,1,2,0,1,2,0,1,2
db 3 dup (‘abc’,’ABC’) 定义了18个字节,构成’abcABCabcABCabcABC’ db ‘abcABCabcABCabcABC

3.3 dup的使用格式

db 重复的次数 dup (重复的字节型数据)
dw 重复的次数 dup (重复的字型数据)
dd 重复的次数 dup (重复的双字数据)


总结

汇编语言是一门强大而底层的编程语言,深入了解其中的概念对于编写高效的程序至关重要。通过了解数据的存储方式、掌握 div 指令实现除法运算的原理,以及使用 dup 操作符设置内存空间,我们能够更好地理解和运用汇编语言的特性,从而写出更为优雅和高效的代码。希望本文能够为你打开汇编语言的一扇门,让你更深入地了解计算机底层的运行原理。

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

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

相关文章

卫生纸标准及鉴别

一、标准分类及含义 (1)标准分类 ①GB——国家强制标准(即最低标准) ②GB/T——国家推荐标准 ③QB——轻工行业标准 ④QB/T——轻工行业推荐标准 (2)含义 ①国家标准是指国家标准化主管机构批准发布的。…

RT-DETR优化改进:SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能

🚀🚀🚀本文改进:SEAM、MultiSEAM分割物体与物体相互遮挡性能 🚀🚀🚀SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; RT-DETR模型创新…

[和ChatGPT学编程]Python Requests 简介

requests 是一个流行的 Python 库,用于发送 HTTP 请求。它提供了简洁而友好的 API,使得发送 HTTP 请求变得简单而直观。requests 具有许多强大的功能,适用于各种 HTTP 请求场景,包括 GET、POST、PUT、DELETE 等。 目录 requests 库…

Tomcat 启动 HTTP状态 404 - 未找到

Tomcat 启动 HTTP状态 404 - 未找到 tomcat启动的项目访问地址实际是根据应用程序上下文的目录来决定的,而不是服务器那边配置的URL的地址来决定的

nginx学习(3)Nginx 负载均衡

Nginx 负载均衡 实战案例 实现效果 浏览器地址栏输入地址 http://172.31.0.99/oa/a.html,负载均衡效果,平均在 8083 和 8084 端口中,刷新浏览器,显示不同 一、配置 1、先创建2个文件夹tomcat8083和tomcat8084,并将…

JSP 四大域对象

我们来说说JSP的四大域对象 首先 我们要了解他们是四种保存范围 第一种 是 Page范围 只作用于当前界面 只要页面跳转了 其他页面就拿不到了 第二种 request范围 在一次请求中有效 就是 我们服务端指向某个界面 并传递数据给他 那么 如果你是客户端跳转就不生效了 第三种 sessi…

internet download manager2024中文绿色版(IDM下载器)

在现代互联网时代,文件下载已经成为我们日常生活中必不可少的一项技能。无论是下载软件、音乐、视频还是其他文件,一个高效的下载方法能够为我们节省时间和精力。本文将为您提供一份简明扼要的下载教程,让您轻松掌握文件下载的技巧。 intern…

2021年3月青少年软件编程(Python)等级考试试卷(一级)

2021年3月青少年软件编程(Python)等级考试试卷(一级) 分数:100.00 题数:37一、单选题(共25题,每题2分,共50分)二、判断题(共10题,每题…

vue2通信方法(最全)

前言 数据传递是框架的核心要素之一,也是在业务开发中极其重要的技术.熟练掌握所有的通信方法,是开发者必须具备的技能。 这篇文章我将会把vue2所有的通信的方法都形成简单易懂的demo。 在我的分类中,通信方法有两种大类型: 1.vue框架提供的通信方法 2.插件及其他通信方法…

指针学习(五)

一.函数指针数组 定义:函数指针放进数组中,就叫函数指针数组,准确的说,将一个函数的地址存到⼀个数组中 那这个数组就叫函数指针数组。 int (*pi[5])(int); 解读:pi先和[]结合,因此是数组,加i…

Leetcode—5.最长回文子串【中等】

2023每日刷题(三十五) Leetcode—5.最长回文子串 中心扩展法算法思想 可以使用一种叫作“中心扩展法”的算法。由回文的性质可以知道,回文一定有一个中心点,从中心点向左和向右所形成的字符序列是一样的,并且如果字符…

Threejs_04 gui调试开发

threejs的快捷调试工具就是这玩意,那么如何使用呢?? 使用gui调试开发 引入gui实例 //导入lil.gui // import * as dat from "dat.gui"; // 旧 import { GUI } from "three/examples/jsm/libs/lil-gui.module.min.js";…

Vatee万腾科技创新之舟:Vatee数字化力量引领未来的独特路径

在数字化的大潮中,Vatee万腾如一艘科技创新之舟,在未来的海洋中翱翔。vatee万腾以强大的数字化力量为桨,引领着行业向着新的、独特的路径前行,塑造着数字时代的未来。 Vatee万腾不仅仅是一家科技公司,更是一艘创新之舟…

数据结构与算法编程题2

逆置线性表&#xff0c;使空间复杂度为 O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_SqList(SqList& …

外贸人如何向国外客户展现我们的合作诚意

最近听直播&#xff0c; 一个小伙伴说自己在国外找了一个合作伙伴&#xff0c; 让他代表自己的公司和当地的客户沟通&#xff0c;然后给对方结算佣金&#xff0c;虽然对方口头答应好好的&#xff0c;但是好像做事情并不用心的样子。 比如自己之前去他们当地设展的时候邀请对方…

MAX/MSP SDK学习01:Object的基本构成、创建销毁行为函数的定义、属性的赋值、以及相关注意事项

Object的基本构成、创建&销毁&行为函数的定义、属性的赋值、以及相关注意事项。 #include "ext.h" // standard Max include, always required #include "ext_obex.h" // required for new style Max object// object struct&#xff0c;定义属…

ruoyi-vue前后端分离版本验证码实现思路

序 时隔三个月&#xff0c;再次拿起我的键盘。 前言 ruoyi-vue是若依前后端分离版本的快速开发框架&#xff0c;适合用于项目开始搭建后台管理系统。本篇文章主要介绍其验证码实现的思路。 一、实现思路简介 1、后端会生成一个表达式&#xff0c;比如1 2 ? 3&#xff0…

Django 入门学习总结2

通过学习&#xff0c;我们可以实现一个简单的投票系统。这个投票系统有两部分组成。 公共部分&#xff0c;公众可以查看和进行投票。管理员可以进行增加、删除、修改投票信息。 这里投票系统Python语言版本为3.10.13&#xff0c;Django Web框架版本为4.2.7。 投票系统的实现…

湖科大计网:传输层

一、传输层概述 一、基本概念 传输层是端到端的协议。 因特网的两种不同的传输层协议&#xff1a; TCP&#xff1a;面向连接 UDP&#xff1a;无连接 我们在学习的过程中&#xff0c;只需要关注传输层之间的通信&#xff0c;不需要关注传输层协议数据是经过路由器转发至目的网络…

利用python下的matplotlib库绘制能突出显示的饼状图

需求描述 根据已有的数据绘制一个占比图&#xff0c;期望能对其中的部分占比成分进行突出显示。 原始数据如下&#xff1a; 国外投资&#xff08;5%&#xff09;、公司投资&#xff08;8%&#xff09;、地方投资&#xff08;7%&#xff09;、中央财政&#xff08;80%&#xff…