jmp用法以及原理分析

段内转移和段间转移

转移指令:控制cpu执行内存中的某行代码,可以通过修改IP或者同时修改cs:ip

只修改IP的称为段内转移:jmp ax  相当于 mov ax,ip   jmp ax

同时修改cs:ip的叫段间转移:jmp 1000:0(这是debug语法,只能在debug中使用)


段内转移分为短转移和近转移

短转移ip修改范围:-128-127(一个有符号的字节范围)

近转移ip修改范围:-32768-32767(两个有符号字节范围)




8086转移指令分几类:

无条件转移指令:如jmp

条件转移指令:如jcxz

循环指令:如loop

过程

中断



操作符offset:

操作符offset在汇编语言中是由编译器处理的符号,它的功能是获取标号的偏移地址IP,如下程序

assume cs:code
code segment
	start:mov ax  offset  start ;相当于mov ax 0(start)
    	s: mov ax  offset  s       ;相当于mov ax 3(s)
	mov ax, 4c00h
	int 21h	
code endsend start




Jmp的转移指令原理

一般在汇编指令中,汇编指令中的idata,不论它是表示一个数,还是内存单元地址都会在对应的机器码中出现,因为cpu执行的是机器指令,它必须处理这些数据和或地址,如下程序

assume cs:code
code segment
  start:mov ax,0
	mov bx,0123
	mov ax,ds:[0123H]
	push ds:[0123h]	
	
	mov ax, 4c00h
	int 21h;
	
code ends
end start

程序如下图:




看下例程序和上面的程序的不同点

程序一:

assume cs:code
code segment
  start:mov ax,0
	  jmp short s
	  add ax,1
        s:inc ax	
	mov ax, 4c00h
	int 21h		
code endsend start



程序二:

assume cs:code
code segment
  start:mov ax,0
	mov bx,1
	jmp short s
	add ax,1
      s:inc ax 	
	
	mov ax, 4c00h
	int 21h	
code endsend start



这两个程序中用jmp short命令编译后的目的地址(idata)没有出现在机器码中,这说明cpu在执行jmp转移指令的时候不需要目的地址

那cpu是靠什么进行转移到目的地址的呢?


回想cpu执行指令的过程:

1从cs:ip处向内存单元读取指令,指令进入缓冲区

2ip=ip+指令的长度,cpu指向下一条指令

3执行指令,重复步骤1继续循环




用cpu执行指令过程分析程序1的jmp指令:

1cs=0B41 ip=0003,cpu指向EB03机器码

2从内存单元0B41:0003处读取指令EB03,  EB03进入缓冲区

3ip=0003+2=0005,cpu指向add ax,1

4cpu执行指令缓冲区的EB03

5EB03执行后ip=0008,cs:ip指向inc ax



在这个过程中可以分析得出,cpu执行指令前ip=0005指向add ax,1,但是执行EB03后,ip=0008cpu指向inc ax,cpu是根据EB03而判断执行下一条指令的,
EB03是根据是什么修改ip(偏移地址)的,让cpu转移到目标地址的呢?是根据EB03中的03修改ip,要转移的目标指令cs:0008,当前ip=0005,ip=ip+3=0008
这时cpu就指向目标地址了,在转移指令EB03并没有告诉cpu转移的目的地址却告诉的cpu要转移的位移,即将当前的ip向后移动3个字节,程序1和2中jmp指令的位移都相同所以它们的机器码都是EB 03


从上面可以知道机器码中包含的信息是转移的位移,而位移是在由编译器在编译的时候根据标号算出位移的
如图表示位移计算:




jmp short 标号 功能为:段内短转移   (IP)=(IP)+8位位移

1 8位位移=标号处的地址-jmp指令后的第一个字节地址

2 short指明的此处是8位位移

3 8位位移的范围为-128-127,用补码表示

4 8位位移是编译程序时在编译时算出的


jmp near ptr 标号 功能为:段内近转移 (IP)=(IP)+16位位移

1 8位位移=标号处的地址-jmp指令后的第一个字节地址

2 short指明的此处是8位位移

3 8位位移的范围为-32768-32767,用补码表示

4 8位位移是编译程序时在编译时算出的


下面用jmp指令举一个有意思的程序如下:

assume cs:code
code segment
	mov ax,4c00h
	int 21h
start:  mov ax,0

s:      nop 		;jmp short s1 (EBF6)
	nop

	mov di,offset s		;offset获取s标号的偏移地址
	mov si,offset s2
	mov ax,cs:[si]	;cs:[si]是s2的偏移地址的内存空间,里面的值是jmp short s1
	mov cs:[di],ax	;把jmp short s1放到cs:[di]=cs:[s]的地址内存空间


