您的位置:首页 > 新闻 > 会展 > 8086 汇编笔记(九):call 指令 和 ret 指令

8086 汇编笔记(九):call 指令 和 ret 指令

2025/2/24 18:22:05 来源:https://blog.csdn.net/2302_82189125/article/details/139415124  浏览:    关键词:8086 汇编笔记(九):call 指令 和 ret 指令

一、ret 和 retf

ret 用栈中的数据,修改IP的内容,从而实现近转移;
retf 指令用栈中的数据,修改CS和IP的内容,从而实现远转移。

CPU执行ret指令时,进行下面两步操作:

(1)(IP) = ((SS)*16+(SP))
(2)(sp) = (sp)+2

以上步骤相当于进行:

pop IP

CPU执行retf指令时,进行下面4步操作:

(1)(IP) = ((SS)*16+(SP))
(2)(sp) = (sp)+2
(3)(CS) = ((SS)*16+(SP))
(4)(sp) = (sp)+2

以上步骤相当于进行:

pop IP pop CS

二、call 指令

call 指令可以理解为高级语言中的方法(函数)调用功能。

CPU 指令 call 指令时,进行两步操作:

(1)将当前的IP或CS和IP压入栈中(保存现场)

(2)转移

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

三、依据位移进行转移的 call 指令 

指令格式:

call 标号

CPU执行该指令时相当于进行:

push IP jmp near ptr 标号

四、转移的目的地址在指令中的 call 指令

指令格式:

call far ptr 标号

CPU执行该指令时相当于进行:

push CS push IP jmp far ptr 标号

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

指令格式:

call 16位 reg 

CPU执行该指令时相当于进行:

push IP jmp 16位 reg

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

转移地址在内存中的call指令有两种格式

(1)第一种指令格式:

call word ptr 内存单元地址

CPU 执行该指令时相当于进行:

push IP jmp word ptr 内存单元地址

 (2)第二种指令格式:

call dword ptr 内存单元地址

CPU 执行该指令时相当于进行:

push CS push IP jmp dword ptr 内存单元地址

七、call 和 ret 的配合使用 

call和ret的配合使用可以用来实现子程序的机制。call指令在转去执行子程序之前,会将当前指令下一条指令的位置保持在栈中,当子程序执行ret或retf指令后,会用栈中的数据设置ip或cs和ip的值,从而转到call指令后面的代码处继续执行 

code segmentstart:  mov ax,1mov cx,3call smov bx,axmov ax,4c00hint 21h        ;(bx)=?s:   add ax,axloop sretcode endsend start

答案是 8 

八、mul 指令

(1)两个相乘的数:练歌相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认放在AX中,另一个放在16位reg或内存字单元中。

(2)结果:如果是8位乘法,结果默认放在AX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放。

MOV AX, 1234h ; 将AX寄存器置为1234h
MOV CX, 5678h ; 将CX寄存器置为5678hMUL CX ; 将CX寄存器中的值与AX寄存器中的值相乘; 结果存储在DX:AX寄存器对中

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com