. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  实验八——个人分析  [已解决] 回复[ 4次 ]   点击[ 612次 ]  
zoudaokou2006
[帖 主] [ 发表时间:2011-02-14 09:59 ] 
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07
assume cs:codesg 
         
codesg segment 

        mov ax, 4c00h 
        int 21h 

start:        mov ax, 0 
s:        nop 
        nop 

        mov di, offset s 
        mov si, offset s2 
        mov ax, cs:[si] 
        mov cs:[di], ax 

s0:        jmp short s 

s1:        mov ax,0 
        int 21h 
        mov ax,0 

s2:        jmp short s1 
        nop 

codesg ends 
end        start 

如上的程序可以正确返回。 
分析程序如下: 
(1) 
首先, 
        mov di, offset s 
        mov si, offset s2 
        mov ax, cs:[si] 
        mov cs:[di], ax 
这四条指令的作用是将s2处的指令一条指令拷贝到s处。 
(2) 
我们就要分析这条拷贝的指令 
        jmp short s1        ;E8 F6 
该指令为短转移,是根据位移进行转移的指令。 
jmp short s1对应的机器码为E8F6,位移为F6(-10)。 
在s2处,E8F6代表向前跳转到S1处。 
当将E8F6拷贝到s处,向前跳转10个字节,即跳转到mov ax, 4c00h指令处。 
(3) 
完成指令拷贝后, 
程序顺序执行到标号s0处, 
然后跳转到s处, 
然后继续跳转到 
        mov ax, 4c00h 
        int 21h 
程序正确返回。
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved