songmingze 发表于 2017-6-13 10:07:30

关于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:40:17

本帖最后由 kyowjw01 于 2017-6-13 10:44 编辑

第一个问题,ip=ss*16+sp → ip = 0    (ss*16+sp)这个是代表栈段栈指针所指向的值,显然这边是0.所以会返回到codesg的起始地址,从而执行mov ax,4c00h int 21h来结束程序。

kyowjw01 发表于 2017-6-13 10:43:24

第二个问题,栈的机制是这样子的,规定是不能改变的。当你取出0这个值(也就是ss*16+sp所指向的值)的时候,肯定会sp=sp+2,把你前面的push操作用pop还原,这里的话是指 指向你定义的栈的栈顶位置。

kyowjw01 发表于 2017-6-13 10:46:35

建议你再看一下视频或者书。我讲的有可能有些不规范。{:10_279:}
页: [1]
查看完整版本: 关于ret的疑问