教学提示 在学习和应用汇编语言进行 程序设计时,有一些经常遇 到的问题,例如算术运算、 代码转换等,需要掌握 一总结常编程/题
教学提示 在学习和应用汇编语言进行 程序设计时,有一些经常遇 到的问题,例如算术运算、 代码转换等,需要掌握
第2章 2.7控制转移类指令 控制转移类指令用于实现分支、循环、 过程等程序结构,是仅次于传送指令 的最常用指令 重点掌握: JMP/JCC/LOOP CALLIRET INT M/RET常用系统功能调用 般了解: LOOPZ/LOOPNZ|NTO 控制转移类指令通过改变P(和cs) 值,实现程序执行顺序的改变
第 2 章 2.7 控制转移类指令 ➢控制转移类指令用于实现分支、循环、 过程等程序结构,是仅次于传送指令 的最常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO 控制转移类指令通过改变IP(和CS) 值,实现程序执行顺序的改变
第2章 271无条件转移指令(M JMP1abel;程序转向 label标号指定的地址 >只要执行无条件转移指令JMP,就使程序转 到指定的目标地址处,从目标地址处开始执 行那里的指令 >操作数labe是要转移到的目标地址(目的 地址、转移地址) JMP指令分成4种类型: (1)段内转移、直接寻址 2)段内转移、间接寻址 (3)段间转移、直接寻址 (4)段间转移、间接寻址
2.7.1 无条件转移指令 ➢ 只要执行无条件转移指令JMP,就使程序转 到指定的目标地址处,从目标地址处开始执 行那里的指令 ➢ 操作数label是要转移到的目标地址(目的 地址、转移地址) ➢ JMP指令分成4种类型: ⑴ 段内转移、直接寻址 ⑵ 段内转移、间接寻址 ⑶ 段间转移、直接寻址 ⑷ 段间转移、间接寻址 JMP label ;程序转向label标号指定的地址 JMP 第 2 章
第2章 目标地址的寻址方式MP 直接寻址方式 用标号表达 ■转移地址象立即数一样,直接在 指令的机器代码中,就是直接寻 址方式 用寄存器或存储器 >间接寻址方式 操作数表达 ■转移地址在寄存器或主存单元中, 就是通过寄存器或存储器的间接 寻址方式
目标地址的寻址方式 ➢直接寻址方式 ◼转移地址象立即数一样,直接在 指令的机器代码中,就是直接寻 址方式 ➢间接寻址方式 ◼转移地址在寄存器或主存单元中, 就是通过寄存器或存储器的间接 寻址方式 第 2 章 用标号表达 用寄存器或存储器 操作数表达 JMP
第2章 目标地址的范围:段内MP >段内转移—近转移(near) 在当前代码段64KB范围内转移|代 (士32KB范围) 码 段 ■不需要更改CS段地址,只要改 变P偏移地址 代 >段内转移——短转移( short)|码 ■转移范围可以用一个字节表达, 在段内-128~+127范围的转移
目标地址的范围:段内 ➢段内转移——近转移(near) ◼在当前代码段64KB范围内转移 ( ±32KB范围) ◼不需要更改CS段地址,只要改 变IP偏移地址 ➢段内转移——短转移(short) ◼转移范围可以用一个字节表达, 在段内-128~+127范围的转移 代 码 段 代 码 段 第 2 章 JMP
第2章 目标地址的范围:段间 IMP >段间转移——远转移(far) 从当前代码段跳转到另一个 代码段,可以在1MB范围 代码段 ■需要更改cS段地址和P偏移 实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 程序员可用操作符shr、 near ptr或 ifar ptr强制」 航是逻辑地址
目标地址的范围:段间 ➢段间转移——远转移(far) ◼从当前代码段跳转到另一个 代码段,可以在1MB范围 ◼需要更改CS段地址和IP偏移 地址 ◼目标地址必须用一个32位数 表达,叫做32位远指针,它 就是逻辑地址 第 2 章 代 码 段 代 码 段 实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制 JMP
第2章 段内转移、直实际为相对寻址 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的指令 第 2 章 实际为相对寻址
第2章 段内转移、间接寻址Mp JMP r16/ m16 IP←r16/m16 >将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容 Jmp ax ;IP←AX jmp word ptr [2000h] IP+[2000h ⊙E
段内转移、间接寻址 JMP r16/m16 ;IP←r16/m16 ➢ 将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容 jmp ax ;IP←AX jmp word ptr [2000h] ;IP←[2000h] 第 2 章 JMP
第2章 段间转移、直接寻址Mp 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 第 2 章 JMP
第2章 段间转移、间接寻址Mp JMP far ptr mem ;IP←[mem],CS←[mem+2] >用一个双字存储单元表示要跳转的目标地 址。这个目标地址存放在主存中连续的两个 字单元中的,低位字送IP寄存器,高位字送 CS寄存器 mov word ptr [bx], 0 mov word ptr [bx+2, 1500h JMP far ptr[bx];转移到1500h:0
段间转移、间接寻址 JMP far ptr mem ;IP←[mem],CS←[mem+2] ➢ 用一个双字存储单元表示要跳转的目标地 址。这个目标地址存放在主存中连续的两个 字单元中的,低位字送IP寄存器,高位字送 CS寄存器 mov word ptr [bx],0 mov word ptr [bx+2],1500h JMP far ptr [bx] ;转移到1500h:0 第 2 章 JMP