【汇编】微处理器
【汇编】微处理器
文章目录
- 【汇编】微处理器
- 1、微处理器概念
- 1.1 关键词
- 1.2 分类
- 2、微处理器结构
- 2.1 寄存器
- 2.2 寄存器&汇编助记符
- 2.3 寄存器组成结构
- 3、地址空间
- 3.1 存储空间
- 3.1.1 虚拟空间(编程空间)
- 3.1.2 线性空间
- 3.2 I/O空间
- 4、工作模式
- 4.1 实地址模式
- 4.2 保护虚拟地址模式
- 4.3 虚拟86模式
1、微处理器概念
1.1 关键词
微处理器是计算机系统中的核心组件,负责执行程序指令并进行各种计算和控制操作。以下是有关微处理器基本概念的一些关键点:
-
中央处理器(CPU): 微处理器通常被称为中央处理器(CPU),它是计算机的大脑,负责执行程序中的指令并进行数据处理。CPU包括控制单元、执行单元和寄存器等部分。
-
指令集架构(ISA): 指令集架构是CPU支持的指令集合,规定了CPU能够执行的操作和指令的格式。不同的微处理器架构具有不同的ISA,如x86、ARM、MIPS等。
-
时钟速率: 时钟速率是CPU内部时钟信号振荡的速度,通常以赫兹(Hz)为单位表示。时钟速率决定了CPU每秒执行的时钟周期数量,高速的时钟通常与更高的性能相关。
-
核心数: 一颗微处理器芯片可以包含一个或多个处理核心,每个核心都是一个独立的CPU。多核处理器能够同时执行多个任务,提高系统性能。
-
流水线执行: 微处理器通常使用流水线执行指令,将指令处理分成多个阶段,以提高执行效率。流水线包括取指、解码、执行、访存和写回等阶段。
-
寄存器: 寄存器是CPU内部用于临时存储数据和指令操作的存储单元。其中包括通用寄存器、程序计数器(PC)、堆栈指针(SP)等。
-
缓存: 微处理器通常包含高速缓存,用于存储频繁访问的数据和指令,以降低访问主内存的延迟,提高性能。
-
数据通路: 数据通路是CPU内部的数据传输路径,它负责将数据从寄存器传递到执行单元,并执行各种操作,如算术运算、逻辑运算等。
-
控制单元: 控制单元负责解释和执行指令,控制数据通路和执行单元的操作,以及管理程序的执行流程。
-
硬件中断和异常: 微处理器支持硬件中断和异常处理机制,用于处理外部事件和错误条件,如设备输入输出、除零错误等。
-
指令执行流程: CPU执行指令通常包括指令获取、解码、执行、存储结果等步骤,它们按照程序顺序或控制流程执行。
-
架构和兼容性: 不同的微处理器架构和家族可以具有不同的特性和指令集,但通常需要保持与先前版本的兼容性,以支持旧有的软件和系统。
1.2 分类
微处理器可以根据多个标准进行分类,这些标准包括其用途、架构、制造工艺、时钟速率等。以下是一些常见的微处理器分类标准:
-
用途分类:
- 通用微处理器(General-Purpose Microprocessors):设计用于执行广泛范围的应用程序,如个人电脑、服务器、工作站等。
- 嵌入式微处理器(Embedded Microprocessors):专为嵌入式系统设计的微处理器,用于控制和嵌入式应用,如智能手机、汽车控制系统、家电等。
- 信号处理器(Digital Signal Processors,DSP):针对数字信号处理任务优化的微处理器,通常用于音频、图像处理和通信应用。
-
架构分类:
- CISC(复杂指令集计算机,Complex Instruction Set Computer)微处理器:具有大量复杂的指令集,如x86架构,适用于通用计算任务。
- RISC(精简指令集计算机,Reduced Instruction Set Computer)微处理器:采用较简化的指令集,如ARM和MIPS架构,通常用于嵌入式和移动设备。
-
制造工艺分类:
- 制造工艺(Process Technology):微处理器可以根据其制造工艺的先进程度进行分类,如14纳米、10纳米、7纳米等。
-
时钟速率分类:
- 时钟速率(Clock Speed):微处理器可以根据其时钟速率进行分类,通常以赫兹(Hz)为单位,如2.0 GHz或3.5 GHz。
-
核心数分类:
- 单核处理器(Single-Core Processor):只包含一个处理核心的微处理器。
- 多核处理器(Multi-Core Processor):包含多个处理核心的微处理器,可以同时执行多个任务。
-
架构家族分类:
- 不同的微处理器架构家族,如x86、ARM、PowerPC、SPARC等,可以根据其所属的家族进行分类。
-
功耗分类:
- 高性能微处理器:专注于提供高性能,通常具有较高的时钟速率和功耗。
- 低功耗微处理器:专注于节能,通常用于移动设备和嵌入式系统,具有较低的功耗。
-
价格分类:
- 高端微处理器:通常具有高性能和高价格,适用于高性能计算和工作站。
- 中端和低端微处理器:性能适中或较低,价格相对较低,适用于普通计算任务。
2、微处理器结构
微处理器结构是计算机的核心组件,包括控制单元、执行单元、寄存器、数据通路、缓存、时钟和指令解码器等关键部分。控制单元协调指令执行,执行单元处理算术和逻辑操作,寄存器存储数据和指令,数据通路传输数据,缓存提高性能,时钟同步操作,指令解码器解释指令。这些组件协同工作,使微处理器能够执行计算机程序,实现各种计算和控制任务。
思考结构这个概念时,首先考虑微处理器的核心组成部分,然后按照逻辑顺序组织这些组件,以确保信息清晰、有条理。结构的理解需要考虑各个组件之间的功能和相互关系,以全面把握微处理器的工作原理。这种清晰的组织和思考方式有助于更好地理解微处理器的结构和功能。
2.1 寄存器
寄存器(Register)是计算机内部的一种高速存储设备,用于临时存储数据、指令操作数和中间结果。寄存器是位于中央处理器(CPU)内部的存储器单元,具有非常快的读写速度,用于支持CPU的各种操作和运算。
寄存器的工作原理如下:
-
数据存储: 寄存器用于存储需要在CPU内部进行处理的数据。这些数据可以是计算中的临时变量、指令操作数、地址等。寄存器提供了快速的读写操作,以支持CPU对数据的高速访问。
-
指令执行: CPU执行程序时,需要从内存中取出指令,并将指令操作数加载到寄存器中。这些操作数在寄存器中进行处理,例如进行算术运算、逻辑运算或数据传输操作。
-
中间结果存储: 寄存器还用于存储计算过程中的中间结果。这些中间结果在计算中可能多次被读取、修改和存储,以便最终生成最终结果。
-
高速访问: 寄存器之所以被广泛使用,是因为它们具有非常快的访问速度。相比于主内存,寄存器的读写速度通常要快得多,这有助于提高CPU的执行效率。
寄存器可以根据其用途和访问权限进行分类。以下是一些常见的寄存器分类:
-
通用寄存器(General-Purpose Registers): 通用寄存器用于存储通用数据,如整数、地址等。它们在指令执行中用于各种计算和数据传输操作。
-
特殊目的寄存器(Special-Purpose Registers): 特殊目的寄存器具有特定的功能,如程序计数器(PC,存储当前执行的指令地址)、堆栈指针(SP,用于堆栈操作)、指令寄存器(IR,存储当前执行的指令)等。
-
条件码寄存器(Flag Registers): 条件码寄存器用于存储条件标志位,例如零标志、进位标志、溢出标志等。它们在条件分支和比较操作中用于控制程序流程。
-
向量寄存器(Vector Registers): 向量寄存器用于高性能计算,支持同时处理多个数据元素,如SIMD(Single Instruction, Multiple Data)操作中使用的寄存器。
-
浮点寄存器(Floating-Point Registers): 浮点寄存器用于存储浮点数数据,支持浮点运算,如加法、乘法、除法等。
-
控制寄存器(Control Registers): 控制寄存器用于配置和控制CPU的各种操作,如模式切换、中断使能、虚拟内存配置等。
寄存器的数量、类型和功能会根据CPU架构和设计而有所不同。不同的寄存器用于不同的用途,它们共同协助CPU执行各种计算和操作,从而实现计算机程序的功能。
2.2 寄存器&汇编助记符
寄存器(Registers)与汇编助记符(Assembly Mnemonics)之间有密切的关系,它们在汇编语言编程中起到了关键作用,以下是它们之间的关系:
-
寄存器用于存储数据: 寄存器是计算机内部的高速存储设备,用于临时存储数据、指令操作数和中间结果。在汇编语言编程中,程序员可以使用寄存器来存储各种类型的数据,如整数、浮点数、地址等。
-
汇编助记符用于操作寄存器: 汇编助记符是汇编语言中的符号标识,它们代表汇编指令的操作码和操作数。汇编指令通常包括对寄存器的操作,例如将数据从一个寄存器传送到另一个寄存器、对寄存器中的数据进行算术运算、逻辑运算等。汇编助记符指定了这些操作的类型和目标寄存器。
-
寄存器操作通过汇编助记符编码: 在汇编语言程序中,程序员使用汇编助记符来编写汇编指令。这些汇编指令描述了要执行的操作,包括操作的类型和涉及的寄存器。编译器或汇编器将这些汇编指令翻译成机器码,其中包括操作码和寄存器标识,以便CPU执行相应的操作。
-
汇编助记符提供易读性和可移植性: 汇编助记符通过使用人类可读的符号,使汇编代码更易于理解和编写。它们提供了一种抽象层次,允许程序员以更高级别的方式来表示寄存器操作,而不必直接处理二进制机器码。
-
汇编助记符与寄存器名称关联: 每个寄存器通常都有一个名称,例如通用寄存器ax、bx、cx、dx等,浮点寄存器xmm0、xmm1等,以及特殊目的寄存器如程序计数器pc、堆栈指针sp等。汇编助记符与这些寄存器名称关联,以标识操作要涉及的寄存器。
寄存器是汇编语言中用于存储数据的硬件组件,而汇编助记符是用于编写汇编指令的符号标识,用于操作这些寄存器中的数据。通过使用汇编助记符,程序员可以更方便地编写和理解寄存器操作,从而实现各种计算机程序。
2.3 寄存器组成结构
不同寄存器组成的结构在不同的计算机体系结构下可能会有一些共同之处,但也会存在重要的区别。这些共同之处和区别取决于计算机架构的设计和寄存器的用途。以下是一些可能的共同之处和区别:
共同之处:
-
数据存储: 所有寄存器都用于存储数据。无论是通用寄存器、浮点寄存器还是特殊目的寄存器,它们的主要作用是在CPU内部存储数据。
-
寄存器编号: 许多计算机架构都使用类似的寄存器编号方案,例如通用寄存器ax、bx、cx、dx等,以及浮点寄存器xmm0、xmm1等。这种编号方案可以使程序员更容易地识别和使用寄存器。
-
寄存器大小: 大多数计算机体系结构中,寄存器的大小通常是固定的,例如32位或64位。这有助于确保操作数的一致性和数据对齐。
-
寄存器访问: 寄存器可以通过汇编指令进行读取和写入,这些指令通常与寄存器的名称或编号相关联。
-
寄存器用途: 不同寄存器通常有不同的用途,例如通用寄存器用于存储整数数据,浮点寄存器用于存储浮点数数据,特殊目的寄存器用于执行特定任务,如程序计数器(PC)用于存储下一条要执行的指令地址。
区别之处:
-
数量和类型: 不同计算机架构具有不同数量和类型的寄存器。一些架构可能具有较多通用寄存器,而其他架构可能专注于浮点运算,因此具有较多浮点寄存器。
-
功能: 特殊目的寄存器在不同架构下具有不同的功能。例如,某些架构可能具有一组特殊目的寄存器用于向量处理,而另一些架构可能具有用于虚拟内存管理的控制寄存器。
-
寄存器命名: 寄存器的名称和编号在不同的计算机架构中可能会有所不同。例如,x86架构和ARM架构使用不同的通用寄存器名称和编号。
-
寄存器宽度: 不同计算机架构中的寄存器宽度(位数)也可能不同。例如,x86架构通常使用32位或64位寄存器,而ARM架构使用32位或64位通用寄存器。
-
寄存器组织: 寄存器的组织方式在不同架构下也可能有所不同,这涉及到如何访问和管理寄存器,以及寄存器之间的数据传输方式。
综上所述,寄存器在不同计算机架构中具有一些共同之处,但也存在重要的区别,这些区别受到架构设计和用途的影响。程序员需要根据目标计算机架构来理解和使用寄存器,以确保代码在不同平台上正确运行。
3、地址空间
3.1 存储空间
3.1.1 虚拟空间(编程空间)
虚拟存储器是一种计算机内存管理技术,旨在扩展计算机的物理内存(RAM)以支持更大的地址空间,并提供了多种重要的功能和优势。虚拟存储器的核心思想是将物理内存和磁盘上的存储结合起来,以实现以下目标和作用:
-
扩展地址空间: 虚拟存储器使计算机能够处理更大的地址空间,远远超过物理内存的大小。这意味着程序可以访问比物理内存更大的存储区域,而不必全部加载到内存中。
-
内存管理: 虚拟存储器管理物理内存的分配和释放。它允许多个程序同时运行,每个程序都可以访问似乎是独占的内存空间,而实际上是通过分时或分段方式共享物理内存。
-
数据持久性: 虚拟存储器支持将程序的数据存储到磁盘上,以便在计算机关闭或重新启动后仍然可用。这增强了数据的持久性和可靠性。
虚拟存储器的基本逻辑如下:
-
虚拟地址空间: 每个运行中的程序都有自己的虚拟地址空间,这是一个连续的地址范围,通常很大。程序的虚拟地址空间被分为多个部分,包括代码段、数据段、堆、栈等。
-
页面和分页: 虚拟地址空间被分为固定大小的块,称为页面(Page)。物理内存也被分为相同大小的块,称为页框(Page Frame)。虚拟地址空间的每个页面可以映射到物理内存的一个页框。
-
页面置换: 当物理内存不足时,虚拟存储器需要进行页面置换。这意味着它将某些页面从物理内存中换出到磁盘上,以便为其他页面腾出空间。当需要访问被换出的页面时,虚拟存储器将其从磁盘还原到物理内存。
-
访问控制: 虚拟存储器还允许操作系统设置不同页面的访问权限,例如只读、读写、执行等。这有助于保护程序的安全性和隔离性。
虚拟存储器的主要优势在于它提供了更大的地址空间、更灵活的内存管理和数据持久性。它允许多个程序共享有限的物理内存,同时确保它们之间的隔离性。虚拟存储器还允许程序加载和执行比物理内存更大的程序,从而扩展了计算机的功能和性能。这是现代操作系统的关键特性之一,使计算机能够有效地运行多任务应用程序,并提供了更好的用户体验。
3.1.2 线性空间
线性地址(Linear Address)与分段分页(Segmentation and Paging)是计算机内存管理中的两个关键概念,它们之间存在密切的关系,通常一起使用以提供灵活性和有效性。
-
分段分页的基本概念:
-
分段(Segmentation): 分段是一种内存管理机制,它将内存划分为多个不同大小的段(Segment),每个段可以用于存储不同类型的数据或代码。每个段都有一个唯一的段基址(Segment Base)和长度,用于确定段的位置和大小。分段机制允许程序员更灵活地管理内存,但也可能导致内存碎片问题。
-
分页(Paging): 分页是另一种内存管理机制,它将内存划分为等大小的页(Page),通常大小为2的幂次方。物理内存也被划分为与之大小相等的页框(Page Frame)。分页机制将虚拟地址空间划分为页,并将每个页映射到物理内存的页框上。这种机制提供了高度的内存管理灵活性,同时减少了内存碎片问题。
-
-
线性地址与分段分页的关系:
-
线性地址通常是指虚拟地址空间中的地址,它是分段分页机制的中间层次。虚拟地址空间中的每个线性地址可以被映射到一个具体的物理地址。
-
分段机制通过将线性地址映射到段上,从而将虚拟地址映射到物理地址的一部分。每个段的基址和长度信息用于计算线性地址到物理地址的映射。
-
分页机制通过将线性地址映射到页上,然后将页映射到物理内存的页框上,来实现虚拟地址到物理地址的映射。分页机制通常在分段之后应用,以进一步细化内存管理。
-
综合使用分段和分页机制,可以实现更灵活、更高效的内存管理。分段提供了逻辑上的分离和保护,而分页允许对内存进行精确的控制和管理。这种组合有助于提供大型、多任务操作系统所需的内存管理功能。
-
总之,线性地址在分段分页内存管理中扮演了关键的角色,它是虚拟地址空间中的地址,通过分段和分页机制,将虚拟地址映射到物理内存中的确切位置,以实现内存的有效管理和隔离。这种组合提供了更高级别的内存抽象和更灵活的内存管理能力。
3.2 I/O空间
在典型的32位计算机架构中,I/O(Input/Output)地址空间的范围通常被限制在一个较小的地址范围内,通常是从0x0000 到 0xFFFF(或者从0到65535)。这意味着I/O地址空间包含了64K个地址。
在这个32位计算机架构中,虽然CPU的地址总线可以访问32位地址,但其中的一部分被用于主内存地址空间,而剩余的部分则被用于I/O地址空间。
具体的I/O设备会被映射到I/O地址空间中的特定地址,程序可以通过特殊的I/O指令来访问这些地址,与I/O设备进行通信。每个I/O设备都会有一个唯一的I/O地址或地址范围,以便CPU可以准确地定位和访问它们。
需要注意的是,不同计算机架构和操作系统可能会有不同的I/O地址范围和约定,上述范围只是一个常见的示例。因此,确切的I/O地址范围可能会因特定计算机或操作系统而异。在编程时,通常需要参考计算机架构和操作系统的文档来了解特定系统的I/O地址范围。
4、工作模式
4.1 实地址模式
实模式(Real Mode)是x86体系结构中的一种最基本的工作模式,通常用于早期的个人计算机和操作系统启动阶段。以下是实模式的主要特点和说明:
-
16位寻址: 在实模式下,处理器使用16位地址总线,因此可以寻址64KB的内存(2^16字节)。这限制了处理器能够直接访问的内存范围。
-
物理地址: 实模式使用物理地址来访问内存,没有内存保护机制。这意味着程序可以直接访问整个系统的内存,包括操作系统和其他应用程序的内存,而没有任何隔离。
-
单任务: 实模式是单任务模式,只允许一个程序运行。如果多个程序需要运行,需要手动切换它们,这通常由操作系统或用户来管理。
-
缺乏内存保护: 实模式没有内存保护机制,这意味着一个程序可以无意或故意覆盖其他程序的内存,导致不稳定性和崩溃。
-
8086指令集: 实模式使用8086微处理器的指令集,这是x86架构的早期版本。它包括一组基本的16位指令。
-
不支持虚拟内存: 实模式不支持虚拟内存,因此程序必须适应实际的物理内存大小。如果物理内存不足,程序可能无法运行。
-
启动阶段: 实模式通常在计算机启动时处于活动状态,用于加载操作系统引导程序。一旦操作系统引导完成,通常会切换到保护模式或其他更高级别的工作模式。
尽管实模式具有诸多限制和不足,但它在早期的计算机系统中是必要的,因为它提供了对硬件的直接访问和较少的复杂性。然而,随着计算机技术的发展,保护模式等更高级别的工作模式逐渐取代了实模式,以提供更多的内存保护、多任务支持和更高的性能。实模式仍然在某些特殊应用中有用,但在现代操作系统和应用程序中很少使用。
4.2 保护虚拟地址模式
保护模式(Protected Mode)是x86体系结构中的一种高级工作模式,用于提供更多的内存保护、多任务支持、虚拟内存和更丰富的功能。以下是保护模式的主要特点和详细说明:
-
32位寻址: 在保护模式下,处理器使用32位地址总线,因此可以寻址更大的内存范围,通常是4GB(2^32字节)。这允许系统支持更多的物理内存。
-
分段机制: 保护模式引入了分段机制,允许将内存分成多个段(Segment),每个段可以具有不同的特权级别和访问权限。这有助于实现内存保护和多任务支持。
-
特权级别: 保护模式引入了四个不同的特权级别,通常称为特权级别0(Ring 0)到特权级别3(Ring 3)。Ring 0是最高特权级别,用于操作系统内核,而Ring 3是最低特权级别,用于用户应用程序。不同特权级别之间有严格的访问控制,确保了操作系统对硬件的控制。
-
内存保护: 保护模式提供了硬件支持的内存保护机制,防止程序访问其它程序的内存空间。每个段都可以有自己的访问权限和基址,从而提供了有效的内存隔离。
-
多任务支持: 保护模式允许多个程序同时运行,每个程序都在自己的特权级别下执行。操作系统可以有效地管理和切换任务,从而实现多任务处理。
-
虚拟内存: 保护模式支持虚拟内存,这意味着每个程序都认为它有自己的完整内存空间,而不需要实际物理内存的大小。虚拟内存管理器将虚拟地址映射到物理内存,使得更大的地址空间可用。
-
扩展指令集: 保护模式引入了更多的32位指令,扩展了处理器的功能,提供更高的性能和效率。
-
中断和异常处理: 保护模式支持硬件中断和异常处理,这对操作系统和应用程序的正常运行非常重要。
总的来说,保护模式为现代操作系统提供了强大的功能和性能,包括内存保护、多任务支持、虚拟内存等。它是现代计算机系统中的主要工作模式,用于运行大多数操作系统和应用程序。但与实模式相比,保护模式也更加复杂,需要更多的软件和硬件支持来管理和控制系统资源。
4.3 虚拟86模式
虚拟86模式(Virtual 8086 Mode)在x86计算机体系结构中具有重要的意义,尤其在早期的32位Windows操作系统中起到了关键作用。虚拟86模式的主要意义包括以下方面:
-
运行16位DOS应用程序: 虚拟86模式允许在32位保护模式下运行16位的DOS(Disk Operating System)应用程序,这些应用程序通常是早期的MS-DOS应用程序。这是因为32位保护模式不直接支持运行16位的应用程序,但虚拟86模式可以为它们提供兼容性环境。
-
兼容性和平滑过渡: 当32位Windows操作系统(如Windows 95和Windows 98)启动时,它需要保证旧的16位DOS应用程序仍然可以运行。虚拟86模式提供了一种平滑过渡的方式,使这些旧应用程序能够在新的32位操作系统下继续工作,而无需对它们进行大规模的修改。
-
内存隔离: 虚拟86模式允许每个运行的DOS应用程序在自己的虚拟内存空间中执行,而不会干扰其他程序或操作系统本身。这提供了内存隔离,确保应用程序之间的互不干扰。
-
系统调用和交互: 虚拟86模式使得DOS应用程序可以通过系统调用与32位操作系统进行交互。这些系统调用允许DOS应用程序访问操作系统的服务和资源,如文件系统、网络、设备驱动程序等。
-
维护旧软件: 对于企业和个人用户来说,有时需要继续运行旧的16位DOS应用程序,因为这些程序可能包含重要的数据或业务逻辑。虚拟86模式允许他们在现代操作系统下继续使用这些程序,而无需维护旧的硬件和操作系统。
需要注意的是,虚拟86模式在现代操作系统中的使用逐渐减少,因为大多数新的应用程序和操作系统都是32位或64位的,而不再依赖16位DOS应用程序。不过,在某些特殊情况下,虚拟86模式仍然具有重要的历史和兼容性价值,可以让旧的DOS应用程序在新的环境中继续运行。
相关文章:
【汇编】微处理器
【汇编】微处理器 文章目录 【汇编】微处理器1、微处理器概念1.1 关键词1.2 分类 2、微处理器结构2.1 寄存器2.2 寄存器&汇编助记符2.3 寄存器组成结构 3、地址空间3.1 存储空间3.1.1 虚拟空间(编程空间)3.1.2 线性空间 3.2 I/O空间 4、工作模式4.1 …...
按键点亮led灯
原理图: K0这个按键按下时,开发板D1这个灯亮,松开,灯灭 代码如下: #include "stm32f4xx.h" void LED_Init(void) {//1.定义一个GPIO外设的结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//RCC_AHB1PeriphClockCmd(RCC_AHB1Pe…...
Java常见面试题
目录 1、mysql并发事务会带来哪些问题,如何解决?2、请详细描述Redis持久化机制?3、简述Redis缓存雪崩和缓存穿透的问题和解决方案?4、RabbitMQ消息丢失及对应解决方案5、什么叫线程安全?举例说明6、举例说明常用的加密…...
笔记1.5:计算机网络体系结构
从功能上描述计算机网络结构 分层结构 每层遵循某个网络协议完成本层功能 基本概念 实体:表示任何可发送或接收信息的硬件或软件进程。 协议是控制两个对等实体进行通信的规则的集合,协议是水平的。 任一层实体需要使用下层服务,遵循本层…...
【Python】Python 连接字符串应优先使用 join 而不是 +
Python 连接字符串应优先使用 join 而不是 简介 字符串处理在大多数编程程序语言中都不可避免,字符串的连接也是在编程过程中经常需要面对的问题。 Python中的字符串与其他一些程序语言如C、Java有一些不同,它为不 可变对象。 一旦创建便不能改变&…...
uniapp 小程序 父组件调用子组件方法
答案:配合小程序API > this.selectComponent(""),来选择组件,再使用$vm选择组件实例,再调用方法,或者data 1 设置组件的id,如果你的多端,请跟据情况设置ref,class,id,以便通过小…...
Vue-01:MVVM数据双向绑定与Vue的生命周期
一、Vue介绍 1.1 什么是Vue ? Vue是一个渐进式的JavaScript框架,用于构建用户界面。"渐进式"意味着Vue的设计理念是逐步增强应用的功能和复杂性,而不是一次性地引入所有功能。这使得开发者可以根据项目需求选择性地使用Vue的不同特…...
数据通信网络之OSPFv3基础
文章及资源归档至【AIShareLab】,回复 通信系统与网络 可获取。 文章目录 一、目的二、拓扑三、需求四、步骤 一、目的 掌握路由器的IPv6 基础配置。掌握OSPFv3(单区域)的基础配置。 二、拓扑 如图1 所示,三台路由器R1、R2 和R…...
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive 串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive,功能实现。 文章目录 FPGA-结合协议时序实现UART收发器(五&…...
我学编程全靠B站了,真香-国外篇(第三期)
你好,我是Martin。 今天来点猛料,给大家推荐点我的压箱收藏-国外知名大学的公开课。 我推荐的不多,本着少就是多的原则,只给大家推荐我看过最好的五门视频,主要是来自两所国外高校:MIT美国麻省理工、CMU卡…...
c++ 变量常量指针练习题
Q1:在win32 x86模式下,int *p; int **pp; double *q; 请说明p、pp、q各占几个字节的内存单元。 p 占 4 个字节 pp 占 4 个字节 q 占 4 个字节 Q2常量1、1.0、“1”的数据类型是什么? 1 是 整形 int 1.0 是 浮点型 double “1” 是 const char * Q3 语句&…...
Linux底层基础知识
一.汇编,C语言,C,JAVA之间的关系 汇编,C语言,C可以通过不同的编译器,编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统,Java虚拟机是由汇编,C,…...
JUC并发编程--------线程安全篇
目录 什么是线程安全性问题? 如何实现线程安全? 1、线程封闭 2、无状态的类 3、让类不可变 4、加锁和CAS 并发环境下的线程安全问题有哪些? 1、死锁 2、活锁 3、线程饥饿 什么是线程安全性问题? 我们可以这么理解&#…...
机器视觉之Basler工业相机使用和配置方法(C++)
basler工业相机做双目视觉用,出现很多问题记录一下: 首先是多看手册:https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例,实际上在使用过程中,大部分都是这些源码,具体项目选择对应的…...
Centos nginx配置文档
1、安装nginx: yum install nginx 2、Nginx常用命令 查看版本:nginx -v 启动:nginx -c /etc/nginx/nginx.conf 重新加载配置:nginx -s reload 停止:nginx -s stop 3、Nginx反向代理配置 nginx配置详解 1、Nginx配置图 详情可以查看:http://nginx.org/ru/docs/example…...
2023/9/14 -- C++/QT
作业: 仿照Vector实现MyVector,最主要实现二倍扩容 #include <iostream>using namespace std;template <typename T> class MyVector { private:T *data;size_t size;size_t V_capacity; public://无参构造MyVector():data(nullptr),size(…...
golang在goland编译时获取环境变量失效
在golang中, 我们通常使用os包来获取环境变量,如: os.Getenv() os.LookupEnv() 等。 但如果我们使用goland编译器,在编译是,这时操作环境变量,会发现os包读取到的环境变量值不变: 新增后&am…...
一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了
一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了。 在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…...
蓝桥杯 题库 简单 每日十题 day3
01 约数个数 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 1200000 有多少个约数(只计算正约数)。 解题思路 枚举,从1开始一直到1200000本身都作为1200000的除数,…...
基于SSM+Vue的高校实验室管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
