. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第九章试验8 完全分析  [待解决] 回复[ 0次 ]   点击[ 335次 ]  
zhenglxd
[帖 主]   [ 发表时间:2009-05-12 15:42 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
第九章 实验8 pdf194页面
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

###研究了会基本上大悟了,nop的作用是 一个字节大小的空代码.这个

实验的关键是 搞明白 短转移操作的本质,即短转移转换为机器码不直接

指示转换的地址而是给出目标地址和原ip地址的位差。
di= s
si= s2
cs[di]=cs[s]=ax=cs[si]=cs[s2]=jmp short s1
本质上 s:处的2个nop ==jmp short s1
##注意 jmp short s1处的代码-机器码 实际上 保存的是s2和s1之间
代码位数差 而不是纯粹的转移到s1
(上段)
s1:mov ax,0
       int 21h
       mov ax,0
    s2:jmp short s1

上面这段地址中 s2~s1的位差和下面的一段中s:~ mov ax,4c00h的位

差是相等的!所以当s0:jmp short s被执行后(代码从s:处开始而s处

代码保留的是s2~s1的位差)因此 ip跳转到了 mov ax,4c00h所在的代

码,至此研究结束这个谜也被本人破解大爽!
(下段)
mov ax,4c00h
  int 21h
start: mov ax,0
    s: nop
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved