汇编学习-汇编中的分段和段地址的定位

本文介绍了汇编语言中的分段概念,纠正了关于段分配的误解,详细阐述了段地址如何通过段名称赋值给寄存器,并通过实例解释了操作系统如何进行重定位,将段地址替换为实际内存地址的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说明以下的内容都是摸索出来的,不敢说一定正确,有不对的地方还请指正。

我在学习汇编的过程中一直不明白操作系统是如何分段的和如何将一个段地址赋给寄存器(如有个段data segment 那么 mov ax,data 是如何实现的)经过查找资料和摸索基本了解了其中原理,记录如下:

首先看如何分段,比如有如下代码

data segment

db ‘data’

data ends

我最初的理解是:当程序运行时在获得这个分段的信息后,会自动在内存中查找一段长为64K的未使用空间给这个段使用。我以为一个段固定必须是64K,并且不一定会被分配到内存的哪个地方。后来在实践中发现我的理解是错误的。

事实是:一个段最大占用空间为64K,而最小分配的空间是16个字节,并且总以16的倍数来分配空间。(如果段里面没有定义任何数据则不分配空间)

如上面你那个段在代码中分配的空间如下图所示:

clip_image002

那么如果程序中有多个段呢:

data segment

db ‘data’

data ends

data2 segment

db ‘data2’

data2 ends

data3 segment

db ‘da

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值