《汇编语言》实验8 分析一个奇怪的程序

任务

分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。

可以正确返回,分析如下面代码中的注释

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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:[si]      ; 把si指向的s2中的jmp short s1指令复制到di指向的s标识处
    mov cs:[di],ax

s0:
    jmp short s     ; 跳到s标识, 此时s标识处的指令为jmp short s1是复制到s处的指令,但因为是近转移,所以从s标识-8字节,会从code段第一条开始

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

s2:
    jmp short s1
    nop

code ends

end start