第九章 转移指令的原理
1、8086CPU转移指令分类:1.无条件转移指令(如jmp);2.条件转移指令;3.循环指令(如:loop);4.过程;5.中断。
2、offse,伪指令,功能是取得标号的偏移地址。
3、nop的机器码占一个字节,不产生任何结构,仅消耗几个时钟周期,接着执行后续指令,常用于程序的延时等。
4、jmp指令要给出两种信息:1.转移的目的地址;2.转移的距离(段间转移、段内短转移、段内近转移)。
5、依据位移进行的jmp指令:①jmp short 标号(转到标号处执行指令),这种格式的jmp指令实现的是段内短转移,它对ip的修改范围为-128~127;②jup near ptr 标号,near ptr指明此处的位移为16位位移,进行的是段内近转移,范围-32769~32769,功能(ip)=(ip)+16位位移。
6、汇编指令与机器指令:在一般的汇编指令中,汇编指令中的idata(立即数),不论它是表示一个数据还是一个内存单元的偏移地址,都会在对应的机器指令中出现,因为CPU执行的是机器指令,它必须要处理这些数据或地址。但是jmp对应的机器码不包含转移地址,使用的是相当偏移地址(从当前地址到目标地址)。实际上“jmp short 标号”的功能为(ip)=(ip)+8位位移。
7、F6就是-10,涉及补码。
8、转移的目的地址在指令中的jmp指令:“jmp far ptr 标号”,实现段间转移,又称远转移。转移地址在寄存器中的jmp指令:jmp 16位寄存器,功能:(IP)=(16位寄存器)。
9、转移地址在内存中的jmp指令:两种:1.jmp word ptr 内存单元地址(段内转移);2.jmp dword ptr 内存单元地址(段间转移)功能:(cs)=(内存单元地址+2),(IP)=(内存单元地址)。
10、jcxz指令,有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对ip的修改范围都为-128~127。如果(cx)==0,则转移到标号处执行,当(cx)!=0什么也不做。C语言描述:if((cx)==0)jmp short 标号。
11、loop指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,对ip修改范围-128~127。1.(cx)=(cx)-1;2.如果(cx)!=0 ,(ip)=(ip)+8位位移。
12、根据位移进行转移的意义:这样设计,方便了程序段在内存中的浮动装配(程序段放不同的位置都可以正确执行),注意:根据位移进行的指令,它们的转移范围受到转移位移长度的限制,如果在源程序中出现了转移范围的问题,编译器会报错。
注意:jmp 2000:0100的转移指令,是在debug中使用的汇编指令,汇编编译器不认识。
实验九:测试一下你的dos有木有问题。。。
Dos清屏命令:cls