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. 8086 汇编笔记):call 指令 ret 指令

    2024-06-08 14:38:03       9 阅读
  2. 深入理解汇编:平栈、CALLRET指令详解

    2024-06-08 14:38:03       12 阅读
  3. 8086 汇编笔记(四):[BX] loop 指令

    2024-06-08 14:38:03       9 阅读
  4. 8086 汇编笔记(八):转移指令的原理

    2024-06-08 14:38:03       9 阅读
  5. 理解汇编中的CALL指令参数传递

    2024-06-08 14:38:03       18 阅读
  6. 汇编指令retnretn x的区别

    2024-06-08 14:38:03       30 阅读
  7. 4.4 call far ptrretf指令,本质是栈、goto指令

    2024-06-08 14:38:03       16 阅读
  8. 8086 汇编笔记(十一):内中断

    2024-06-08 14:38:03       10 阅读
  9. 【ARM64 常见汇编指令学习 21 -- ARM RET 与 ERET】

    2024-06-08 14:38:03       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 14:38:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 14:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 14:38:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 14:38:03       20 阅读

热门阅读

  1. npm install 安装很慢如何解决?

    2024-06-08 14:38:03       13 阅读
  2. npm 语义化版本控制

    2024-06-08 14:38:03       11 阅读
  3. NLP--关键词

    2024-06-08 14:38:03       12 阅读
  4. SQL中的增删改查入门教程

    2024-06-08 14:38:03       9 阅读
  5. ES各种分页方式及其优缺点对比

    2024-06-08 14:38:03       9 阅读