汇编网首页登录博客注册
unixandlinux的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新评论
最新留言
好友圈
友情链接

[2023-06-05 15:58] 第9章 问题 9.1

问题 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
评论次数(0)  |  浏览次数(116)  |  类型(问题分析) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码