以下是文字提取部分,阅读完毕的同学可以离开了
我前面已经讲过;栈;
使用push和pop进行;入栈和出栈;
但栈空间是;系统自动分配;的
我们也可以;自己定义;这段空间
下面这段程序是把八个数据;倒过来存放;
因为ss:sp指向;栈顶;
我们要把ss:sp;重新设置;
数据段占用;16字节;
因此我们的栈空间是:;16~31;
我们要把sp设置为;32;
如果不知道为什么是32的请返回3.1
;一个段;中既有数据又有栈
是不是显得;很没有节操;
而且8086规定一个段不能超过;64kb;
;莫要慌张;
我来告诉你一个;好方法;
下面的代码定义;多个段;
他与定义代码段的方法;别无二致;
;不同之处;在于
不同的段具有;不同的;段名
段已经定义完毕
;引用data;就可知道数据段的段地址
就像下面所示
请注意:8086不允许将数值;直接送入;段寄存器
所以你;不能;写成这样
放眼望去;整个程序;
定义不同的段,方法是;一样的;
如何;对段进行引用;是核心
我们要把;data赋值给ds;
把;stack赋值给ss;
我们给数据段起了个别名:;data;
但此时cpu并;不知道ds是谁;
我们又用assume;将ds与data关联;
此时cpu同样不知道;谁是ds;
因为assume是;伪指令;
只有;编译器;清楚它的意图
当且仅当我们打出;上述指令;后
才能;控制cpu;
你可能要问
既然栈段和数据段都使用了;mov指令;
让段寄存器;指向段地址;
为什么;不见;cs:ip也这么使用呢
因为;end start;这个命令
我前面有讲的哦
问这个问题的都应该给我;赞赏1元;
;作为不好好学习的惩罚;
最后
;欢迎光临小站:yuruotong.com;
Process finished with exit code 0