现在的位置: 首页 > 综合 > 正文

汇编语言-转移指令

2013年08月05日 ⁄ 综合 ⁄ 共 798字 ⁄ 字号 评论关闭

1:分类

  • 只修改IP时,称为段内转移,比如jmp ax。

由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。

短转移:-128-127

近转移:-32768-32767

  • 同时修改CS和IP时,称为段间转移

 

2:相关指令 

  • offset操作符,取得标号的逻辑地址。
mov ax,offset s
  • 段内短转移,转移范围为(-128-127)
jmp short 标号
注意,这个标号并不是目标代码段的逻辑地址,而是距离当前代码地址的偏移量。由8位位移组成,所以其范围是-128-127。
jcxz 标号
所有条件转移指令都是短转移。当CX=0时,(IP)=(IP)+8。
loop 标号

如果CX≠0,则跳转,否则,CX=CX-1

  • 段内近转移,转移范围为(-32768-32767)
jmp near 标号

jmp 寄存器  ;只修改IP

jmp word ptr 内存单元地址

示例,这段程序执行后ip被修改为0123h

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

同上,不过这儿的偏移量是16位的标号,所其范围是-32768-32767

  • 段间转移(CS:标号所在段的段地址 IP:标号在段中的偏移地址)
jmp far ptr 标号
jmp dword ptr 内存单元地址

示例,这段程序执行后CS=0,ip=1234h 

    mov ax,1234h
    mov ds:[0],ax
    mov ds:[2],0
    jmp dword ptr ds:[0]
    

3:一个奇怪的程序 

    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
     
     
     
     
     
     

    抱歉!评论已关闭.