您的位置:首页 > 其它

关于王爽老师实验实验八 (分析一个奇怪的程序)之个人解析

2012-06-24 10:09 267 查看
我是一个初学者,满打满算也就自学了一个月汇编。废话不说了,转入正题:
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]
mov cs:[di],ax

s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0

s2:jmp short s1
nop

code ends
end start
这个程序用debug进行跟踪调试,会发现是可以正常结束的。下面是我的跟踪调试的情况,当程序运行到
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
之后是会发现地址 机器码 汇编代码
1440:0008      90         s:nop
1440:0009      90           nop
变为
地址 机器代码 汇编代码1440:0008 EBF6 jmp 0000(debug中的表现形式)当程序跳转到上面这一步时,会发现它是向0000的ip跳转的,究其原因是F6是补码,转换之后是0AH(即向后跳转0AH个地址),执行这条指令时,cpu通过寻址把EBF6放入指令缓冲器中,然后ip加2变为000AH,之后ip减去相对偏移地址0AH,那么计算过之后ip就指向了0000H,之后cs:ip就指向了1440:0000的位置,即程序将执行执行
  mov ax,4c00hint 21h
这样程序就正常结束了。个人感觉这个程序是考察大家对”jmp指令执行时,cpu并不知道转移的目的地址“这句话的理解;也就是考察大家对转移指令原理的理解。如果我有什么说得不好,请大家订正。本文章免费,允许随意更改和转载,不必标明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: