首页 > 编程语言 >【汇编】栈

【汇编】栈

时间:2023-08-01 11:47:51浏览次数:34  
标签:汇编 sp 栈顶 pop 地址 push 指针

栈的基础概念

先出后出的一种数据结构。

栈的地址

由ss:sp指向的内存地址位置为栈段地址,栈的大小由sp控制,sp是栈顶指针,任意时刻指向栈顶。

sp指针当有数据入栈时,从高位地址移向低位地址。
当栈为空的时候,栈内没有元素,也就不存在栈顶元素。ss:sp指向栈的最底部单元下面的单元,地址即为栈最底部的字单元的偏移地址 + 2。

push

入栈指令

mov ax, fffa
; 只能push字形数据。
push ax

push数据后,sp指针移动。

pop

出栈指令

pop ax

pop出来的数据后,sp指针移动,数据出栈不在内存中。

栈的最大空间

64KB,SP 取值范围是 0 ~ FFFFH。
当有16根地址线时,65536个地址(字节),因为 1KB = 1024字节, 所以65536 / 1024 = 64,求得64KB。

栈的越界

写程序的时候要注意栈顶超界的问题,执行出入栈的时候都要注意越界。

标签:汇编,sp,栈顶,pop,地址,push,指针
From: https://www.cnblogs.com/hatsuzuki/p/17596037.html

相关文章

  • 【汇编】王爽《汇编语言(第3版)》相关习题
    P25检测点2.2(1)偏移地址的取值范围在0H~FFFFH之间。仅通过变化偏移地址寻址,根据物理地址计算公式:段地址*10H+偏移地址。已知段地址固定0001H,即最小物理地址为00010H,最大地址为1000FH。(2)设偏移地址为x,即公式为:SA*10H+x=20000H。偏移地址的取值范围......
  • gdb 反汇编disas源码排列问题
    问题在开发过程中,可能需要查看cpp文件生成的汇编代码来确认一些问题。由于单纯的汇编代码看起来并不太容易捋清楚内部逻辑,所以最好能够把源代码的位置列出来。在gdb的早期版本中,这个功能是通过disas命令的/m修饰符(选项)来实现的。如果使用过这个选项就会发现,这个功能显示的结果......
  • 汇编-jmp无条件转移指令
             ......
  • x86-64 汇编传参
    关于64位汇编的参数传递当参数少于7个时,参数从左到右放入寄存器:rdi,rsi,rdx,rcx,r8,r9。当参数为7个以上时,前6个与前面一样,但后面的依次从“右向左”放入栈中,即和32位汇编一样。参数个数大于7个的时候H(a,b,c,d,e,f,g,h);a->%rdi,b->%rsi,c->%r......
  • 汇编与C
     @汇编中的符号@1.指令:能够编译成议题哦32bit机器码,并且能被cpu识别和执行@2.伪指令:本身不是指令,编译器可以将其替换成若干条指令@3.位操作:不会生成指令,只是在编译阶段告诉编译器这么编译@ARM指令集@1.数据处理指令:进行数学运算、逻辑运算@2.跳转指......
  • 汇编语言中ifidn和ifdif的作用
    来源在isa-l项目里的汇编文件中看到了有ifidn之类的写法,代码如下。第一遇到,便查阅资料记录一下用法。%ifidn__OUTPUT_FORMAT__,elf32[bits32]%elsedefaultrel[bits64]ifidn或IFIDN(大小写都可以),是两条伪指令,用于对两个宏定义的参数进行比较,最初误以为用法类似条件......
  • ++b 和 a++ 的区别 看汇编代码
    汇编代码解释如下intx=a++;00F088338B45F8moveax,dwordptr[a]00F088368945E0movdwordptr[x],eax00F088398B4DF8movecx,dwordptr[a]00F0883C83C101a......
  • 汇编基础
    汇编语言的组成汇编指令(机器码的助记符)伪指令(由编译器执行)其他符号(由编译器识别)汇编语言的核心是汇编指令,它决定了汇编语言的特性存储器指令和数据在存储器中存放,也就是平时所说的内存磁盘不同于内存,磁盘中的数据或程序如果不读入内存,就无法被cpu使用指令和数据在......
  • 汇编入门-课程概要
    1.什么是机器语言?加:01000000减:01001000乘:1111011111100000除:1111011111110000 2.什么是汇编语言?     加: INCEAX                         01000000减:DEC EAX       ......
  • 8086汇编语言精讲3 :寄存器(内存访问)
    字与字节  数据总线宽度的真谛  8086cpu不支持直接将数据送入段寄存器的操作,而ds就是一个段寄存器,所以只要用其他寄存器来中转数据进去ds中  栈   逆序效果     ......