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可正常运行。
第五题
第六题