第三章 3.2解析
(1).补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H-2000FH。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。
mov ax,1000H ;将1000H放入AX寄存器中
mov ds,ax ;将AX寄存器中的内容放入DS寄存器中,这时候DS中存放的即为1000H,通过此指令我们知道数据段寄存器DS中存放的正是要被复制数据的内存单元的段地址mov ax,2000H ;将2000H放入AX寄存器中
mov ss,ax ;将AX寄存器中的内容放入SS寄存器中,即栈的段地址
mov sp,0010H ;将0010H让入寄存器中,此时栈顶地址为20010Hpush [0] ;通过前面的指令我们知道DS中存放的是1000H,这时候加上此处的偏移地址,可以算出入栈的数据正是内存单元地址为10000H中的数据即为0123H,而前面我们已经将栈顶设置为20010H,根据入栈指令push的执行顺序,先将sp-2变成2000EH,然后将0123H送入2000EH处,实现了逆序存放
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]
(2).补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H—2000FH中。
此程序和上面的程序正好相反,由入栈变成了出栈,那么此时只需要修改栈顶地址即可。
mov ax,2000H
mov ds,axmov ax,1000H
mov ss,ax
mov sp,0000Hpop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]