一步步学汇编(二)栈

来源:互联网 发布:小米5抢购软件 编辑:程序博客网 时间:2024/05/21 14:06

今天还是些基础的东西,继续熟悉和玩debug

 

mov指令可完成的传送:
(1)将数据直接送入寄存器;
(2)将一个寄存器中的内容送入另一个寄存器
(3)将内存单元中的内容送入寄存器([{0}]  {0}所表示的数字为偏移地址
,而段地址由段地址寄存器ds中的内容决定)

8086不支持直接将数据送入段寄存器,所以,必须先将地址值送入通用寄存器,
再由通用寄存器存入段寄存器

发觉debug 中用-a写代码,-t执行(如果对-t后不加参数只能写一条
执行一条,不能批量),所以要执行几条指令应将指令所占字节数作为
参数写在 -t后,例如 要执行的代码占10个字节,则应为-t A。

段寄存器只有不能用立即数给它传值,其他都是可以的
在8086PC机中我们可以将一组长度为N(N<=64K)、地址连续、起始地址为
16的倍数的内存单元作为专门存储数据的内存空间,从而定义一个数据段

栈以高地址作为栈底,低地址作为栈顶

栈顶的段地址存放在段寄存器SS中,偏移地址存放在SP中

当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向
栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移
地址+2(这其实和我们在数据结构中将空的情况设为-1类似)

pop和push 后面可直接接内存单元、通用寄存器、段寄存器

入栈一个字,sp减2,出栈一个字,sp加2

push,pop等栈操作指令,改变的只是SP,也就是说栈顶最大变化范围为
0~FFFFH

Debug在执行修改寄存器SS的指令时,下一条指令也跟着执行。

 

 

明天可以开始写程序了~~~太爽了