《汇编语言》总结06 —— 转移指令的原理

(一)前述

可以修改IP,或同时修改CS和IP的指令统称为转移指令。

转移行为有以下几类:

  1. 只修改IP时,称为段内转移,比如:jmp ax。
  2. 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。

由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。

  1. 短转移IP的修改范围为-128~127。
  2. 近转移IP的修改范围为-32768~32767。

8086CPU的转移指令分为以下几类:

  1. 无条件转移指令(如:jmp)
  2. 条件转移指令
  3. 循环指令(如:loop)
  4. 过程
  5. 中断

虽然这些转移指令的前提条件可能不同,但转移的基本原理是相同的。

(二)操作符offset

操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。如:

assume cs:codesg

codesg segment

start:mov ax,offset start

s:   mov ax,offset s

codesg ends

end start

(三)jmp指令

jmp指令为无条件转移指令,可以只修改IP,也可以同时修改CS和IP。

jmp指令要给出两种信息:

  1. 转移的目的地址。
  2. 转移的距离(段间转移、段内短转移,段内近转移)

(四)依据位移进行转移的jmp指令

jmp short 标号(转到标号处执行指令)

这种格式的jmp指令实现的段内短转移,它对IP的修改范围为-128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。jmp指令中的“short”符号,说明指令进行的是短转移。jmp指令中的“标号”是代码段中的标号,指明了指令要转移的目的地,转移指令结束后,CS:IP应该指向标号处的指令。如:

assume cs:codesg

codesg segment

start:mov ax,0

jmp short s

add ax,1

s: inc ax

codesg ends

end start

jmp near ptr 标号(段内近转移)

(四)转移的目的地址在指令中的jmp指令

jmp far ptr 标号 实现的段间转移

far ptr 指明用标号的段地址和偏移地址修改CS和IP。

(五)转移地址在寄存器中的jmp指令

指令格式:jmp 16位reg

功能:(IP)=(16位reg)

(六)转移地址在内存中的jmp指令

  1. jmp word ptr 内存单元地址(段内转移)

    功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址。

    mov ax,0123h

    mov ds:[0],ax

    jmp word ptr ds:[0]

    执行后,(IP)=0123h

    mov ax,0123h

    mov [bx],ax

    jmp word ptr [bx]

    执行后,(IP)=0123h

  2. jmp dword ptr 内存单元地址(段间转移)

    功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。

    mov ax,0123h

    mov ds:[0],ax

    mov word ptr ds:[2],0

    jmp dword ptr ds:[0]

    执行后,(CS)=0,(IP)=0123h,CS:IP指向0000:0123

    mov ax,0123h

    mov [bx],ax

    mov word ptr [bx+2],0

    jmp dword ptr [bx]

    执行后,(CS)=0,(IP)=0123h,CS:IP指向0000:0123

(七)jcxz指令

jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。

指令格式:jcxz 标号(如果(CX)=0,转移到标号处执行)

简单点,jcxz 标号 的功能相当于:

if((cx)==0) jmp short 标号;

总结完毕!

时间: 2024-10-20 08:26:18

《汇编语言》总结06 —— 转移指令的原理的相关文章

汇编语言:第九章 转移指令的原理

可以修改IP或者CS:IP的指令叫做转移指令. 只修改IP,称为段内转移如jmp ax,根据对IP修改的范围不同分为短转移和近转移,范围分别为-128到127和-32768到32767 同时修改CS和IP的指令称为段间转移,如jmp 1000:0 9.1 offset offset 标号,用于取标号的偏移地址,如mov ax,offset start 相当于mov ax,0   start为代码段的标号 9.2 jmp指令 jmp是无条件转移指令,可以修改IP或者CS:IP都修改 jmp指令给出

Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

Linux内核设计(第一周)--从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 从2月22日起,本学期的linux课程开始了.通过这两天的学习,觉得孟宁老师讲的真不错,条理清晰,举例适当.本周从计算机工作原理出发,回顾了冯诺依曼计算机结构,也回顾了汇编寄存器.汇编指令.C语言程序的汇编分析技巧,很

汇编转移指令的原理

1.操作符offset 操作符offset在汇编语言中是由编译器处理的符号,他的功能是取得标号的偏移地址 比如下面程序: assume cs:codesg codesg segment start:mov ax,offset start 相当于mov ax,0 s:mov ax,offset s 相当于mov ax,3 codesg ends end start 在上面的程序中,offset操作符取得了标号start和s的偏移地址0和3,所以指令mov ax,offset start相当于指令m

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C

转移指令的原理(学习汇编)

1.可以修改IP,或同时修改CS和IP的指令统称转移指令.有两种类型转移: (1)只修改IP是段内转移,如:jmp ax (2)修改CS和IP是段间转移,如:jmp 1000:0 2.操作符offset是一个伪指令,它的功能是取得标号的偏移地址. 3.jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP的值,jmp指令要给出两个信息: (1)转移的目的地址. (2)转移的距离(段间转移,段内转移的短转移和近转移) 4.jmp short 标号(转到标号处执行) 这种指令实现的是段内短转移

汇编语言入门———cpu的工作原理(寄存器)

CPU构成 典型的cpu有 运算器,控制器,寄存器 等器件组成.这些器件靠内部总线相连 寄存器 寄存器是cpu内的组成部分.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址 8086CPU有14 个寄存器  AX , BX, CX, DX, SI, DI, SP, BP, IP, CS , SS, DS, ES , PSW 通用寄存器(8个 一般不变) 8086CPU所有的寄存器都是16位的,可以存放两个字节(1个字) AX BX CX DX 是通用寄存器,通常用来放一般性数据

王爽《汇编语言》第三版 第九章 转移指令的原理

引言 8086CPU的转移指令分为以下几类: 无条件转移指令 (如:jmp) 条件转移指令 循环指令(如:loop) 过程 中断 9.1 操作符offset 操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址. 9.2 jmp指令 jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP. 9.3 依据位移进行转移的jmp指令 jmp short 标号(转到标号处执行指令)这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是

汇编语言笔记 转移指令的原理

原文地址:   http://www.cnblogs.com/dennisOne ?8086CPU转移指令分类 无条件转移指令(如:jmp) 条件转移指令 循环指令(如:loop) 过程 中断 ?操作符offset offset在汇编语言中是由汇编器处理的符号,它的功能是取标号的偏移地址. ?jmp指令 类型 功能 示例 jmp short 标号 (段内短转移) assume cs:code code segment start: mov ax, 0 jmp short s add ax, 1

汇编语言学习第九章-转移指令的原理

本博文系列参考自<<汇编语言>>第三版,作者:王爽 可以修改IP寄存器的值,或者同时修改CS与IP的值的指令称为转移指令.转移指令的功能就是使得CPU执行内存中某段特定的指令或程序. 8086CPU的转移行为分为如下几类: 1.只改变IP值,称为段内转移.比如 jmp ax;段内转移又分为短转移和近转移.短转移IP的修改范围为-128~127,近转移IP的修改范围为-32768~32767. 2.同时改变CS:IP的值称为段间转移.比如 jmp 1000:0 8086CPU的转移指