汇编基础(七)之常用跳转指令

JMP指令

作用

无条件转移指令,可以只修改IP,也可以同时修改CS和IP。

作用范围

段内短转移(移动范围:-128~127) JMP SHORT 标号
段内近转移(移动范围:-32768~32767) JMP NEAR PTR 标号
段间远转移(移动范围:内存中任意位置) JMP FAR PTR 标号

FAR PTR 指明了转移指令用标号的段地址和偏移地址修改CS和IP。
在这里插入图片描述在这里插入图片描述

JMP指令转移地址

转移地址可以在寄存器中
格式:
JMP 寄存器(16位)(段内转移)
在这里插入图片描述
转移地址可以在内存中
格式:
JMP WORD PTR 内存单元测试(段内转移)
JMP DWORD PTR 内存单元地址(段间转移)
内存段内转移内存段间转移

JCXZ指令

作用:有条件转移指令。段内段转移,范围为:-128~127
格式:JCXZ 标号
解释:如果CX寄存器的值为0,则转移标号处执行

LOOP循环指令

作用:循环指令,范围:-128~127
格式

mov cx,循环次数
标号:
循环体
loop 标号

RET指令

作用:取栈中的数据,修改IP寄存器的内容,实现近转移
在这里插入图片描述

RETF指令

作用:取栈中的数据,修改CS和IP寄存器的内容,实现远转移
在这里插入图片描述

CALL指令

语法

CALL 标号

作用:将CALL+标号的下一条语句的IP寄存器中的值放入栈中,然后转到标号处执行指令
在这里插入图片描述最后在标号中加一条ret语句,就可以完成一个模块化程序的设计
每一个标号中的代码就是对应的一个模块程序

assume cs:code,ds:data,ss:stack

data segment
data ends

stack segment
    dw 256 dup(0H)
stack ends

code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,60H

    mov ax,bx
  call s0
  mov ax,bx

    mov ax,4c00H
    int 21H

s0:
    mov bx,cx
    mov bx,cx
    ret


    code ends
    end start

CALL FAR PTR 标号

作用:将CALL FAR PTR 标号下一条语句的CS寄存器、IP寄存器入栈,然后转到标号处执行指令。

CALL 寄存器

作用:将CALL+寄存器下一条语句的IP寄存器中的值入栈,然后转到寄存器值的位置执行指令。
代码如下,效果同上:

assume cs:code,ds:data,ss:stack

data segment
data ends

stack segment
    dw 256 dup(0H)
stack ends

code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,60H

    mov ax,bx
    mov cx,offset s0
    call cx
    mov ax,bx

s0:
    mov bx,cx
    mov bx,cx
    ret

    mov ax,4c00H
    int 21H

    code ends
    end start

CALL WORD PTR 内存单元地址

作用:将CALL WORD PTR 内存单元地址下一条语句的值入栈,然后转到内存单元所存储值的位置执行指令。

assume cs:code,ds:data,ss:stack

data segment
DW 256 DUP(0H)
data ends

stack segment
DW 256 DUP(0H)
stack ends

code segment
start:
    mov ax,data
    mov ds,ax

    mov ax,stack
    mov ss,ax
    mov sp,60H

    mov word ptr ds:[0],offset s0	;将大小为1个字的s0的偏移地址,存入ds:0000中
    mov ax,bx
    call word ptr ds:[0]
    mov ax,bx

s0:
    mov bx,cx
    mov bx,cx
    ret

    mov ax,4c00H
    int 21H

    code ends
    end start

CALL DWORD PTR 内存单元地址

作用:将CALL DWORD PTR 内存单元地址下一条语句的CS寄存器、IP寄存器的值入栈,然后转到内存单元所存储值的位置执行指令。

(参考JMP)

assume cs:code,ds:data,ss:stack

data segment
DW 256 DUP(0H)
data ends

stack segment
DW 256 DUP(0H)
stack ends

code segment
start:
    mov ax,data
    mov ds,ax

    mov ax,stack
    mov ss,ax
    mov sp,60H

    mov word ptr ds:[0],offset s0
    mov word ptr ds:[0],code
    mov ax,bx
    call dword ptr ds:[0]
    mov ax,bx

s0:
    mov bx,cx
    mov bx,cx
    ret

    mov ax,4c00H
    int 21H

    code ends
    end start
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值