汇编指令——转移指令

可以修改IP或同时修改IP和CS的指令统称为转移指令

1 只修改IP    段内跳转

2 同时修改 CS和IP 段间跳转


段内转移:1短转移(-128——127)   2近转移 (-32768——32767)

8086cpu转移指令分为一下几种

1 无条件转移

2 条件转移

3循环指令

4 过程

5 中断


实际上 “jmp short 标号” 的功能为 (IP) = (IP) + 8位位移

jmp near ptr 标号     的功能为 (IP) = (IP) + 16位位移


1  16位位移=标号处的地址-jmp指令后的第一个字节的地址

2  near ptr 指明此处的位移为16位位移,进行的段内近转移

3  16位位移范围为 -32768——32767   用补码表示

4 16位位移由编译程序在编译时给出


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

指令格式   jcxz 标号 (如果(CX)=0,转移到标号处执行,否则,什么也不做,程序向下执行)



call和ret指令都是转移指令


ret指令用栈中的数据修改IP的内容,从而实现近转移

retf指令用栈中的数据修改CS和IP的内容,从而实现远转移


CPU执行ret指令时,进行下面两步操作:

1  (IP) = ((SS)×16+(SP))

2  (SP)=(SP)+2

相当与  pop IP

CPU执行retf指令时,进行下面四步操作:

1  (IP) = ((SS)×16+(SP))

2  (SP)=(SP)+2

3  (CS)=((SS)×16+(SP))

4  (SP)=(SP)+2

相当于 POP  IP     POP    CS


CPU执行call指令时,进行两步操作:

1 将当前的IP或CS和IP压入栈中

2转移

call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同


cal  标号   (将当前的IP压栈后,转到标号处执行指令)

CPU执行call指令时,

1  (SP) = (SP)-2

    ((SS)×16 +(SP))= (IP)

2  (IP) = (IP) + 16位位移


相当于  push ip    jmp near ptr  标号


call  far ptr 标号  实现是段间转移

CPU执行此格式的call指令时,

1  (SP) = (SP)-2

    ((SS)×16 +(SP))= (CS)

  (SP) = (SP)-2

    ((SS)×16 +(SP))= (IP)

2  (CS)=标号所在的段的段地址

    (IP)=标号在段中的偏移地址

相当于

push  CS

push  IP

JMP  far  ptr  标号




MUL指令


1 相乘的两个数 要么都是8位,默认放在AL中,另一个放在8位reg或者内存单元中。如果都是16位,一个默认放在ax中,另一个放在16位reg或者内存中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章