s0:	jmp short s

	;看图解释如下:
		
	;这时转移到s偏移地址执行,s处是jmp short s1,在编译的时候偏移地址
	;就已经算好了是-10(f6),所以执行时候从s处执行jmp short s1(EBF6)时
	;目的地址=当前ip(000A)+偏移地址(-10),jmp就转移的目的地址是cs:00处
	;执行cs:00处mov ax,4cooh程序运行结束
			

s1:	mov ax,0
	int 21h
	mov ax,0

s2: 	jmp short s1	;执行时偏移地址为-10 补码=f6
	nop

code ends
end start

程序实验如下图:





其他jmp转移指令

jmp far ptr 标号 功能为:段间转移,far ptr指明了用标号的段地址(CS)和偏移地址(IP)修改CS:IP,让cpu指向目的地址,这是直接给出目的地址,不是根据位移

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

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

jcxz 标号(条件转移)功能为:当(cx)=0时,(ip)=(ip)+8位位移,当(CX)!=(不等于)0时候,什么也不做,程序向下执行,

JCXZ 标号相当于 if(cx==0)  {   jmp short 标号  }

LOOP和JCXZ相反,当CX!=0时,(IP)=(ip)+8位位移


  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: jmp统计分析教程是一本非常实用的PDF教程,它主要介绍了如何使用jmp软件进行统计分析Jmp是一款由SAS公司开发的统计分析工具,它在数据分析和可视化方面具有强大的功能。 这本教程涵盖了从基本的统计概念到高级的数据分析技巧,适合初学者和有一定统计基础的人使用。首先,它介绍了Jmp软件的基本操作和界面,包括如何导入数据、创建数据表和变量转换等。然后,它详细说明了各种统计方法的使用,如描述统计、假设检验、方差分析、回归分析等。同时,它还介绍了如何进行图表绘制和报告生成,以便更清晰地展示和解释统计结果。 这本教程的优点之一是它以实际案例为例,通过真实的数据来演示如何应用统计方法进行分析。这样可以帮助读者更好地理解统计概念和方法,并学会如何在实际问题中灵活应用。此外,教程还提供了丰富的练习题和答案,可以帮助读者检验自己的学习效果和巩固所学知识。 总体来说,jmp统计分析教程是一本内容详实、实用性强的教程,对于想要学习统计分析和使用jmp软件的人来说是一本不可缺少的参考资料。无论是在学术研究、商业分析还是数据挖掘等领域,这本教程都能帮助读者更轻松地进行统计分析,并从数据中发现有价值的信息。 ### 回答2: 《JMP统计分析教程PDF》是一本关于JMP统计软件的教程,该软件是由SAS公司开发的一种强大的统计分析工具。该教程着重介绍了JMP软件的基本功能和使用方法,为用户提供了详细的指导和实例演示,使其能够快速掌握统计分析的基本原理和操作技巧。 该教程的PDF格式使得阅读和学习更加方便,用户可以随时随地进行学习。教程的内容包括数据导入、数据清洗、数据可视化、基本统计分析、假设检验、回归分析、因子分析等多个方面,覆盖了统计分析的核心内容。 通过学习该教程,用户可以了解如何使用JMP软件进行数据处理和分析,掌握基本统计方法和指标的应用,学会利用JMP软件进行数据可视化和结果解释。教程中的实例演示和练习题可以帮助用户更好地巩固所学知识,并提供了一些常见的数据分析案例,让用户能够更好地应用到实际问题中。 总的来说,《JMP统计分析教程PDF》是一本非常实用的教材,适合想要学习统计分析和掌握JMP软件的人使用。无论是初学者还是有一定统计基础的人士,都可以通过该教程系统地学习和掌握统计分析的知识和技能。 ### 回答3: jmp统计分析教程pdf是一本简单易懂的统计分析教材,适合初学者和有一定统计基础的人使用。这本教程将统计分析的基本概念和技术用简明的语言解释,帮助读者快速掌握统计分析的方法和步骤。 教程的主要内容包括数据输入和整理、常用统计图表的绘制、描述统计分析、参数统计分析、非参数统计分析、方差分析、回归分析等。每个章节都配有清晰的图表和实例,帮助读者理解并应用所学知识。 该教程还介绍了统计软件JMP的基本使用方法,通过实际操作,读者可以学习如何在JMP环境中进行数据输入、数据处理和统计分析,为读者提供了一个实践统计分析的平台。 此外,教程还涵盖了常见的统计建模方法,如线性回归、逻辑回归和生存分析等,读者可以学习如何运用这些方法分析实际问题。 总之,jmp统计分析教程pdf是一本适合初学者和有一定统计基础的人使用的统计分析教材。通过阅读该教程,读者可以轻松理解和掌握统计分析的基本原理和方法,提高自己的数据分析能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值