第九章 转移指令的原理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



(1)8位位移 = “标号”处的地址 -LOOP指令 后的第一个字节的地址 (2)8位位移的范围为-128~127,用补码表示 (3)8位位移由编译程序在编译时算出。
检测点9.3
assume cs:code code segment start: mov ax, 2000h mov ds, ax mov bx, 0 s: mov cl, [bx] mov ch, 0 __________ inc bx loop s ok: dec bx mov dx, bx
寻址方式:
立即数寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址

第九章 转移指令的原理
转移指令


可以修改IP,或同时修改CS和IP的指令统 称为转移指令。 转移指令就是可以控制CPU执行内存中某 处代码的指令。
转移指令

段内转移:只修改IP,例如 jmp ax
检测点9.1 (3)

2000:1000 BE 00 06 00 00 00 00 …
mov ax, 2000h mov es, ax jmp dword ptr es:[1000h] (CS)= ? , (IP)= ?


9.7 jcxz 指令


条件转移指令 所有的条件转移指令都是短转移,在对 应的机器码中包含转移的位移,而不是 目的地址。 对IP的修改范围为: -128 ~ 127

短转移:修改IP的范围为 -128~127 近转移:修改IP的范围为 -32768~32767

段间转移:同时修改CS和IP,例如jmp 1000:0
转移指令

无条件转移指令 条件转移指令 循环指令 过程 中断
9.1 操作符 offset

offset 在汇编语言中是由编译器处理的符 号,它的功能是取得标号的偏移地址。
mov ax, 4c00h int 21h end start
code ends
9.9 根据位移进行转移的意义

方便程序段在内存中的浮动装配
9.10 编译器对转移位移超界的 检测

jmp short 标号 jmp near 标号 loop 标号 jczx 标号
实 验 8
assume cs: codesg codesg segment mov ax, 4c00h int 21h start: mov ax, 0 s: nop nop mov di, offset s mov si, offset s2 mov ax, cs:[si] mov cs:[di], ax s0: jmp short s s1: mov ax, 0 int 21h mov ax, 0 s2: jmp short s1 nop codesg ends end start
依据位移进行转移的jmp指令

jmp near ptr 标号
jmp near ptr 标号 的功能是: (IP) = (IP) + 16位位移



(1)16位位移 = “标号”处的地址 - jmp指 令后的第一个字节的地址 (2)near 指明此处的位移为16位位移 (3)16位位移的范围为-32768~32767,用补 码表示 (4)16位位移由编译程序在编译时算出。
依据位移进行转移的jmp指令
jmp short 标号 段内短转移 jmp near ptr 标号 段内近转移
9.4 转移的目的地址在指令中 的jmp指令

jmp far ptr 标号
在该类指令的机器码中包含了标号所在 段的段地址和标号在段中的偏移地址
9.5 转移地址在寄存器中的jmp 指令
assume cs:code data segment dd 12345678h data ends code segment start: mov ax, data mov ds, ax mov bx, 0 mov [bx], ____ mov [bx+2], ____ jmp dword ptr ds:[0] code ends end start
实验9 学习在屏幕上显示字符

理解 jmp short 标号 的机器码
jmp short 标号 的功能是: (IP) = (IP) + 8位位移


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

LOOP指令是循环指令,所有的循环指令 都是短转移,在对应的机器码中包含转 移的位移,而不是目的地址。对IP的修 改范围是 -128 ~ 127。
LOOP 指令


LOOP
操作:

ห้องสมุดไป่ตู้
标号
1、(CX) = (CX) – 1 2、如果(CX) ≠0, (IP) = (IP) + 8位位移


jmp 16位寄存器
功能: (IP) = (16位寄存器)
9.6 转移地址在内存中的jmp指令 jmp word ptr 内存单元地址

段内近转移
jmp dword ptr 内存单元地址

段间转移 从内存单元地址处开始存放两个字,高地址处的字是转 移的目的段地址,低地址处是转移的目的偏移地址。
jcxz 指令

jczx 标号
操作: 当(CX) = 0 时, (IP) = (IP)+8 位位移 当(CX) ≠ 0时,程序执行下一条指令
检测点9.2
assume cs:code code segment start: mov ax, 2000h mov ds, ax mov bx, 0 s: ___________ ___________ ___________ ___________ jmp short s ok: mov dx, bx mov ax, 4c00h int 21h code ends end start
检测点9.1 (1)
assume cs;code data segment ? data ends code segment start: mov ax, data mov ds, ax mov bx, 0 jmp word ptr [bx+1] code ends end start
检测点9.1 (2)
问题9.1
9.2 jmp指令

无条件转移指令

它指出两种信息:

转移的目的地址 转移的距离
9.3 依据位移进行转移的jmp指令


jmp short 标号
段内短转移,它对IP的修改范围是-128~127。 也就是说,它向前转移时可以最多越过128个 字节,向后转移时最多越过127个字节。 标号:指代码段中的标号,指明了指令要转移 的目的地,转移指令执行后,CS:IP指向标号处 的指令
相关文档
最新文档