6.2 在代码中使用栈
让我们利用栈,将程序中定义的数据逆序存放。
实现代码如下:
cs:codesg |
这里将以上代码对比下面这个代码,实现0:0~0:15单元中的内容的正序改写,通用利用栈来完成:
cd:codesg |
对比和第一个程序的差别,这个程序是入栈一行代码直接出栈到这一行,保证程序的正方向。
6.3 将数据、代码、栈放入不同的段
目前, 如果我们对于数据,代码,栈全部存放在代码段中有两个问题:
- 非常混乱
- 数据、栈和代码需要的空间如果超过64KB,就无法放在一个段中(x86cpu)
我们可以用下面的代码来解决这两个问题:
cs:code, ds:data, ss:stack |
注意:
- 源程序中”data”, “code”, “stack”均只是我们的命名,CPU不会识别
- 伪指令中
assume cscode, ds:data, ss:stack将cs, ds, ss分别与code, data, stack相连。但其是伪指令,是由编译器执行的,cpu同样无法识别 - CPU的识别其实靠的是控制cs, ds, ss的相关地址来识别相应的数据信息的