汇编语言学习

栈结构:

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当做程序的代码段来使用

        

posted @ 2025-12-03 11:09  chenlight  阅读(6)  评论(0)    收藏  举报  来源