《intel开发手册卷1》学习笔记1

1、操作模式

IA-32架构支持三种基本操作模式:保护模式、实地址模式和系统管理模式。操作模式决定了哪些指令和体系结构功能是可访问的:

        1)保护模式:该模式是处理器的自然状态。保护模式的功能之一是能够在受保护的多任务环境中直接执行“实地址模式”8086软件。这个特性被称为虚拟8086模式,尽管它实际上不是处理器模式。Virtual-8086模式实际上是一种受保护的模式属性,可以为任何任务启用。

        2)实地址模式:该模式实现了带有扩展的英特尔8086处理器的编程环境(例如切换到保护模式或系统管理模式的能力)。处理器在上电或复位后被置于实地址模式。

        3)系统管理模式(SMM):该模式为操作系统或执行程序提供了一种透明的机制,用于实现特定于平台的功能,如电源管理和系统安全。当外部SMM中断引脚(SMI#)被激活或从高级可编程中断控制器(APIC)接收到SMI时,处理器进入SMM。

英特尔64架构增加IA-32e模式。IA-32e模式有两个子模式:

        兼容模式(IA-32e模式的子模式):兼容模式允许大多数传统16位和32位应用程序在64位操作系统下无需重新编译即可运行。为简洁起见,兼容子模式在IA-32架构中称为兼容模式。兼容模式还支持64位模式和受保护模式支持的所有权限级别。在虚拟8086模式下运行或使用硬件任务管理的传统应用程序将无法在此模式下工作。兼容模式由操作系统(OS)基于代码段启用。这意味着单个64位操作系统可以支持在64位模式下运行的64位应用程序,并支持在兼容模式下运行的传统32位应用程序(未针对64位进行重新编译)。兼容模式类似于32位保护模式。应用程序只能访问线性地址空间的前4gb。兼容模式使用16位和32位地址和操作数大小。与保护模式一样,该模式允许应用程序使用PAE(物理地址扩展)访问大于4gb的物理内存。

        64位模式(IA-32e模式的子模式)—该模式使64位操作系统能够运行为访问64位线性地址空间而编写的应用程序。为简便起见,64位子模式在IA-32架构中称为64位模式。64位模式将通用寄存器和SIMD扩展寄存器的数量从8个扩展到16个,通用寄存器扩展到64位。该模式还引入了一个新的操作码前缀(REX)来访问寄存器扩展。操作系统基于代码段启用64位模式。它的默认地址大小是64位,默认操作数大小是32位。使用REX操作码前缀和操作数大小覆盖前缀,可以逐个指令地覆盖默认操作数大小。

2、基本执行环境概述

在 IA-32 处理器上运行的任何程序或任务都有一组资源,用于执行指令和存储代码、数据及状态信息。这些资源(如图 3-1 所示)构成了 IA-32 处理器的基本执行环境。英特尔 64 处理器支持 IA-32 处理器的基本执行环境,以及 IA-32e 模式下的类似环境,它可以执行 64 位程序(64 位子模式)和 32 位程序(兼容性子模式)。基本执行环境由处理器上运行的应用程序和操作系统或执行程序共同使用。

        地址空间 :在 IA-32 处理器上运行的任何任务或程序都可以寻址最大 4 GB 字节(2^{32}字节)的线性地址空间和最大 64 GB 字节(2^{36} 字节)的物理地址空间。

        基本程序执行寄存器 :8个通用寄存器、6个段寄存器、EFLAGS 寄存器和 EIP(指令指针)寄存器组成了一个基本的执行环境,在此环境中可以执行一系列通用指令。这些指令对字节、字和双字整数进行基本整数运算,处理程序流控制,对位和字节串进行操作,并对内存寻址。

        x87 FPU 寄存器 : 8 个 x87 FPU 数据寄存器、x87 FPU 控制寄存器、状态寄存器、x87 FPU 指令指针寄存器、x87 FPU 操作数(数据)指针寄存器、x87 FPU 标记寄存器和 x87 FPU 操作码寄存器为操作单精度、双精度和双扩展精度浮点数值、字整数、双字整数、四字整数和二进制编码十进制 (BCD) 数值提供了执行环境。x87 浮点运算单元(FPU)具有高性能浮点处理能力,可用于图形处理、科学、工程和商业应用。它支持浮点、整数和打包 BCD 整数数据类型,以及 IEEE 浮点运算标准 754 中定义的浮点处理算法和异常处理架构

        MMX 寄存器:8个 MMX 寄存器支持对 64 位打包字节、字和双字整数执行单指令、多数据(SIMD)操作。

        XMM 寄存器:8 个 XMM 数据寄存器和 MXCSR 寄存器支持对 128 位打包的单精度和双精度浮点数值以及 128 位打包的字节、字、双字和四字整数执行 SIMD 操作。

        YMM 寄存器 :YMM 数据寄存器支持对 256 位打包的单精度和双精度浮点数值以及 256 位打包的字节、字、双字和四字整数执行 256 位 SIMD 操作。

        边界寄存器:BND0-BND3 寄存器分别存储与内存缓冲区指针相关的下限和上限(各 64 位)。它们支持英特尔 MPX 指令的执行。

        BNDCFGU 和 BNDSTATUS:BNDCFGU配置边界检查的用户模式MPX操作,BNDSTATUS提供了由MPX操作导致的#BR的附加信息。

        堆栈:为了支持函数或子例程调用以及函数或子例程之间的参数传递,在执行环境中包括了堆栈和堆栈管理资源。堆栈位于内存中。

除了基本执行环境中提供的资源,IA-32体系结构还提供以下资源作为其系统级体系结构的一部分。它们为操作系统和系统开发软件提供广泛的支持。

        I/O端口:IA-32架构支持输入/输出(I/O)端口之间的数据传输。

        控制寄存器:5个控制寄存器(CR0至CR4)决定处理器的工作模式和当前执行任务的特征。

        内存管理寄存器:GDTR、IDTR、任务寄存器和LDTR指定保护模式内存管理中使用的数据结构的位置。

        调试寄存器:调试寄存器(DR0至DR7)控制并允许监控处理器的调试操作。

        存储器类型范围寄存器(mtrr):mtrr用于为存储器区域分配存储器类型。

        特定型号寄存器(MSR):处理器提供多种特定型号寄存器,用于控制和报告处理器性能。几乎所有MSR都处理与系统相关的功能,并且不能被应用程序访问。这个规则的一个例外是时间戳计数器。

        机器检查寄存器:机器检查寄存器由一组控制、状态和错误报告MSR组成,用于检测和报告硬件(机器)错误。

        性能监控计数器:性能监控计数器允许监控处理器性能事件。

3、64位模式执行环境

64位模式的执行环境类似于基本执行环境(本文第2节)。以下段落描述了二者之间的一些差异:

        地址空间:在IA-32处理器上以64位模式运行的任务或程序可以寻址高达2^{64}字节的线性地址空间和高达2^{52}字节的物理地址空间。软件可以向CPUID查询处理器支持的物理地址大小。

        基本程序执行寄存器 :可用的通用寄存器(GPR)数量为 16 个。通用寄存器宽 64 位,支持对字节、字、双字和四字整数的操作。对字节寄存器的访问统一到最低的 8 位。指令指针寄存器变为 64 位。EFLAGS 寄存器扩展到 64 位,称为 RFLAGS 寄存器。RFLAGS 的高 32 位被保留。RFLAGS 的低 32 位与 EFLAGS 相同。

        XMM 寄存器 :共有 16 个 XMM 数据寄存器,用于 SIMD 操作。

        YMM 寄存器 :共有 16 个用于 SIMD 操作的 YMM 数据寄存器。

        堆栈: 堆栈指针大小为 64 位。堆栈大小不受 SS 描述符中的位控制(在非 64 位模式中),也不能由指令前缀覆盖指针大小。

        控制寄存器 :控制寄存器扩展至 64 位。新增了一个控制寄存器(任务优先级寄存器:CR8 或 TPR)。

        调试寄存器:调试寄存器扩展到 64 位。

        描述符表寄存器 :全局描述符表寄存器(GDTR)和中断描述符表寄存器(IDTR)扩展为 10 字节,可容纳完整的 64 位基址。本地描述符表寄存器(LDTR)和任务寄存器(TR)也扩展到可保存完整的 64 位基址。

4、IA-32内存模型

当使用处理器的内存管理功能时,程序并不直接寻址物理内存。相反,它们使用三种内存模型之一访问内存:平面、分段或实地址模式: •

        平面内存模型 :内存对于程序来说是一个单一的、连续的地址空间(图 3-3)。该空间称为线性地址空间。代码、数据和堆栈都包含在这个地址空间中。线性地址空间是可字节寻址的,地址从 0 到 2^{32} -1连续运行(如果不是在 64 位模式下)。线性地址空间中任何字节的地址称为线性地址。

        分段内存模型:内存对于程序来说是一组称为段的独立地址空间。代码、数据和堆栈通常包含在单独的段中。为了寻址段中的字节,程序发出逻辑地址。它由段选择器和偏移量组成(逻辑地址通常称为远指针)。段选择器标识要访问的段,偏移量标识该段地址空间中的字节。在 IA-32 处理器上运行的程序最多可以寻址 16,383 个不同大小和类型的段,每个段最大可达 2^{32}字节。在内部,为系统定义的所有段都被映射到处理器的线性地址空间。为了访问内存位置,处理器将每个逻辑地址转换为线性地址。这种翻译对于应用程序来说是透明的。使用分段内存的主要原因是为了提高程序和系统的可靠性。例如,将程序的堆栈放置在单独的段中可以防止堆栈增长到代码或数据空间并分别覆盖指令或数据

         实地址模式内存模型:这是Intel 8086 处理器的内存模型。它支持提供与在 Intel 8086 处理器上运行的现有程序的兼容性。实地址模式使用分段内存的特定实现,其中程序和操作系统/执行程序的线性地址空间由每个大小高达 64 KB 的段数组组成。实地址模式下线性地址空间的最大大小为2^{20}字节。

当使用 IA-32 架构的分页机制(启用分页)时,线性地址空间被划分为映射到虚拟内存的页面。然后,虚拟内存页根据需要映射到物理内存中。当操作系统或执行程序使用分页时,分页机制对于应用程序是透明的。应用程序看到的只是线性地址空间。

5、基本寄存器

IA-32 架构提供了 16 个基本程序执行寄存器,用于一般系统和应用程序编程(见图 3-4)。这些寄存器可以分组如下:

         通用寄存器:这8个寄存器可用于存储操作数和指针。

         段寄存器:这些寄存器最多可容纳6个段选择器。

         EFLAGS(程序状态和控制)寄存器: EFLAGS 寄存器报告正在执行的程序的状态,并允许对处理器进行有限(应用程序级)控制。

         EIP(指令指针)寄存器:EIP寄存器包含一个32位指针,指向下一条要执行的指令。

5.1、通用寄存器

32 位通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、EBP 和ESP 用于以下用途:

         • 逻辑和算术运算的操作数。

        • 用于地址计算的操作数。

        • 内存指针

尽管所有这些寄存器都可用于操作数、结果和指针的一般存储,但在引用 ESP 寄存器时应小心。 ESP 寄存器保存堆栈指针,一般情况下不应将其用于其他目的。

通用寄存器的特殊用途如下:

        • EAX — 操作数和结果数据的累加器。

        • EBX — 指向DS 段中数据的指针。

        • ECX — 字符串和循环操作的计数器。

        • EDX — I/O 指针。

        • ESI — DS 寄存器所指向段中数据的指针;字符串操作的源指针。

        • EDI — 指向 ES 寄存器所指向的段中的数据(或目标)的指针;字符串操作的目标指针。

        • ESP — 堆栈栈顶指针(在SS 段中)。

        • EBP — 指向堆栈栈底的指针(在SS 段中)。

在64位模式下,有16个通用寄存器,默认操作数大小为32位。然而,通用寄存器能够使用 32 位或 64 位操作数。如果指定 32 位操作数大小:EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP、R8D - R15D 可用。如果指定 64 位操作数大小:RAX、RBX、RCX、RDX、RDI、RSI、RBP、RSP、R8-R15 可用。 R8D-R15D/R8-R15 代表8个新的通用寄存器

所有这些寄存器都可以按字节、字、双字和四字级别进行访问。 REX 前缀用于生成 64 位操作数大小或引用寄存器 R8-R15。

5.2、段寄存器

段寄存器(CS、DS、SS、ES、FS和GS)保存16位段选择器。段选择器是一个特殊的指针,用于标识内存中的段。要访问内存中的特定段,该段的段选择器必须存在于适当的段寄存器中。

如何使用段寄存器取决于操作系统或执行程序使用的内存管理模型的类型。当使用平面(未分段)内存模型时,段寄存器加载指向重叠段的段选择器,每个段从线性地址空间的地址0开始(见图3-6)。这些重叠的段构成了程序的线性地址空间。通常会定义两个重叠的段:一个用于代码,另一个用于数据和堆栈。CS段寄存器指向代码段,所有其他段寄存器指向数据和堆栈段。

当使用分段内存模型时,每个段寄存器通常加载不同的段选择器,以便每个段寄存器指向线性地址空间中的不同段(见图3-7)。因此,在任何时候,程序都可以在线性地址空间中访问多达六个段。要访问某个段寄存器未指向的段,程序必须首先将要访问的段的段选择器加载到段寄存器中。

每个段寄存器都与三种存储类型之一相关联:代码、数据或堆栈。例如,CS寄存器包含代码段的段选择器,其中存储了正在执行的指令。处理器使用由CS寄存器中的段选择器和EIP寄存器的内容组成的逻辑地址从代码段中获取指令。EIP寄存器包含下一条要执行的指令代码段内的偏移量。应用程序不能显式加载CS寄存器。相反,它是由改变程序控制的指令或内部处理器操作(如过程调用、中断处理或任务切换)隐式加载的

DS、ES、FS和GS寄存器指向四个数据段。四个数据段的可用性允许高效和安全地访问不同类型的数据结构。例如,可能会创建四个单独的数据段:一个用于当前模块的数据结构,另一个用于从更高级别模块导出的数据,第三个用于动态创建的数据结构,第四个用于与另一个程序共享的数据。要访问额外的数据段,应用程序必须根据需要将这些数据段的段选择器加载到DS、ES、FS和GS寄存器中

SS寄存器包含堆栈段的段选择器,其中存储了当前正在执行的程序、任务或处理程序的过程堆栈所有堆栈操作都使用SS寄存器来查找堆栈段与CS寄存器不同,SS寄存器可以显式加载,这允许应用程序设置多个堆栈并在它们之间切换

 64 位模式下,分段功能一般(但不完全)被禁用,从而创建一个扁平的 64 位线性地址空间。处理器将 CS、DS、ES、SS 的段基数视为零,创建的线性地址等于有效地址。FS 和 GS 段是例外,在某些线性地址计算中,它们的段寄存器(保存段基数)可用作额外的基寄存器。

5.3、EFLAFGS寄存器的标志位

32 位 EFLAGS 寄存器包含一组状态标志、一个控制标志和一组系统标志,如下图所示。

当挂起任务时(使用处理器的多任务处理功能),处理器会自动将 EFLAGS 寄存器的状态保存在挂起任务的任务状态段 (TSS) 中。当将自身绑定到新任务时,处理器会使用新任务 TSS 中的数据加载 EFLAGS 寄存器。当调用中断或异常处理程序时,处理器会自动将 EFLAGS 寄存器的状态保存在程序堆栈上。当通过任务切换处理中断或异常时,EFLAGS 寄存器的状态将保存在 TSS 中以供挂起的任务使用。

EFLAGS 寄存器的状态标志(位 0、2、4、6、7 和 11)指示算术指令(例如 ADD、SUB、MUL 和 DIV 指令)的结果。状态标志功能包括:

        CF(位 0) 进位标志 — 如果算术运算在结果的最高有效位中生成进位或借位,则设置该标志;否则清除。该标志指示无符号整数算术的溢出情况。它也用于多精度算术。

        PF(位 2)奇偶校验标志 — 如果结果的最低有效字节包含偶数个 1 位,则设置该标志;否则清除。

        AF(位 4)辅助进位标志 — 如果算术运算从结果的第 3 位生成进位或借位,则设置该标志;否则清除。该标志用于二进制编码的十进制 (BCD) 算术。

        ZF(位 6)零标志 — 如果结果为零则置位;否则清除。

        SF(位 7)符号标志 — 设置为运算结果的最高有效位,即有符号整数的符号位。 (0 表示正值,1 表示负值。)

         OF(位 11)溢出标志 — 如果整数结果太大正数或太小负数(不包括符号位)而无法容纳,则设置该标志。目标操作数;否则清除。该标志指示有符号整数(二进制补码)算术的溢出情况

状态标志允许单个算术运算生成三种不同数据类型的结果:无符号整数、有符号整数和 BCD 整数。如果算术运算的结果被视为无符号整数,则 CF 标志指示超出范围的情况(进位或借位);如果被视为有符号整数(二进制补码数),则 OF 标志表示进位或借位;如果将 AF 标志视为 BCD 数字,则表示进位或借位。 SF 标志指示有符号整数的符号。 ZF 标志指示有符号或无符号整数零。

在64位模式下,EFLAGS被扩展到64位并称为RFLAGS。 RFLAGS 寄存器的高 32 位被保留。 RFLAGS的低32位与EFLAGS相同。

使用通用寄存器作为基址或索引组件受到以下方式的限制:

         • ESP 寄存器不能用作索引寄存器。

        • 当ESP 或EBP 寄存器用作基址寄存器时,SS 段是默认段。除此之外,DS 段是默认段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/605562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask和django的对比

文章目录 1. 简介2. 安装和设置3. 路由和视图4. ORM5. 管理界面6. 社区和文档7. 性能结论 当涉及构建 Web 应用程序时,Flask 和 Django 是两个最受欢迎的 Python Web 框架之一。它们都提供了强大的工具和功能,但在某些方面却有所不同。本文将对 Flask 和…

链表的经典面试题(数据结构详解)+顺序表和链表之间区别+计算机存储体系

前言 首先这里已经正式步入数据结构的知识,之前我们已经讲解了链表的使用,接下来我们需要的就是大量的练习,熟练掌握数据结构。下面的题型我们选择的都是链表的经典题型,面试题型,包含快慢指针,数形结合&am…

Isaac Sim 3(学习笔记5.8)

Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…

gocator导出图片

想用3D扫描后的图片,但是系统自带的导出方法很麻烦,所以考虑通过sdk导出 首先需要设置点云亮度 这里是导出图片的关键代码 case GoDataMessageType.SurfaceIntensity: { Debug.WriteLine("SurfaceIntensity "); GoSu…

AI换脸原理(2)——人脸检测参考文献S3FD:源码解析

1 介绍 S3FD是一个实时人脸检测器,这篇论文的主要思想是试图解决一个常见的问题,即基于anchor(锚点)的检测器随着人脸变小而急剧恶化。 基于锚点的目标检测方法是通过对一系列预设锚点进行分类和回归来检测目标的,这些锚点是通过在图像上有规律地平铺一组不同尺度和宽高比…

凡尔码安全巡检卡替代传统纸质记录卡

建筑行业、物业管理、医院等行业的安全巡检的记录方式通常以:1、纸质记录:巡检人员使用纸质巡检表格,手动填写巡检时间、巡检区域、巡检发现的问题以及处理情况。这种方式简单直接,但可能存在信息记录不完整、易丢失等问题。 2、电…

rust打包编译为mac或者linux可执行文件,发送到别的电脑不能运行

如果使用rust项目编译为linux或者mac可执行文件,发送到别的电脑之后,不可以直接运行,而是显示一个空白文件,双击也没有反应,其实这是因为这个文件没有可执行权限导致的,添加可执行权限就可以了:…

用户至上!探索7种常用的用户体验研究方法

用户体验研究是产品开放过程中的重要组成部分,优秀的产品设计与高质量的用户体验是不可分割的。对于产品开发,选择合适的用户体验研究方法在很大程度上决定了产品的使用效果。本文全面阐述了用户体验研究、用户体验研究的重要性和用户体验研究方法&#…

Linux进程间通信:system V共享内存

目录 一、什么是共享内存 1.1创建共享内存 1.2释放共享内存 1.2.1shmctl 1.2.2shmat 1.2.3 shmdt 二、共享内存的实现及使用 2.1ShmClient 2.2Shm_Server 2.3Fifo.hpp 2.4Comm.hpp 一、什么是共享内存 标准系统V也叫system V的本地通信方式一般有三种: …

行业新应用:电机驱动将成为机器人的动力核心

电机已经遍布当今社会人们生活的方方面面,不仅应用范围越来越广,更新换代的速度也日益加快。按照工作电源分类,可以将它划分为直流电机和交流电机两大类型。直流电机中,按照线圈类型分类,又可以分为有铁芯的电机、空心…

Redis 哨兵机制

文章目录 哨兵机制概念相关知识铺垫主从复制缺陷哨兵工作流程选举具体流程理解注意事项 哨兵机制概念 先抽象的理解,哨兵就像是监工,节点不干活了,就要有行动了。 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务&#…

视频高效批量剪辑,一站式按顺序合并视频并添加精彩片头片尾,瞬间提升视频品质

视频已成为传递信息、展示创意的最佳方式。但你是否也曾因为繁琐的剪辑工作而头痛不已?别担心,今天我们就来聊聊如何轻松实现视频的高效批量剪辑,让你的作品按顺序完美合并,同时增添上令人眼前一亮的片头片尾,让你的宣…

【Python图像分类系列】建立CNN模型实现猫狗图像分类(案例+源码)

这是我的第275篇原创文章。 一、引言 基于CNN卷积神经网络在图像识别领域的应用:猫狗图像识别。主要内容包含: 数据创建和预处理 神经网络模型搭建 神经网络模型的训练和拟合 文中使用的深度学习框架是Keras。部分数据展示: 猫&#xf…

65-CPLD电路设计(安路为例)

视频链接 CPLD电路设计(安路为例)01_哔哩哔哩_bilibili CPLD电路设计(以安路为例) 浅谈板级电源设计的三种方法_哔哩哔哩_bilibili 参考【浅谈板级电源设计的三种方法】 FPGA板级硬件实战S1~7课 实战Power2-电…

【linux-IMX6ULL配置GPIO通用流程-以及时钟配置】

目录 1. GPIO模式控制流程1.1 LED、蜂鸣器、按键1.2 GPIO控制流程 2. 标准库的简要分析及实现:2.1 问题引入:2.2 代码实现: 3. 时钟配置总结:3.1 时钟树概要:3.2 IMX6ULL时钟概要及时钟树:3.3 IMX6ULL时钟配…

[C/C++] -- 代理模式

代理模式是一种结构型设计模式,允许一个对象(代理)控制另一个对象的访问。代理对象通常充当客户端和实际目标对象之间的中间人,从而控制对目标对象的访问,可以在访问前后进行一些额外的处理。 代理模式的优点包括&…

Python通过定义类实现增删改查(期末考试)

python高级编程期末测试 别看我挣的少,但是我省的多,昨天法拉利又省下两百多万。 一、通过创建自己类来实现增删改查 我们已经利用模型实现单表的增删改查了 现在 我们不想使用模型来操作数据库 我们可以自己定义模型 那么 如何通过自己创建的类实现增…

商标注册证下证的前后时间的注意!

近日下了6个商标注册证,商标初审公告是3个月时间,如果没人提出异议,公告结束后1个月内基本上都可以拿到商标注册证电子版,没有纸制版的,凡是邮寄到付签收纸制商标注册证的基本都是骗。 对商标提出异议的主体平常会在公…

2024年03月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:满足条件的数的累加2 现有n个整数,将其中个位数为k的数进行累加求和 输入 第一行一个整数n。第二行n个非负整数,以空格分割,每个数不大于100000。第三行一个整数k。 …

uniapp——列表分享当前话题(一个页面多个分享)

案例 分享的时候弹出对应的标题和默认第一张图片 代码 <view v-for"(item,index) in list" :key"index"><button open-type"share" :id"index" click.stop"()>{}"><image src"/static/images/cir…