检测点 3.2
(1)补全下面的程序,使其可以将 10000H~1000FH 中的8个字,逆序复制到 20000H~2000FH中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)
分析:先观察代码前半段,将数据段地址指向1000H处
后半段使用压栈指令,将 10000H~1000FH处的数据依次按字压入某一处
因为压栈过程中,栈地址是向下增长的
那么正好可以把栈顶地址设置为 2000FH ,即栈段地址 SS = 2000H,偏移量 SP = 0010H
通过压栈的方法逆序复制到内存 20000H~2000FH 的位置了,答案如下:
mov ax,1000H
mov ds,ax
mov ax,2000H
mov ss,ax
mov sp,0010H
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]
(2)补全下面的程序,使其可以将 10000H~1000FH 中的8个字,逆序复制到 20000H~2000FH中
分析:这一问正好与上一问反过来,20000H部分为数据段,将栈段部分的数据依次出栈至 2000FH~20000H位置,根据出栈指令 pop 地址由低地址向高地址方向增长的特点
我们不妨把栈顶地址设置在 10000H 位置,即栈段地址 SS = 1000H,偏移量 SP = 0000H,通过出栈的方法逆序复制到内存 20000H~2000FH 的位置了,答案如下:
mov ax,2000H
mov ds,ax
mov ax,1000H
mov ss,ax
mov sp,0000H
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]