转移指令的原理02 - 零基础入门学习汇编语言44
2011-01-07 13:45
696 查看
第九章:转移指令的原理02
让编程改变世界Change the world by program
转移的目的地址在指令中的jmp指令
前面讲的jmp指令,其对应的机器码中并没有转移的目的地址,而是相对于当前IP的转移位移。指令 “jmp far ptr 标号” 实现的是段间转移,又称为远转移。
指令 “jmp far ptr 标号” 功能如下:(CS)=标号所在段的段地址;
(IP)=标号所在段中的偏移地址。
far ptr指明了指令用标号的段地址和偏移地址修改CS和IP。
我们看下面的程序
[codesyntax lang="asm"]
assume cs:codesg codesg segment start: mov ax,0 mov bx,0 jmp far ptr s db 256 dup (0) s: add ax,1 inc ax codesg ends end start
[/codesyntax]
我们在Debug中将程序9.3翻译成为机器码,看到的结果如图:
[caption id="attachment_359" align="aligncenter" width="300"]
debug程序[/caption]
[caption id="attachment_360" align="aligncenter" width="300"]
jmp far ptr s所对应的机器码[/caption]
如图中所示:源程序中的db 256 dup (0),被Debug解释为相应的若干条汇编指令 。
这不是关键,关键是,我们要注意一下jmp far ptr s所对应的机器码:EA 0B 01 BD 0B ,其中包含转移的目的地址。
[caption id="attachment_360" align="aligncenter" width="300"]
jmp far ptr s所对应的机器码[/caption]
“0B 01 BD 0B” 是目的地址在指令中的存储顺序,高地址的“BD 0B”是转移的段地址:0BBDH,低地址的“0B 01” 是偏移地址:010BH。
对于“jmp X 标号”格式的指令的深入分析请参看附注3。
指令格式:jmp 16位寄存器
功能:IP =(16位寄存器)这种指令我们在前面的课程(参见2.11节)中已经讲过,这里就不再详述。
转移地址在内存中的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 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。
(CS)=(内存单元地址+2)
(IP)=(内存单元地址)
内存单元地址可用寻址方式的任一格式给出。
示例:
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。
检测点9.1
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy][Downlink href='http://kuai.xunlei.com/d/LBQJFSRDZEDF']视频下载[/Downlink]
相关文章推荐
- 转移指令的原理02 - 零基础入门学习汇编语言44
- 转移指令的原理04 - 零基础入门学习汇编语言46
- 转移指令的原理04 - 零基础入门学习汇编语言46
- 转移指令的原理05 - 零基础入门学习汇编语言47
- 转移指令的原理01 - 零基础入门学习汇编语言43
- 转移指令的原理05 - 零基础入门学习汇编语言47
- 转移指令的原理01 - 零基础入门学习汇编语言43
- 转移指令的原理03 - 零基础入门学习汇编语言45
- 转移指令的原理03 - 零基础入门学习汇编语言45
- int指令02 - 零基础入门学习汇编语言65
- int指令02 - 零基础入门学习汇编语言65
- [BX]和loop指令02 - 零基础入门学习汇编语言24
- [BX]和loop指令02 - 零基础入门学习汇编语言24
- 使用BIOS进行键盘输入和磁盘读写02 - 零基础入门学习汇编语言76
- int指令03 - 零基础入门学习汇编语言66
- [BX]和loop指令01 - 零基础入门学习汇编语言23
- 端口02 - 零基础入门学习汇编语言68
- [BX]和loop指令06 - 零基础入门学习汇编语言28
- Call指令和Ret指令讲解02 - 零基础入门学习汇编语言49
- [BX]和loop指令01 - 零基础入门学习汇编语言23