实验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
|