问题 9.1
如何在汇编源程序中使用指令将本源程序某条(些)指令复制到本程序的另一处?方法如下:
1. 取得需要复制的指令所在的内存单元地址,将该地址内存单元所存储的指令信息传送到寄存器中。
mov reg,sreg:[...]
2. 取得目标内存单元的地址,将寄存器存储的内容传送到目标内存单元。
mov sreg:[...],reg
如果指令信息占用的存储空间较大,以致于用一个寄存器不足以全部传送所有指令信息,则可以循环执行上述两个指令,直到将全部指令信息传送完毕为止。
由于不允许在两个内存单元之间传送信息,所以不能将指令信息从某处内存空间直接传送到另一处内存空间的存储单元中,因此需要以寄存器作为传送过程的中间过渡。参见如下程序代码:
assume cs:codesg
codesg segment
s: mov ax,bx ; mov ax,bx 的机器码占两个字节 —— 此为需要复制的指令内容
mov si,offset s ; 读取源指令信息所在内存地址的偏移地址,将偏移地址存入 SI 寄存器
mov di,offset s0 ; 读取目标内存单元地址的偏移地址,将偏移地址存入 DI 寄存器
mov ax,cs:[si] ; 添加的指令
mov cs:[di],ax ; 添加的指令
s0: nop ; nop 的机器码占一个字节
nop
mov ax,4c00h
int 21h
codesg ends
end s