. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  分析一个奇怪的程序遇到问题?  [待解决] 回复[ 34次 ]   点击[ 2462次 ]  
lovecpu
[帖 主] [ 发表时间:2007-06-26 20:49 ] 
荣誉值:5
信誉值:3
注册日期:2007-06-26 20:40
分析下面的程序,在运行前思考:这个程序可以正确返回吗?  
  运行后再思考:为什么是这种结果?  
   
   
  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
ijuslinasm
[第33楼] [ 回复时间:2016-01-20 20:34 ] 
荣誉值:0
信誉值:0
注册日期:2016-01-08 09:56
我觉得楼上都解释的太复杂了。
要明白实验8,要明白2点。
1、汇编指令是机器码的表现形式。也就是,我们看到的是汇编指令,其实应该透过指令看到它所代表的机器码。
2、CPU执行指令的过程。

然后,对这个实验8,本人分析如下。
 当执行到s0处的指令jmp short s,
                 跳转到  标号s 处的指令,这个时候,根据前面代码的效果,s处的指令应该是 jmp short  s1
                  这个时候,如果理解为,跳转到s1就错了。
                  应该看到,汇编指令只是我们理解的表现形式,机器CPU真正执行的是这条汇编指令表示的
                  机器码。
                  jmp short s1  对应的机器码是 EB  F6。此处指令的偏移地址(IP)=0008H。    EB代表指令jmp,F6代表位移。
                   F6转化为十进制是-10
                  根据跳转原理,(IP)=(IP)+(-10).
                  根据CPU执行指令的过程,读取s:jmp short  s1这条指令到指令缓冲器后,IP指向mov di,offset s
                   ,即此时IP=000AH
                   然后机器CPU执行EB  F6,然后(IP)=000AH+(-10)=0000H。指向mov ax,4c00H
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved