《第九转移指令原理ppt课件》由会员分享,可在线阅读,更多相关《第九转移指令原理ppt课件(24页珍藏版)》请在金锄头文库上搜索。
1、第九章 转移指令的原理本章要点取偏移地址伪操作offsetjmp指令的各种方式条件转移指令jcxz根据位移进展转移的意义转移指令修正IP,或同时修正CS和IP的指令统称转移指令8086CPU的转移可以分为:段内转移:只修正IP,如jmp ax段间转移:同时修正CS和IP,如 jmp 1000:0段内转移又可分为:短转移:-128127近转移:-3276832767转移指令续8086CPU的转移指令:无条件转移指令条件转移指令循环指令过程中断操作符 offset格式:offset 变量/标号功能:获得变量或标号的偏移地址例如:assume cs:codesgcodesg segment star
2、t:mov ax,offset start s:mov ax,offset scodesg endsend start等价于:mov ax,0 mov ax,3问题9.1填写指令,使该程序在运转中将s处的一条指令复制到s0处assume cs:codesgcodesg segment s: mov ax,bx mov si,offset s mov di,offset s0 _ _ s0:nop nopcodesg endsend startnop 指令处置器指令无操作指令,没有的显式操作数,主要起延迟下一条指令执行的作用,在调试程序时常用此指令占有一定的存储单元。assume cs:code
3、sgcodesg segment s: mov ax,bx mov si,offset s mov di,offset s0 mov ax,cs:si mov cs:di,ax s0:nop nopcodesg endsend startjmp指令无条件转移指令段内直接短转移段内直接近转移段内间接转移段间直接远转移段间间接转移段内直接短转移格式:jmp short 标号功能:进展段内的短转移,转移到标号所在的目的地。例如:assume cs:codesgcodesg segment start:mov ax,0 jmp short s add ax,1 s:inc axcodesg endse
4、nd start“jmp short 标号指令的机器码“jmp short 标号指令的机器码“jmp short 标号指令的机器码中,不包含转移的目的地址,而包含的是转移的位移。转移位移的计算方法指令“jmp short 标号的功能(IP)=(IP)+8位位移阐明8位位移=“标号处地址-jmp指令后的第一个字节的地址short指明此处的位移为8位位移8位位移的范围是-128127,补码表示8位位移由编译程序在编译时算出段内直接近转移格式:jmp near ptr 标号功能: (IP)=(IP)+16位位移16位位移=“标号处地址-jmp指令后的第一个字节的地址near ptr指明此处的位移为1
5、6位位移,进展的是段内近转移可以转移到段内的任何一个位置16位位移由编译程序在编译时算出段间直接远转移格式:jmp far ptr 标号功能:(CS)=标号所在段的段地址; (IP)=标号所在段的偏移地址例如:assume cs:codesgcodesg segment start:mov ax,0 mov bx,0 jmp far ptr s db 256 dup (0) s:add ax,1 inc axcodesg endsend start段内间接转移格式:jmp 16位存放器jmp word ptr 内存单元地址功能:用16位存放器或者16位的内存单元内容修正IP的值例如:mov a
6、x,0123Hmov ds:0,axjmp word ptr ds:0段间间接转移格式:格式:jmp dword ptr jmp dword ptr 内存单元地址内存单元地址功能:从内存单元地址处开场存放两个功能:从内存单元地址处开场存放两个字,高地址处的字是转移的目的段地址,字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址低地址处是转移的目的偏移地址(CS)=(CS)=(内存单元地址内存单元地址+2)+2)(IP)=(IP)=(内存单元地址内存单元地址) )例如:例如:mov ax,0123Hmov ax,0123Hmov ds:0,axmov ds:0,axmov word
7、 ptr ds:2,0mov word ptr ds:2,0jmp dword ptr ds:0jmp dword ptr ds:0条件转移指令jcxz指令格式:jcxz 标号功能:假设(cx)=0,转到标号处执行,否那么执行下一条指令操作:当(cx)=0,(IP)=(IP)+8位位移8位位移=“标号处地址-jcxz指令后的第一个字节的地址8位位移的范围是-128127,补码表示8位位移由编译程序在编译时算出检测点9.2利用jcxz指令,实如今内存2000H段中查找第一个值为0 的字节,找到后,将其偏移地址存储在dx中assume cs:codesgcodesg segment start:m
8、ov ax,2000H mov ds,ax mov bx,0 s:_ _ _ _ jmp short s ok:mov dx,bx mov ax,4c00h int 21hcodesg endsend startloop指令也是一种条件转移指令,一切的循环指令都是短转移格式:loop 标号操作:(cx)=(cx)-1假设(cx) 0,(IP)=(IP)+8位位移8位位移=“标号处地址-loop指令后的第一个字节的地址8位位移的范围是-128127,补码表示8位位移由编译程序在编译时算出根据位移进展转移的意义jmp short 标号jmp near ptr 标号jcxz 标号loop 标号上述指
9、令对IP的修正是根据转移目的地址和转移起始地址之间的位移来进展的,其对应机器码中不包含转移的目的地址,而包含的是转移到目的的位移优点:方便程序段在内存中的浮动装配例如:汇编指令 机器代码mov cx,6 B9 06 00mov ax,10 B8 10 00s:add ax,ax 01 C0loop s E2 FC编译器对转移位移超界的检测assume cs:codecode segment start:jmp short s db 128 dup (0) s:mov ax,0ffffhcode endsend start本章小结掌握取偏移地址伪操作offset深化掌握jmp指令的各种格式,了解CPU执行转移指令的根本原理掌握条件转移指令jcxz了解根据位移进展转移的意义