王爽 《汇编语言》 第9章 转移指令的原理 学习笔记

目录

一、转移指令

二、操作符offset

三、jmp指令——无条件转移指令

1.转移地址由标号给出

(1)段内转移(根据位移进行转移)

1)段内短转移

2)段内近转移

(2)段间转移

2.转移地址在寄存器中

3.转移地址在内存中

(1)段内转移

(2)段间转移

四、jxcz指令——有条件转移指令+短转移

五、loop指令——循环指令+短转移

六、根据位移进行转移的意义

七、编译器对转移位移超界的检测


一、转移指令

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

分类:

(1)段内转移(只修改IP)

短转移 IP修改范围为-128到127

近转移 IP修改范围为-32768到32767

(2)段间转移(同时修改CS和IP)

8086CPU的转移指令的分类:

(1)无条件转移指令(如:jmp)

(2)条件转移指令

(3)循环指令

(4)过程

(5)中断

二、操作符offset

功能:取得标号的偏移地址

例:    s: mov ax,offset s  

三、jmp指令——无条件转移指令

jmp可以只修改IP,也可同时修改CS和IP

1.转移地址由标号给出

(1)段内转移(根据位移进行转移)

1)段内短转移

语法:jmp short 标号

对应的机器码中,包含转移的位移(位移为标号处的地址-jmp指令后的第一个字节的地址)

功能:(IP)=(IP)+8位位移

例:

start:  mov ax,0
        jmp short s
        add ax,1
    s:  inc ax

jmp short s 对应的机器码是EB03,意味着位移为3,即跳到inc ax语句

2)段内近转移

语法:jmp near ptr 标号

功能:(IP)=(IP)+16位位移

(2)段间转移

语法:jmp far ptr 标号

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

例:

start:  mov ax,0
        mov bx,0
        jmp far ptr s
        db 256 dup (0)
    s:  add ax,1
        inc ax   

jmp far ptr s 的机器码为  EA0801BD0B

转移的段地址为0BBDH,偏移地址为 010BH

2.转移地址在寄存器中

语法:jmp 16位reg

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

3.转移地址在内存中

(1)段内转移

jmp word ptr 内存单元地址

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

例:

mov ax,0123H
mov ds:[0],ax
jmp word ptr ds:[0]

执行后,(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

四、jxcz指令——有条件转移指令+短转移

所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移

语法:jcxz 标号

操作:当(cx)=0时,(IP)=(IP)+8位位移

位移由编译程序在编译时算出,范围都为-128到127

五、loop指令——循环指令+短转移

所有的循环指令都是短转移,在对应的机器码中包含转移的位移

语法:loop 标号

操作:

(1)(cx)=(cx)-1

(2)若(cx)不等于0,(IP)=(IP)+8位位移

六、根据位移进行转移的意义

方便了程序段在内存中的浮动装配——程序装在内存中的不同位置都可正常执行

七、编译器对转移位移超界的检测

例:jmp short s,若IP向后移动超过127个字节,则编译器会报错。

你可能感兴趣的:(王爽《汇编语言》笔记,学习,笔记,汇编)