目标地址的范围:段内MP >段内转移—近转移(near) 在当前代码段64KB范围内转移|代 (士32KB范围) 码 段 ■不需要更改CS段地址,只要改 变P偏移地址 代 >段内转移——短转移( short)|码 ■转移范围可以用一个字节表达, 在段内-128~+127范围的转移
目标地址的范围:段内 ➢段内转移——近转移(near) ◼在当前代码段64KB范围内转移 ( ±32KB范围) ◼不需要更改CS段地址,只要改 变IP偏移地址 ➢段内转移——短转移(short) ◼转移范围可以用一个字节表达, 在段内-128~+127范围的转移 代 码 段 代 码 段 JMP
目标地址的范围:段间MP >段间转移——远转移(far) 从当前代码段跳转到另一个 代码段,可以在1MB范围 代码段 ■需要更改cS段地址和P偏移 实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 ●程序员可用操作符 near ptr或 far ptr强制 航是逻辑地址
目标地址的范围:段间 ➢段间转移——远转移(far) ◼从当前代码段跳转到另一个 代码段,可以在1MB范围 ◼需要更改CS段地址和IP偏移 地址 ◼目标地址必须用一个32位数 表达,叫做32位远指针,它 就是逻辑地址 代 码 段 代 码 段 实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 程序员可用操作符near ptr 或far ptr 强制 JMP
段内转移、直接寻实际为相对寻址 JMP label ;IP←IP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地址, 到目标指令的偏移地址的地址位移 当向地址增大方向转移时,位移量为正;向地址减 小方向转移时,位移量为负 Jmp again ;转移到 again处继续执行 again: dec cx ;标号 again的指令 jmp output;转向 output output: moy result,al;标号 output的指令
段内转移、直接寻址 JMP JMP label ;IP←IP+位移量 ➢ 位移量是紧接着JMP指令后的那条指令的偏移地址, 到目标指令的偏移地址的地址位移 ➢ 当向地址增大方向转移时,位移量为正;向地址减 小方向转移时,位移量为负 jmp again ;转移到again处继续执行 …… again: dec cx ;标号again的指令 …… jmp output ;转向output …… output: mov result,al ;标号output的指令 实际为相对寻址
段内转移、间接寻址 IMP JMP r16/ m16 IP←r16/m16 >将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容 Jmp ax ;IP←AX jmp word ptr [2000h] IP+[2000h
段内转移、间接寻址 JMP r16/m16 ;IP←r16/m16 ➢ 将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容 jmp ax ;IP←AX jmp word ptr [2000h] ;IP←[2000h] JMP
段间转移、直接寻址 IMP JMP far ptr label ;IP←1abe1的偏移地址 ;CS←1abe1的段地址 >将标号所在段的段地址作为新的cS值, 标号在该段内的偏移地址作为新的P值;这 样,程序跳转到新的代码段执行 jmp far ptr otherseg ;远转移到代码段2的 others
段间转移、直接寻址 JMP far ptr label ;IP←label的偏移地址 ;CS←label的段地址 ➢ 将标号所在段的段地址作为新的CS值, 标号在该段内的偏移地址作为新的IP值;这 样,程序跳转到新的代码段执行 jmp far ptr otherseg ;远转移到代码段2的otherseg JMP