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

文章目录

  • 前言
  • 一、汇编语言中数据位置的表达
    • 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.mfbz.cn/a/167193.html

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

相关文章

NextJS开发:ssr服务器端渲染页面,添加加载进度提示

nextjs中ssr服务器端渲染的页面加载速度慢的时候,需要显示一个如下图的加载进度提示,来优化用户体验。 nextjs框架中已经预留了加载动画的接口页面,我们只需要提那家加载动画tsx,处理页面逻辑就可以实现。 page.tsx 同级目录创建…

ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题

今天给大家安利一套现代 CSS 的教程,以前写网页的问题,现在都可以用新的写法来解决了。 ModernCSS.dev 是一个现代 CSS 语法的教程,讲解新的 CSS 语法如何解决一些传统问题,一共有30多课。 这套教程的作者是 Stephanie Eckles&am…

2023年中国中端连锁酒店分类、市场规模及主要企业市占率[图]

中端连锁酒店行业是指定位于中档酒店市场、具有全国统一的品牌形象识别系统、全国统一的运营体系、会员体系和营销体系的酒店。中端酒店通常提供舒适、标准化的房间设施和服务,价格较为合理,符合广大消费者的需求。其价格略高于经济型酒店,但…

【canvas】了解canvas,并实现会议预定记录钟表盘、页面水印

初识canvas Canvas 有什么用 Canvas 允许使用直线、曲线、矩形、圆形等基本图形绘制出复杂的图形 Canvas 可以加载图像,并进行各种处理,如裁剪、缩放、旋转等操作 Canvas 可以通过 JavaScript 控制,所以你可以利用帧动画原理,…

Latex学习

二 实例 1. \Delta_{w}\frac{\partial l}{\partial w_{i1}}weight:\frac{\partial l}{\partial x_{i1}} 效果如下 其中对于希腊字母的大小写来说,可以参考: 【LaTeX 语法】字母表示 ( 大写、小写、异体 希腊字母 | 粗体字母 | 花体字母 )_latex字母_韩…

大白话解释什么类加载机制

大家好,我是伍六七。 今天我们来聊聊一个 Java 面试必考基础题目:类加载机制和双亲委派机制。 Java 类的加载机制是 Java 虚拟机(JVM)中类加载(Class Loading)和链接(Linking)的过…

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

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

【cpolar】搭建我的世界Java版服务器,公网远程联机

🎥 个人主页:深鱼~🔥收录专栏:cpolar🌄欢迎 👍点赞✍评论⭐收藏 目录 前言: 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安…

数字IC前端学习笔记:时钟切换电路

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 有些时候我们需要在系统运行时切换系统时钟,最简单的方法就是使用一个MUX(数据选择器)选择输出的时钟,如下代码片所…

【C++】​——多态性与模板(其一)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

MySQL数据库入门到大牛_基础_09_子查询(子查询分类方法;单行子查询,多行子查询;相关子查询)

前面的第三章到第八章中,我们讲的是查询,查询的基本结构已经进行了介绍,聚合函数学习完后已经介绍了查询语句的完整的执行流程。 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。本章也是查询…

【开源】基于JAVA的校园二手交易系统

项目编号: S 009 ,文末获取源码。 \color{red}{项目编号:S009,文末获取源码。} 项目编号:S009,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模…

卫生纸标准及鉴别

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

element中el-upload上传文件去掉文件列表

<template><el-uploadref"upload"action"/api/upload":limit"1"accept.xlsx:on-success"uploadSuccess":on-error"uploadError"><el-button size"small" type"primary">点击上传<…

传输层协议 - UDP(User Datagrm Protocol)

文章目录&#xff1a; 传输层再谈端口号端口号划分知名端口号&#xff08;Well-Know Port Number&#xff09;netstat 命令iostat 命令pidof UDP 协议UDP 协议格式UDP 协议的特点面向数据报UDP 的缓冲区UDP 使用注意事项UDP 协议的应用基于 UDP 的应用层协议 在 DDoS 攻击中如何…

【数字图像处理】Gamma 变换

在数字图像处理中&#xff0c;Gamma 变换是一种重要的灰度变换方法&#xff0c;可以用于图像增强与 Gamma 校正。本文主要介绍数字图像 Gamma 变换的基本原理&#xff0c;并记录在紫光同创 PGL22G FPGA 平台的布署与实现过程。 目录 1. Gamma 变换原理 2. FPGA 布署与实现 2…

◢Django 分页+搜索

1、搜索数据 从数据库中获取数据&#xff0c;并进行筛选&#xff0c;xx__contains q作为条件&#xff0c;查找的是xx列中有q的所有数据条 当有多个筛选条件时&#xff0c;将条件变成一个字典&#xff0c;传入 **字典 &#xff0c;ORM会自行翻译并查找。 筛选电话号码这一列…

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

2021年3月青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a;100.00 题数&#xff1a;37一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09;二、判断题&#xff08;共10题&#xff0c;每题…

.NET 8 Video教程介绍(开篇)

教程简介 本文将简单描述视频网站教程&#xff0c;视频网站是一个类似于腾讯视频一样的网站&#xff0c;视频资源用户自己上传&#xff0c;然后提供友好的界面查看视频和搜索视频&#xff0c;并且提供管理页面对于视频进行管理&#xff0c;我们将使用Blazor作为前端&#xff0…
最新文章