|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- assume cs:codesg
- codesg 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]
- mov cs:[di],ax
-
- s0:jmp short s
-
- s1:mov ax,0
- int 21h
- mov ax,0
-
- s2:jmp short s1
- nop
-
- codesg ends
- end start
复制代码
这是实验八的程序,执行到s2的时候机器指令是ebf6,然后跳转到s,然后上移10个字节,到了mov ax,4c00h,但是为什么s2处的指令是ebf6呢,s2:jmp short s1,这是跳转到s1,但是s2,s1之间只有五个字节啊,为什么是f6要移动十个字节呢?
当指令执行到s0:jmp short s时,该指令得到执行,编译器算出的ip位移量为8-18h=-16(补码F0),(ip)=(ip)+位移量=18h+(-16)=8,cs:8指向s;
当指令执行到s标段jmp命令时,第1个字节中的机器码为EBF6,给出的ip位移量为-10(补码F6),(ip)=(ip)+位移量=ah+(-10)=0,cs:0指向第一条指令。
|
|