转移指令的原理02 – 零基础入门学习汇编语言44

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

让编程改变世界

Change the world by program

转移的目的地址在指令中的jmp指令

前面讲的jmp指令,其对应的机器码中并没有转移的目的地址,而是相对于当前IP的转移位移。

指令 “jmp far ptr 标号” 实现的是段间转移,又称为远转移。

指令 “jmp far ptr 标号” 功能如下:

(CS)=标号所在段的段地址;

(IP)=标号所在段中的偏移地址。

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

我们看下面的程序

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

我们在Debug中将程序9.3翻译成为机器码,看到的结果如图:

宽客网,量化投资,宽客俱乐部

debug程序

宽客网,量化投资,宽客俱乐部

jmp far ptr s所对应的机器码

如图中所示:源程序中的db 256 dup (0),被Debug解释为相应的若干条汇编指令 。

这不是关键,关键是,我们要注意一下jmp far ptr s所对应的机器码:EA 0B 01 BD 0B ,其中包含转移的目的地址。

宽客网,量化投资,宽客俱乐部

jmp far ptr s所对应的机器码

“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

视频下载
技术, IT技术, 汇编语言, 视频教程



                                                    风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部