《汇编语言》学习(六)多个段的程序

本文介绍了《汇编语言》第六章关于多段程序的内容,包括内存空间划分、源程序的组织方式以及段名和标号的作用。重点讨论了在程序加载时CS、IP、DS、SS寄存器的变化,强调了段地址和偏移地址的概念,并通过编程实践解释了段地址的16位对齐原则。同时,探讨了数据段、代码段和堆栈段在内存中的分布和调整。

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

    《汇编语言》第六章主要讲述“如何编写包含多个段的汇编源程序”。本章的文字内容不多,主要通过编程实践来理解汇编源程序架构的含义,通篇学下来,我觉得有以下几点需要理解清楚:


1,这里所说的多个段(segment),从汇编“程序”的角度来说,它指的是程序所占用的内存空间的划分,大致分为:data segment、stack segment和code segment。其实际就是指定运行时CPU的DS、SS和CS这三个寄存器的值。

2,但是,从源程序的角度来看,它指的是代码的组织方式。源程序分成多个段,是的代码的层次更清晰。

3,我们通常讲的多个段,更多的还是从源程序的角度来说的。事实上,一个段的源程序,通过设置CPU的寄存器也可以划分程序的内存空间。


4,汇编语言通过在源程序中使用段名(name)来标记各个段。

5,源程序中的段名(name)和标号(label),它们本质上都代表一个地址。在debug下反汇编,我们可以看到,段名和标号都被它们代码的地址值替代了。

6,不同的是,段名代表的是段地址(SA),标号代表的是偏移地址(EA)。


7,源程序通过“end+label”指定入口地址(entry),当然,这个入口地址仅仅是偏移地址。默认为0。

8,这个入口地址的信息被记录在.exe的描述信息中,对应“PSP(程序段前缀)”。

9,程序加载的时候,CS由系统指定(或者说由加载程序指定,shell);加载程序会搜索PSP,根据其中的entry,设置IP的值,默认为0。

10,严格来说,单段的程序只需要根据entry修改IP的值,多段的程序,则需要修改CS的值,CS的值按16位对齐,IP的值为0。

11,IP的值为16位,范围为0-255,它能开辟的空间有限,故单段的程序不适合需要大内存的应用。而CS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值