复习-第六章 包含多个段的程序

本文深入探讨了在代码段中使用数据和栈的技巧,解释了如何解决内存空间被数据占用的问题,通过指明源程序入口位置实现指令的正确执行。同时,分析了栈空间大小设定的原因,并介绍了将数据、代码、栈放入不同段的方法,强调了start标号在定位不同段中的关键作用。

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

在这里插入图片描述
在这里插入图片描述

6.1在代码段中使用数据

1、dw

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、dw的位置和程序的位置

在这里插入图片描述
在这里插入图片描述

结论

在这里插入图片描述

3、现在的情况是,内存空间的前16个是数据,

程序的入口就是数据了,我们希望是指令,

也就是16个单元之后的指令,我们怎么么搞?

4、解决办法:指明源程序中入口的位置。

在这里插入图片描述

start是标号。有关start的讲解。

在这里插入图片描述

重要,新的框架。

在这里插入图片描述

6.2在代码段中使用栈

1、利用栈,将程序中定义的数据逆序存放。

我们定义数据,然后程序执行的时候,会自动申请空间,这个没什么问题吧,就申请空间。
在这里插入图片描述

2、代码

0123h占几个字节?

最后那个baiH代表16进制。16进制中一位数字是4个二进制位,du四位数是16个二进制位。zhi一个字节是8个儿进dao制位,所有0123H占2个字节。
0123H = 0000 0001 0010 0011B
在这里插入图片描述

3、为什么要定义16个字的栈空间(32个字节)

8个字不就够了吗?

正常来说8个字就够了,但是实际运行过程,用8个会出错。

4、为什么是sp,30h

dw 8个数据 16个字节,0Fh
下一行:10h,1f
下一行:20h,2f
sp指向,栈底的下一个元素。
2f+1=30h
在这里插入图片描述

检测点6.1

在这里插入图片描述
mov cs:[bx],ax

这里没懂

在这里插入图片描述
在这里插入图片描述
cs
1ah
pop cs:[bx]

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

在这里插入图片描述

利用栈,将程序中定义的数据逆序存放。

在这里插入图片描述
在这里插入图片描述

段名就是一个标号

在这里插入图片描述
在这里插入图片描述

data、code、stack的作用

在这里插入图片描述

程序是通过什么来定位不同的段?

通过start定位,cs段,

在代码段中,可以设置栈段和数据段在哪。就是这样定位的。

实验5编写、调试具有多个段的程序

第一题

在这里插入图片描述

在这里插入图片描述
1、不变
2、电脑不同,答案不同
3、通过实验可以得到结论。
X
X-2
X-1
在这里插入图片描述
https://www.cnblogs.com/smallblog/p/10041818.html

第二题

在这里插入图片描述
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为 ((N/16+1)*16 。(N一般为16的倍数,如果不是16的倍数,则加一,再×16。若为16的倍数,则直接为N)

第三、四题

在这里插入图片描述
在这里插入图片描述

设程序加载后,code段的段地址为x,则data段的段地址为x+3,stack的段地址为x+4;
3可正常运行。

第五题

在这里插入图片描述
在这里插入图片描述

第六题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值