4.5 代码段、数据段、栈段,dup指令

2024-03-31 03:28

本文主要是介绍4.5 代码段、数据段、栈段,dup指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4.5 代码段、数据段、栈段,dup指令

1. 代码段

1.1 MASM内部以数据位的个数定义了多种数据类型

  • byte,db,8位(define byte)
  • word,dw,16位(define word)
  • dword,dd,32位(define double word)
  • qword,dq,64位(define,quadra word)

1.2 dw和db

  • 用dw往内存里面存数据时,每一个数占16位,16进制不能以字母开头,如果不足16位会自动往前面补0,高位在前,低位在后,要考虑存取顺序
  • 用db往内存里面存数据时,每一个数占8位,每次存两个数,不足两个数补0,不用考虑存取顺序

image.png

image.png

左边是dw,右边是db,都是数据,下面都是代码,都存放在内存当中

1.3 start标记

  • 为了让程序从指定位置开始,用start标记,不然内存里面,数据和代码是一起存的
assume cs:codesg
codesg segmentdw 123h,456h,789h,0abch,0defh  //定义字型数据start:    //csip地址指向这里,程序从这里开始运行mov ax,3mov cx,11call sinc bxinc bxint 21h
s:add ax,axloop scodesg ends    //代码段结束
end start      //start开始,start结束

image.png

image.png

image.png

  1. csip直接指向第一句代码mov ax,3,地址为076a:000a,程序也由这里开始执行
  2. 数据从076a:0000开始存放,代码从start开始,也就是mov ax,3

2. 将数据、代码、栈放入不同的段

  • 如果数据、栈和代码需要的空间超过64KB,就不能放在一个段中(一个段的容量不能大于64KB,这是8086模式的限制)
  • 我们要用多个段来存放数据、代码和栈
  • 如果我们要存入重复的数据可以用dup指令(duplicate)db 重复的次数 dup (重复的字节型数据)
  • 代码段、栈段和数据段它们的存储空间是连续的,至少占了16个字节
assume cs:codesg,ds:data,ss:stack    //代码段,数据段,栈段
data segment    //数据段开始db 'hello,world'    //可以存放一句话dw 123h,456h,789h,0abch,0defh  //定义字型数据db 3 dup (1,2,3)    //定义字节型数据,复制3个1,2,3;实际存储:01,02,03,01,02,03,01,02,03db 3 dup ('abc','def')    //实际存储abc,def,abc,def,abc,def
data ends    //数据段结束stack segment    //栈段开始db 10 dup (0)    //定义字节数据,复制10个0来开一个栈空间
stack ends    //栈段结束codesg segment    //代码段开始start:    //csip地址指向这里,程序从这里开始运行mov ax,3mov cx,11call sinc bxinc bxint 21h
s:add ax,axloop scodesg ends    //代码段结束
end start      //start开始,start结束

image.png

image.png

image.png

  • 'hello,world’开始存入数据,以ASCII码的形式转入编号
  • 紧接着存入数据,然后接着存入字符’abc’,‘def’
  • 最后存入10个0来开辟一段栈空间,但是至少占16个字节,所以占了一行,也体现了存储的连续性
  • 然后便开始存入代码

这篇关于4.5 代码段、数据段、栈段,dup指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/863286

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock