jcxz

来源:互联网 发布:sqlserver errorlog 编辑:程序博客网 时间:2024/06/03 22:39
转移指令就是控制CPU执行内存中某处代码的指令。
简单的讲就是本来范伟崴的是左脚,通过赵本山的一句话( 转移了! ),就给转移到了右脚上。这里赵本山所说的话就相当于是转移指令,而且范伟还是无条件的转移,根本不问原因直接问(大哥,我得用点什么药呢?  )
但是!jcxz是有条件转移指令.如赵本山想要范伟的自行车,向范伟发出指令。范伟接到指令后通过判断自身以后可能就告别自行车了(你说像我这腿脚呢,基本就告别自行车啦,是不?),所以才把自行车送给赵本山(我就把自行车给你啦)。而不是当赵本山张口要的时候直接给。

格式:jcxz 标号
用高级语言描述:if (cx == 0) 
                             jmp short 标号     ;------> 当cx= 0 转移到标号处
                        else
                            next                    ;------>当cx != 0 程序什么也不做,继续向下执行


(短转移,通过位移进行转移,IP修改范围-128~127)具体详细内容暂不一一列举。
>>>jcxz同jmp一样,都是通过位移来进行转移的并且都是短转移。蓝色的地方我能看懂,紫色的我也能看懂,但是紫色和红色加起来我就看不懂了,悲剧啊!
0C85:0000 B80020        MOV     AX,2000
0C85:0003 8ED8          MOV     DS,AX
0C85:0005 BB0000        MOV     BX,0000
0C85:0008 B400          MOV     AH,00
0C85:000A 8A07          MOV     AL,[BX]
0C85:000C 8BC8          MOV     CX,AX
0C85:000E E303          JCXZ    0013
0C85:0010 43            INC     BX
0C85:0011 EBF7          JMP     000A
0C85:0013 8BD3          MOV     DX,BX

>>>IP修改范围为8位位移 -128~127(补码表示) 
8位位移=标号处地址 - jmp指令后的第一个字节的地址
 标号处的地址为:
0C85:000A 8A07          MOV     AL,[BX]    ;------> 此为标号处地址 000AH
jmp指令后的第一个字节的地址 :
0C85:0011 EBF7          JMP     000A
0C85:0013 8BD3          MOV     DX,BX    ;------>此为jmp指令后的第一个字节的地址0013H
                                                                ;>>>>>>8位位移计算方法得:000AH - 0013H = F7<<<<<<
                                                                ;F7是补码的表示方式 ,表示的数据为-9
                                                                ;同时也得出了JMP 000A 中000A符合IP=当前IP+F7
                                                                ;当CPU执行JMP时,CPU将当前IP向前移动9个字节,它的机器码为EBF7 转移的目的地址为CS:000A
                                                                ; <至此解决了上面那个紫色红色悲剧!但是补码不会表示啊!唉!人生就是从一个悲剧结束在到一个悲剧开始>


>>>补码?
原创粉丝点击