汇编语言学习
栈结构:
PUSH:入栈指令
POP:出栈指令
push ax :将ax寄存器中的数据送往栈中
pop ax:从栈顶取出数据送入ax寄存器中
(以字为单位对栈进行操作)
问题:CPU是如何知道一段内存空间被当做栈来使用的呢?
回答:8086cpu中,有两个与栈相关的寄存器:
SS栈段寄存器---用于存放栈顶的段地址
SP栈顶指针寄存器---用于存放栈顶的偏移地址
段地址+偏移地址都确定了,那么栈的起始地址就确定了。
注意:任何时刻,SS:SP都指向栈顶元素
汇编中涉及的三种段:
一、数据段
1、将段地址放在DS中
2、用mov、add、sub等访问内存单元的指令时,CPU将我们定义的数据段中的内容当做数据段来访问
二、代码段
1、将段地址放在CS中,将段中第一条指令的偏移地址放在IP 中
2、CPU将执行我们定义的代码段中的指令
三、栈段
1、将段地址放在SS中,将栈顶单元的偏移地址放在SP中
2、CPU在需要进行栈操作(push、pop)的时候,就将我们定义的栈段当做栈空间来使用
程序中的三种伪指令
一、段定义
1、一个程序是由多个段组成的,这些段用来存放代码、数据或当做栈空间使用
2、一个有意义的汇编程序中至少要有一个段,这个段用来存放代码
3、定义程序中的段:每个段都需要有段名,如下
codesg segment --段名 段的开始
..............
codesg ends ---段名 段的结束
二、end
1、汇编程序的结束标记,若程序结尾处不加end,编译器在编译程序的时候,无法知道程序在何处结束。
三、assume
1、assume cs:codesg
是指寄存器CS与codesg相关联,将定义的codesg当做程序的代码段来使用

浙公网安备 33010602011771号