第十章 CALL和RET指令

第十章 CALL和RET指令

10.1 ret和retf

  • ret指令用栈中的数据,修改IP,从而实现近转移,(IP)=((ss)*16+(sp)),(sp)=(sp)+2,相当于pop IP
  • retf指令用栈中的数据,修改CS和IP,实现远转移,(IP)=((ss)*16+(sp)),(sp)=(sp)+2,(CS)=((ss)*16+(sp)),(sp)=(sp)+2,相当于pop IP,pop CS

10.2 call 指令

call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作:

(1)将当前的 IP 或 CS和IP 压入栈中;

(2)转移(jmp)。

call指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同。

10.3 依据位移进行转移的call指令

call 标号(近转移)

CPU执行此种格式的call指令时,相当于进行 push IP jmp near ptr 标号

10.4 转移的目的地址在指令中的call指令

call far ptr 标号(段间转移)

CPU执行此种格式的call指令时,相当于进行:push CS,push IP jmp far ptr 标号

10.5 转移地址在寄存器中的call指令

call 16位寄存器

CPU执行此种格式的call指令时,相当于进行: push IP jmp 16位寄存器

10.6 转移地址在内存中的call指令

call word ptr 内存单元地址

CPU执行此种格式的call指令时,相当于进行:push IP jmp word ptr 内存单元地址

mov sp, 10h
mov ax, 0123h
mov ds:[0], ax
call word ptr ds:[0]
;执行后,(IP)=0123H,(sp)=0EH

call dword ptr 内存单元地址

CPU执行此种格式的call指令时,相当于进行:push CS push IP jmp dword ptr 内存单元地址

mov sp, 10h
mov ax, 0123h
mov ds:[0], ax
mov word ptr ds:[2], 0
call dword ptr ds:[0]
;执行后,(CS)=0,(IP)=0123H,(sp)=0CH

10.7 call和ret的配合使用

assume cs:code
code segment
start:	mov ax,1
	    mov cx,3
     	call s ;(1)CPU指令缓冲器存放call指令,IP指向下一条指令(mov bx, ax),执行call指令,IP入栈,jmp
     	
	    mov bx,ax	;(4)IP重新指向这里  bx = 8
     	mov ax,4c00h
     	int 21h
     s: add ax,ax
     	loop s;(2)循环3次ax = 8
	    ret;(3)return : pop IP
code ends
end start

10.8 mnul指令

两个数都是8位

一个默认放在a1里,另一个在8位寄存器或字节内存单元里,结果默认在ax里
两个数都是16位

一个默认放在ax里,另一个放在16位寄存器或内存字单元里,结果默认高位放在dx里,低位在ax

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值