温良先生 发表于 2022-9-2 19:57:38

汇编:关于栈

使用push和pop指令时,一直使用这两个指令,如果超出栈的范围,sp会自己归0,还是会越到别的内存,从而读取不是栈的内容?

jackz007 发表于 2022-9-2 20:52:50

本帖最后由 jackz007 于 2022-9-2 20:55 编辑

       当 SP = 0 时,堆栈就到底了,这个时候,如果继续 push 那么,SP 会回卷到 SS 段的顶部继续,数据会被存到 SS : FFFE,SP = FFFE,如果这些内存保存有数据,这些数据就会被破坏,所以,堆栈定义必须做到宁大勿小。

温良先生 发表于 2022-9-2 20:59:14

jackz007 发表于 2022-9-2 20:52
当 SP = 0 时,堆栈就到底了,这个时候,如果继续 push 那么,SP 会回卷到 SS 段的顶部继续,数据会 ...

不会出栈吗,内存越界

jackz007 发表于 2022-9-2 21:59:04

温良先生 发表于 2022-9-2 20:59
不会出栈吗,内存越界

       没错,是越界,但是,别忘了,你是在用汇编语言写代码,一切必须了然于胸。

编程追风梦 发表于 2022-9-3 09:36:31

jackz007 发表于 2022-9-2 21:59
没错,是越界,但是,别忘了,你是在用汇编语言写代码,一切必须了然于胸。

笔记学习链接能发一下吗?

温良先生 发表于 2022-9-3 09:54:18

jackz007 发表于 2022-9-2 21:59
没错,是越界,但是,别忘了,你是在用汇编语言写代码,一切必须了然于胸。

那那个sp自动变成0了,不是不会越界了吗?
一直使用push或者是一直使用pop,到达栈的界限时,再使用这两个指令,究竟会越界还是不会,

jackz007 发表于 2022-9-3 10:05:55

编程追风梦 发表于 2022-9-3 09:36
笔记学习链接能发一下吗?

         笔记?36 年前手写的。

jackz007 发表于 2022-9-3 10:07:39

本帖最后由 jackz007 于 2022-9-3 10:12 编辑

温良先生 发表于 2022-9-3 09:54
那那个sp自动变成0了,不是不会越界了吗?
一直使用push或者是一直使用pop,到达栈的界限时,再使用这两 ...

      记住这个公式
0000H - 0002H = FFFEH
      FFFEH 就是 -2
      写代码的时候,你心里必须明白的就是这个式子。
      或者,你可以用 DEBUG 追一追看一看
debug
-a 100
xor ax,ax
sub ax,2
int3

-g
; 这个时候观察一下 ax 的值

编程追风梦 发表于 2022-9-3 18:47:12

jackz007 发表于 2022-9-3 10:05
笔记?36 年前手写的。

我还以为你是看的小甲鱼的呢{:10_250:}
页: [1]
查看完整版本: 汇编:关于栈