ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第九章 转移指令的原理 其二

2020-05-23 16:07:20  阅读:232  来源: 互联网

标签:标号 jcxz 第九章 其二 地址 指令 转移 位移


9.7jcxz指令

jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对ip的修改范围都为-128~127

指令格式:jcxz  标号

(如果cx=0,则转移到标号处执行)

 

jcxz  标号  指令操作:

当cx=0时,ip=ip+2位位移

  8位位移=标号处的地址-jcxz指令后的第一个字节的地址。

  8位位移的范围为-128~127,用补码表示;

  8位位移由编译程序在编译时算出。

当cx≠0时,什么也不做(程序向下执行)

 

我们从jcxz的功能中可以看出,指令jcxz  标号的功能用c语言写相当于:

if(c==0)

  jmp  short  标号

 

9.9  根据位移进行转移的意义

前面我们讲到:

jmp  short  标号

jmp  near  ptr  标号

jcxz  标号

loop  标号

等几种汇编指令,他们对ip的修改是根据转换目的地址和转换起始地址之间的位移来进行的。在他们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移。

这种设计,方便了程序段在内存中的浮动装配

例如:

mov cx,6

mov ax,10h

s:  add ax,ax

loop s

这段程序装在内存中的不同位置都可正确执行,因为loo  s在执行时只涉及s的位移,而不是s的地址。如果loops的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制,因为机器码中包含的是s的地址,如果s处的指令不在目的地址处,程序的执行就会出错。而loop  s的机器码中包含的是转移的位移,就不存在这个问题了,因为,无论s处的指令的实际地址是多少,loop指令的转移位移是不变的。

 

标签:标号,jcxz,第九章,其二,地址,指令,转移,位移
来源: https://www.cnblogs.com/fate-/p/12942848.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有