任务
分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
答
可以正确返回,分析如下面代码中的注释
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
|