汇编语言-转移指令

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

     
     
     
     
     
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值