. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  新手对实验8的理解。望指教  [待解决] 回复[ 2次 ]   点击[ 823次 ]  
hanlsheng
[帖 主]   [ 发表时间:2009-01-08 19:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-12-15 16:17
首先回答问题:实验8完全可以争取返回。

解释:
     因为源程序编译为机器码后,相应的转移指令被翻译成的机器代码中包含的跳转信息是位移。
     这里举个例子来说明:
      小王的右边是小李,小李的右边是小周,小周的右边是小韩。
     即 小王-》小李-》小周-》小韩。
    小王手里有个苹果,老师让小王把苹果传给他右边第二位同学,此时苹果会传给,小周。
    这时小王手里有个橘子,但是同时小王跟小李调换下位子:
     即 小李-》小王-》小周-》小韩。
     老师依然让小王把苹果传给他右边的第二位同学,那么橘子会传到谁手里呢?显然是 小韩。
     两次虽然老师的命令是一样的(传给右边第二位同学),为什么结果不一样呢? 是因为小王的位置变化了!
   对于题目 源程序有标号,说明转移的位置,但是编译后的机器代码是位移也就是相对位置。

   对于命令 jmp short s1 的机器码(EBF6)包含信息是跳转到F6位置。此时jmp short s1 是在原位置;而通过命令 mov ax,cs:[si]  mov cs:[di],ax  此命令被复制到 s:标号处,但是复制的是机器码(ebf6),当执行s:标号出的指令(EBF6)时,依然是跳转f6位置,但是此时是相对于 s:标号的位置。

   看代码:
   s1:mov ax,0
     int 21h
      mov ax,0
  s2: jmp short s1 (EBF6)

这里 当程序执行到s2处指令时,cpu运行指令ebf6 会跳转到 s1
------------------------------
   mov ax,4c00h
   int 21h
start: mov ax,0
    s: jmp short s1 (EBF6)
这里当程序执行到s 处指令时,cpu运行的指令ebf6会跳转到 指令 mov ax,4c00h

--- 以上就是解释了什么是位移,其实就是相对位置。

以上是对本题的解释!
younggay
[第1楼]   [ 回复时间:2009-01-09 13:00 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
在你博客里回复了。

老师依然让小王把苹果传给他右边的第二位同学,那么橘子会传到谁手里呢?显然是 小韩。
----------------------------------------
上面这句话好像有点乱,到底是苹果还是橘子啊?
hanlsheng
[第2楼]   [ 回复时间:2009-01-09 20:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-12-15 16:17
不好意思啊是笔误。

把文章中出现的橘子都改为苹果更好理解!

谢谢 younggay的提醒!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved