微笑向暖~ 发表于 2017-10-28 23:12:55

补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。

补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。

mov ax,2000H
mov ds,ax   //设置数据段指向2000:
mov ax,1000H
mov ss,ax    //将栈顶指向1000:0
mov sp,0
pop    //???
pop
pop
pop
pop
pop
pop
pop

这个pop 是将1000:0栈顶的字数据放到 2000:E 数据字单元中吧?
理解起来怎么那么懵呢?

3-3 发表于 2017-10-29 08:01:58

你的理解是对的。
主要是因为要求逆向复制,所以需要稍微调整一下顺序,你能理解,说明你已经掌握了。

weizhongyang 发表于 2017-10-29 12:00:48

ss是栈段,FIFO先进后出,数据是倒着存的,第一个数据在栈底位置,而最后一个数据在栈顶位置;
所以逆序需要从栈顶位置开始取,即sp应该为0
ds是数据段,从底地址到高地址存储,逆序需要从底到顶存储,所以pop从开始存放栈中的数据。

wwangyongy 发表于 2023-2-8 09:07:14

先进后出的问题我懂了,不懂的是入栈的时候栈段是2000h,出栈的时候为什么从栈段1000h出栈,望解答,不胜感谢
入栈:
mov ax,1000H
mov ds,ax   
mov ax,2000H
mov ss,ax   
mov sp,10h
push
......

出栈:
mov ax,2000H
mov ds,ax
mov ax,1000H
mov ss,ax         
mov sp,0         
pop
......
页: [1]
查看完整版本: 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。