蒙珣的博客

活好当下,做好今天该做的事情。

0%

实验8 分析一个奇怪的程序

实验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
assume cs:codesg
codesg segment

mov ax,4c00h ;占3个字节
int 21h ;占2个字节

start: mov ax,0 ;占3个字节
s: nop ;EB CPU执行到nop指令什么都不做,占用一个字节
nop ;F6 当s处复制立了s2的指令后也要执行跳转,而IP位于s4处

;将s2复制到s处
s4: mov di,offset s ;di=0008,得到s的偏移地址。 标号处的地址 + jmp指令后的第一个字节的地址 向前转移
mov si,offset s2 ;si=0020
mov ax,cs:[si] ;ax=076A:0020=F6EB
mov cs:[di],ax ;076A:0008=076A:0020

s0: jmp short s ;接着跳转到s的偏移地址

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

s2: jmp short s1 ;跳转指令 短转移 -128~127 EBxx(xx代替位移的范围)
s3: nop ;当CS:IP指向jmp内存单元读取指令后,读取的指令进入指令缓存器,IP+2 OFFSET s3 + F6(-10)

codesg ends
end start