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

简介: 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 segment
 
start:  mov ax,1
        mov cx,3
        call s
        mov bx,ax
 
        mov ax,4c00h
        int 21h        ;(bx)=?
 
   s:   add ax,ax
        loop sret
 
code ends
 
end 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寄存器置为5678h
 
MUL CX ; 将CX寄存器中的值与AX寄存器中的值相乘
 
; 结果存储在DX:AX寄存器对中

相关文章
|
1月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
1月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
130 0
几组汇编指令的比较
几组汇编指令的比较
|
4月前
|
存储 安全 数据安全/隐私保护
Windows 32 汇编笔记(一):基础知识
Windows 32 汇编笔记(一):基础知识
|
3月前
|
存储 编译器 Linux
Windows 32 汇编笔记(二):使用 MASM
Windows 32 汇编笔记(二):使用 MASM
|
4月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
4月前
|
存储 索引
8086 汇编笔记(十一):内中断
8086 汇编笔记(十一):内中断
|
6月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
215 2
|
6月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
618 0
|
4月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