大男人 发表于 2013-3-31 03:25:17

看到汇编的3.12节 有点疑问

比如 栈只改变SP 那么空和满都是0 一直压入或者弹出 都是在这个栈断里面循环
为什么之前的节会提到溢出这个问题
是不是可以这么理解 如果定义的栈的大小不是64KB 而是小于64KB 也就是不足FFFF 那么就会形成溢出的问题
如果定义的栈大小刚好为FFFF按照3.12里面所说的循环 无论压入多少或者弹出多少 都说在这个栈段内循环
反而不会形成溢出的问题了?

又或者说之前章节提到超过FFFF的数据会变成0 进位CPU没有丢弃 而是保存到其他地方 当然 后面我还没看完 所以不知道保存到哪里去了
那么如果超过FFFF的时候 CPU是否会自动因为这个保存的进位 而自己改变SS的值导致溢出呢?
比如
空栈的时候 再POP CPU是否会自动这样改变 SS=SS+SP 然后SP=0?
满栈的时候 再PUSH CPU是否会自动这样改变 SS=SS-SP 然后SP=FFFF?

506076894 发表于 2013-3-31 09:56:05

貌似不是循环吧
如果是压入的话,压入的数据超过栈的长度,栈底的数据就会丢失,新的数据就会填充在顶部。
出栈的时候也一样,取到栈底,还继续取数据的话,就会把栈底下面的存储单元取出来。
貌似就系酱紫,不知有木有误人子弟

NGtailang 发表于 2013-3-31 13:07:44

SS=SS+SP,SS=SS-SP :什么意思没看懂,不是-2或者+2的吗?

大男人 发表于 2013-3-31 20:50:20

NGtailang 发表于 2013-3-31 13:07 static/image/common/back.gif
SS=SS+SP,SS=SS-SP :什么意思没看懂,不是-2或者+2的吗?

因为溢出了 比如+2 +2 一直+到FFFF 在+2 就会变成0001 实际上是进位了
前面的教程说进位CPU不会丢弃 会保存那么进位了是不是SS就进位了 然后SP就回到最小值了 所以是SS=SS+SP SP=0
如果是减 也就是压入溢出了
所以是SS-SP SP=FFFF
这样才会导致溢出
如果进位丢弃或者进位不做处理
那么无论是压入还是弹出 SS始终不变SP 在0000-FFFF内循环 这样的话只会导致覆盖 而不会溢出了..

所以才有疑问 如果是压入过多或者弹出过多 到底是溢出呢 还是循环呢?

NGtailang 发表于 2013-4-1 10:26:44

大男人 发表于 2013-3-31 20:50 static/image/common/back.gif
因为溢出了 比如+2 +2 一直+到FFFF 在+2 就会变成0001 实际上是进位了
前面的教程说进位CPU不会丢弃 会保 ...

溢出不溢出那都是后面章节说的了。它们只是16位的保存不了进位的所以FFFE+2=0000了

染指为红颜丶 发表于 2013-4-1 11:33:43

我也是,啊啊

□_谁_□_枫_□ 发表于 2013-4-1 11:43:50

我也是,啊啊
页: [1]
查看完整版本: 看到汇编的3.12节 有点疑问