看到汇编的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?
貌似不是循环吧
如果是压入的话,压入的数据超过栈的长度,栈底的数据就会丢失,新的数据就会填充在顶部。
出栈的时候也一样,取到栈底,还继续取数据的话,就会把栈底下面的存储单元取出来。
貌似就系酱紫,不知有木有误人子弟 SS=SS+SP,SS=SS-SP :什么意思没看懂,不是-2或者+2的吗? 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内循环 这样的话只会导致覆盖 而不会溢出了..
所以才有疑问 如果是压入过多或者弹出过多 到底是溢出呢 还是循环呢? 大男人 发表于 2013-3-31 20:50 static/image/common/back.gif
因为溢出了 比如+2 +2 一直+到FFFF 在+2 就会变成0001 实际上是进位了
前面的教程说进位CPU不会丢弃 会保 ...
溢出不溢出那都是后面章节说的了。它们只是16位的保存不了进位的所以FFFE+2=0000了 我也是,啊啊 我也是,啊啊
页:
[1]