指令
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