【汇编】数据在哪里?有多长、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.mzph.cn/news/149170.shtml

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

相关文章

Typescript 面试题及其答案与代码示例

1.什么是 TypeScript,它与 JavaScript 有何不同。 答:TypeScript 是 JavaScript 的超集,为该语言添加了静态类型。它允许开发人员定义变量、函数参数和返回值的数据类型,这有助于在编译时而不是运行时捕获错误。这是一个例子&…

2.4路由日志管理

2.4路由/日志管理 一、静态路由和动态路由 路由器在转发数据时,需要现在路由表中查找相应的路由,有三种途径 (1)直连路由:路由器自动添加和自己直连的路由 (2)静态路由:管理员手动…

GPT-4V-Act :一个多模态AI助手,能够像人类一样模拟通过鼠标和键盘进行网页浏览。

内容来源:xiaohuggg GPT-4V-Act :一个多模态AI助手,能够像人类一样模拟通过鼠标和键盘进行网页浏览。 它可以模拟人类浏览网页时的行为,如点击链接、填写表单、滚动页面等。 它通过视觉理解技术识别网页上的元素,就像…

微信小程序 官方文档使用指南

官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ 触发事件 在wxml页面写逻辑代码js文件的调用 微信内部api

Git-概念与架构

GIT-概念与架构 一、背景和起源二、版本控制系统1.版本控制分类1.1 集中式版本控制1.2 分布式版本控制 2.Git和SVN对比2.1 SVN2.2 GIT 三、GIT框架1.工作区(working directory)2.暂存区(staging area)3.本地仓库(local…

nvm:轻松管理多个 Node 版本 | 开源日报 No.80

nvm-sh/nvm Stars: 67.6k License: MIT Node Version Manager,是一个 POSIX 兼容的 bash 脚本,用于管理多个活动 node.js 版本。nvm 可以让你通过命令行快速安装和使用不同版本的 Node。它可以在任何符合 POSIX 标准的 shell(sh、dash、ksh…

QFile文件读写操作QFileInFo文件信息读取

点击按钮选择路径,路径显示在lineEdit中 将路径下的文件的内容放在textEdit中 最后显示出来 !file.atend()//没有读到文件尾就一直读 file.readline表示按行进行读 追加的方式进行写 要是重新写的话用file.open(QIODevice::write) 用QFileInFo来读取…

这8个Wireshark使用技巧,一看就会!

今天就给你分享8个常用的Wireshark使用技巧,一看就会。如果是处理 HTTP,HTTPS 大家还是用还是用 Fiddler,但如果是其他协议比如 TCP,UDP,还是用wireshark。 今天给你准备了wireshark和Fiddler的安装包给你&#xff0c…

22. 深度学习 - 自动求导

Hi,你好。我是茶桁。 咱们接着上节课内容继续讲,我们上节课已经了解了拓朴排序的原理,并且简单的模拟实现了。我们这节课就来开始将其中的内容变成具体的计算过程。 linear, sigmoid和loss这三个函数的值具体该如何计算呢? 我们…

基于springboot实现电子招投标系统【项目源码】

基于springboot实现电子招投标系统演示 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计,其不仅继承了Spring框架原来有的优秀特性,而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原本的Spri…

Python学习笔记--数量词

数量词 来,继续加深对正则表达式的理解,这部分理解一下数量词,为什么要用数量词,想想都知道,如果你要匹配几十上百的字符时,难道你要一个一个的写,所以就出现了数量词。 数量词的词法是:{min,max} 。min 和 max 都是非负整数。如果逗号有而 max 被忽略了,则 max 没有…

​分享mfc140u.dll丢失的解决方法,针对原因解决mfc140u.dll丢失的问题

作为电脑小白,如果电脑中出现了mfc140u.dll丢失的问题,肯定会比较的慌乱。但是出现mfc140u.dll丢失的问题,其实也有很简单的办法,所以大家不用慌张,接下来就教大家解决办法,能够有效的解决mfc140u.dll丢失的…

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

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

html实现图片裁剪处理(附源码)

文章目录 1.设计来源1.1 主界面1.2 裁剪界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134455169 html实现图片裁剪处理(附源码),支持图片放大缩小&#…

uniapp的/绝对定位/相对定位/固定定位/粘滞定位

【[html5]你还分不清楚绝对定位和相对定位......】 相对定位一般配合绝对定位使用 <template><view class"content"><view style"background-color: black;width: 100%;height: 300px;position:relative;"><view class"one"…

比科奇推出5G小基站开放式RAN射频单元的高性能低功耗SoC

全新的PC805作为业界首款支持25Gbps速率eCPRI和CPRI前传接口的系统级芯片&#xff08;SoC&#xff09;&#xff0c;消除了实现低成本开放式射频单元的障碍 中国北京&#xff0c;2023年11月 - 5G开放式RAN基带芯片和电信级软件提供商比科奇&#xff08;Picocom&#xff09;今日…

开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势未来发展方向

开源vs闭源大模型如何塑造技术的未来&#xff1f;开源模型的优劣势&未来发展方向 写在最前面一、开源与闭源&#xff1a;定义与历史背景开源和闭源的定义开源大模型&#xff1a;社区驱动的创新 二、开源和闭源的优劣势比较开源大模型&#xff08;瓶颈&#xff09;数据&…

搭建 AI 图像生成器 (SAAS) php laravel

今天来搭一套&#xff0c;AI 图像生成器 是基于 Openai DALLE 2 和 Openai DALLE 3 以及 Stability AI 和稳定扩散 API 构建的脚本&#xff0c;为用户提供了使用简单的提示和大小生成独特自定义图像的可能性。在这个平台上&#xff0c;创意得以快速、高效地实现&#xff0c;借助…

基于 FFmpeg 的跨平台视频播放器简明教程(十一):一种简易播放器的架构介绍

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;一&#xff09;&#xff1a;FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;二&#xff09;&#xff1a;基础知识和解封装&#xff08;demux&#xff09;基于 FFmpeg 的跨平台视频…

面试其他注意事项

面试其他注意事项 一、面试反问 这个岗位的日常工作和主要职责是什么&#xff1f;咱们这边主要负责什么业务&#xff0c;用到了哪些技术呢&#xff1f;对于我们校招生有没有培养体系呢&#xff1f;脱产培训&#xff0c;还是边工作边熟悉&#xff1f;会有导师带嘛&#xff1f;…