可以修改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或者内存中