若余相思 发表于 2017-9-17 18:29:09

实验八

实验八

代码:
assume cs: code

code segment

                mov ax, 4c00H
                int 21H
               
start : mov ax, 0
        s : nop
                nop
               
                mov di, offset s
                mov si, offset s2
                mov ax, cs:
                mov cs:, ax
               
        s0: jmp short s
       
        s1: mov ax, 0
                int 21H
                mov ax, 0
               
        s2: jmp short s1
                nop
               
code ends
end start

为什么能让程序结束呢?
起初我怎么想也不明白,听了小甲鱼老师的指点,我就明白了,在这里非常的感谢小甲鱼老师。

当s2的代码被复制到s处执行时,因为转移的距离是位移,就是所谓的标号处的地址 - jmp指令后一个字节的地址,用debug可以得到:


可以看出s1处的地址为18,s处的地址为8,相减得到10,因为他原本是在s2处的,所以应该是-10,所以向前转移10单元,所以程序会正常结束

装糊涂 发表于 2019-12-7 16:01:22

复制过去的是机器码{:10_256:}

gang19840815 发表于 2020-2-23 23:43:32

看看

gang19840815 发表于 2020-2-24 22:53:24

kankan
页: [1]
查看完整版本: 实验八