分析一个奇怪的程序
一、 实验目的
分析代码,加深对jmp的相关内容的理解。
二、实验内容或主要代码
分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
assume cs:codesg
codesg segment
mov ax,4c00h 3字节
int 21h 2字节
start:mov ax,0 3字节
s:nop 运行时在代码段中分配一个字节的空间
nop
mov di,offset s 将s的偏移地址存到di寄存器中
mov si,offset s2 将s2的偏移地址存到si寄存器中
mov ax,cs:[si] 将cs:[si]内存中的机器码存到ax寄存器中
mov cs:[di],ax 将ax寄存器中的机器码放到cs:[di]中
s0:jmp short s jmp到 0008
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
codesg ends
end start
三、 实验结果或截图
四、实验分析或体会
此次实验重在对jmp指令的理解与掌握,jmp指令要给出两种信息,(1)转移的目的地址,(2)转移的距离(段间转移,段内短转移、段内近转移)。但是,虽然jmp指令含有目的地址,但其机器码中并不包含转移的目的地址,而是包含要转移的位移!通过理解这个知识点,可以更好的完成实验。