关于ret的疑问
本帖最后由 songmingze 于 2017-6-13 10:15 编辑疑问1ip=ss*16+sp ip这个寄存最大是16位 ss*16+sp最大可能是20位 这个是不是有问题?
疑问2 ret 老师说先 执行1ip=ss*16+sp 执行2 sp=sp+2。我认为先执行2,在执行1,参见下图,否则根本无法正确赋值 本帖最后由 kyowjw01 于 2017-6-13 10:44 编辑
第一个问题,ip=ss*16+sp → ip = 0 (ss*16+sp)这个是代表栈段栈指针所指向的值,显然这边是0.所以会返回到codesg的起始地址,从而执行mov ax,4c00h int 21h来结束程序。 第二个问题,栈的机制是这样子的,规定是不能改变的。当你取出0这个值(也就是ss*16+sp所指向的值)的时候,肯定会sp=sp+2,把你前面的push操作用pop还原,这里的话是指 指向你定义的栈的栈顶位置。 建议你再看一下视频或者书。我讲的有可能有些不规范。{:10_279:}
页:
[1]