汇编语言学习笔记 下载本文

段内直接近转移

格式:jmp near ptr 标号 功能: (IP)=(IP)+16位位移 说明

1) 16位位移=“标号”处地址-jmp指令后的第一个字节的地址 2) near ptr指明此处的位移为16位位移,进行的是段内近转移 3) 可以转移到段内的任何一个位置

4) 16位位移的的范围为-32768~32767,用补码表示 5) 16位位移由编译程序在编译时算出

段内直接短转移

格式:jmp short 标号

功能:进行段内的短转移,转移到标号所在的目的地。(IP)=(IP)+8位位移 说明

1) 8位位移=“标号”处地址-jmp指令后的第一个字节的地址 2) short指明此处的位移为8位位移 3) 8位位移的范围是-128~127,补码表示 4) 8位位移由编译程序在编译时算出

段间直接远转移

格式:jmp far ptr 标号

功能:(CS)=标号所在段的段地址 (IP)=标号所在段的偏移地址

段间间接转移

格式:jmp dword ptr 内存单元地址

功能:从内存单元地址处开始存放两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址 (CS)=(内存单元地址+2) (IP)=(内存单元地址) 例如: mov ax,0123H mov ds:[0],ax mov word ptr ds:[2],0 jmp dword ptr ds:[0]

段内间接转移 格式:

jmp 16位寄存器

jmp word ptr 内存单元地址

功能:用16位寄存器或者16位的内存单元内容修改IP的值 例如: mov ax,0123H mov ds:[0],ax jmp word ptr ds:[0]

jcxz指令

jcxz指令为有条件转移指令,所有有条件转移指令都是短转移 相当于 if((cx)==0) jmp short 标号

格式:jcxz 标号

功能:若(cx)=0,转到标号处执行,否则执行下一条指令 操作:当(cx)=0,(IP)=(IP)+8位位移

1) 8位位移=“标号”处地址-jcxz指令后的第一个字节的地址 2) 8位位移的范围是-128~127,补码表示 3) 8位位移由编译程序在编译时算出

loop指令

也是一种条件转移指令,所有的循环指令都是短转移 功能相当于: (cx--); if ((cx)! = 0 ) jmp short 标号

格式:loop 标号 操作:(cx)=(cx)-1

若(cx) ≠0,(IP)=(IP)+8位位移

1) 8位位移=“标号”处地址-loop指令后的第一个字节的地址 2) 8位位移的范围是-128~127,补码表示 3) 8位位移由编译程序在编译时算出

根据位移进行转移的意义

jmp short 标号 jmp near ptr 标号 jcxz 标号 loop 标号

上述指令对IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的,其对应机器码中不包含转移的目的地址,而包含的是转移到目的的位移 优点:方便程序段在内存中的浮动装配