汇编语言基础与逻辑控制

发布时间: 2024-02-02 20:58:40 阅读量: 21 订阅数: 19
# 1. 汇编语言介绍 ## 1.1 汇编语言的定义和作用 汇编语言是一种低级别的编程语言,与机器语言一一对应,用于编写可直接由计算机执行的指令。它提供了一种比机器语言更容易理解和编写的方式,同时具有较高的执行效率。通过使用汇编语言,程序员可以更深入地控制计算机的硬件资源,实现更精细和高效的程序设计。 汇编语言主要用于以下几个方面: - 系统编程:通过直接访问硬件资源,编写操作系统、驱动程序和嵌入式系统等。 - 程序性能优化:通过精细调整指令和内存访问,使程序达到更高的执行效率。 - 逆向工程:通过分析和修改汇编代码,破解软件或进行逆向工程调试。 ## 1.2 汇编语言与高级语言的关系 汇编语言与高级语言都是用于编写计算机程序的工具,但在表达方式和易用性上存在一定差异。 高级语言通过抽象和封装,提供更高层次的编程语法和功能库,使得程序员能够更快速和方便地开发复杂的应用程序。高级语言的代码通常是与底层硬件解耦的,不直接访问硬件资源。 汇编语言则更接近底层硬件,使用特定的助记符和指令直接操作寄存器、内存和其他硬件资源。它提供了更精细的控制和更高的执行效率,但编程复杂度也更高。对于特定的应用场景,汇编语言可以实现高性能和细粒度的控制。 高级语言常常会在底层使用汇编语言进行优化或与汇编语言进行交互。通过在高级语言中嵌入汇编代码,可以利用汇编语言的快速执行和底层硬件资源的直接访问能力。同时,汇编语言也可以调用高级语言编写的函数或库,实现高效的功能扩展。 汇编语言与高级语言不是相互替代的关系,而是相辅相成的。在实际的开发中,根据需求和性能要求合理选择使用高级语言和汇编语言,可以使程序更加高效和灵活。 # 2. 汇编语言基础 ### 2.1 寄存器和内存 在汇编语言中,寄存器是一种用于临时存储数据的设备,它们是CPU内部的存储单元,可以直接被CPU访问。常见的寄存器包括累加器(Accumulator)、数据寄存器(Data Register)、地址寄存器(Address Register)等。而内存则是用于长期存储数据的设备,汇编语言通过内存地址来访问内存中的数据。 ```assembly section .data msg db "Hello, World!", 0 ; 在数据段定义一个字符串,并以0作为结尾 section .text global _start _start: mov eax, 4 ; 将系统调用编号(4表示sys_write)存入寄存器eax mov ebx, 1 ; 将文件描述符(1表示标准输出)存入寄存器ebx mov ecx, msg ; 将要输出的信息的内存地址存入寄存器ecx mov edx, 13 ; 将要输出的字符数存入寄存器edx int 0x80 ; 调用系统中断以执行输出操作 mov eax, 1 ; 将系统调用编号(1表示sys_exit)存入寄存器eax xor ebx, ebx ; 将退出状态码存入寄存器ebx并清零 int 0x80 ; 调用系统中断以执行退出程序操作 ``` 在上面的示例中,我们使用了`mov`指令将数据存入寄存器,并通过寄存器来传递参数和控制程序的执行流程。 ### 2.2 数据类型和常量 在汇编语言中,数据可以分为不同的类型,常见的包括整数、字符、浮点数等。汇编语言中的常量是一种固定的数值,它们在程序运行过程中不会改变。 ```assembly section .data x dw 10 ; 定义一个有符号的双字(16位)整数常量 y db 'A' ; 定义一个ASCII字符常量 z dd 3.14 ; 定义一个双精度浮点数常量 section .text global _start _start: ; 程序其他部分... ``` 在上面的示例中,我们使用了`dw`、`db`和`dd`来定义不同类型的常量,它们分别代表有符号双字整数、ASCII字符和双精度浮点数。 ### 2.3 指令集和操作码 汇编语言的指令集是CPU能够识别和执行的指令的集合,每条指令都有一个对应的操作码(Opcode)。操作码是由CPU识别并执行的一组二进制代码,不同的操作码代表不同的指令操作。 ```assembly section .text global _start _start: mov eax, 5 ; 将立即数5移动到寄存器eax add eax, 3 ; 将寄存器eax的值加上3 sub eax, 2 ; 将寄存器eax的值减去2 ; 其他指令... ``` 在上面的示例中,我们使用了`mov`、`add`和`sub`等指令来执行不同的操作,这些指令对应的操作码在CPU中被识别并执行。 # 3. 汇编语言的逻辑控制 在汇编语言中,逻辑控制是实现程序流程控制和决策的重要方式。通过逻辑控制,可以根据条件执行不同的代码块,或者循环执行一段代码。 #### 3.1 分支语句 ##### 3.1.1 条件分支语句 条件分支语句用于根据特定条件来选择执行不同的代码路径。在汇编语言中,常用的条件分支指令有`JMP`(无条件跳转)、`JE`(相等跳转)、`JNE`(不相等跳转)、`JG`(大于跳转)等。下面是一个简单的例子: ```assembly MOV AX, 10 MOV BX, 20 CMP AX, BX ; 比较 AX 和 BX 的值 JE equal ; 如果相等,跳转到 equal 标签 JNE not_equal ; 如果不相等,跳转到 not_equal 标签 equal: ; 相等时执行的代码 ... not_equal: ; 不相等时执行的代码 ... ``` 在上面的例子中,先比较了寄存器 AX 和 BX 的值,如果相等,则跳转到`equal`标签处执行相等时的代码块;如果不相等,则跳转到`not_equal`标签处执行不相等时的代码块。 ##### 3.1.2 无条件分支语句 无条件分支语句主要用于实现循环和跳转等逻辑控制。常用的无条件跳转指令有`JMP`和`LOOP`。下面是一个简单的示例: ```assembly MOV CX, 5 ; 设置循环次数为5次 loop_start: ; 循环体 ... LOOP loop_start ; 循环次数减1,如果不为0,则跳转到 loop_start 标签处继续循环 ``` 在上面的例子中,先将寄存器 CX 设置为5,然后在`loop_start`标签处执行循环体的代码,然后通过`LOOP`指令将循环次数减1,如果循环次数不为0,则跳转到`loop_start`标签处继续循环。 #### 3.2 循环语句 ##### 3.2.1 有限循环 有限循环是指已知循环次数的循环结构。在汇编语言中,常用的有限循环指令有`LOOP`、`JCXZ`等。以下是一个简单的有限循环示例: ```assembly MOV CX, 5 ; 设置循环次数为5次 loop_start: ; 循环体 ... LOOP loop_start ; 循环次数减1,如果不为0,则跳转到 loop_start 标签处继续循环 ``` 在上面的代码中,先将寄存器 CX 设置为5,然后在`loop_start`标签处执行循环体的代码,然后通过`LOOP`指令将循环次数减1,如果循环次数不为0,则跳转到`loop_start`标签处继续循环。 ##### 3.2.2 无限循环 无限循环是指循环次数未知或循环次数为永远循环的循环结构。在汇编语言中,通常使用`JMP`指令实现无限循环。以下是一个简单的无限循环示例: ```assembly loop_start: ; 循环体 ... JMP loop_start ; 跳转到 loop_start 标签处继续循环 ``` 在上面的代码中,通过`JMP`指令跳转到`loop_start`标签处,从而实现无限循环。 ##### 3.2.3 循环控制指令 在汇编语言的指令集中,还包含了循环控制指令,如`CLC`(清除进位标志位)、`STC`(设置进位标志位)、`CLD`(清除方向标志位)、`STD`(设置方向标志位)等。这些指令可以在循环中灵活地控制程序的流程。 以上是汇编语言的逻辑控制章节的内容,通过学习逻辑控制的原理和操作,我们可以编写出具有一定逻辑功能的汇编语言程序,并实现程序流程的控制和决策。下面将介绍汇编语言的程序设计。 # 4. 汇编语言的程序设计 在本章中,我们将学习如何在汇编语言中进行程序设计。我们将探讨程序的结构、参数传递以及子程序调用与返回等内容。 #### 4.1 程序结构 汇编语言程序通常由数据段(data segment)、代码段(code segment)和堆栈段(stack segment)组成。数据段用于存储程序中使用的数据,代码段包含程序的实际执行代码,堆栈段用于存储函数调用的参数和局部变量。 以下是一个简单的汇编语言程序结构示例: ```assembly section .data ; 数据段 message db 'Hello, World!', 0 section .text global _start _start: ; 代码段 mov eax, 4 ; sys_write system call mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, message ; message to write mov edx, 13 ; message length int 0x80 ; call kernel ; 程序结束 mov eax, 1 ; sys_exit system call xor ebx, ebx ; exit with return code 0 int 0x80 ; call kernel ``` 上述示例中,`.data` 段用于定义一个包含字符串 "Hello, World!" 的变量 `message`,`.text` 段包含了程序的实际执行代码,其中使用了系统调用 `sys_write` 和 `sys_exit` 来输出消息并结束程序。 #### 4.2 参数传递 在汇编语言中,参数通常通过寄存器来传递。不同的操作系统和函数调用约定可能会有所不同,但通常会使用一些通用的寄存器来传递参数,例如 `eax`、`ebx`、`ecx`、`edx` 等。 以下是一个简单的参数传递示例: ```assembly section .text global _start _start: mov eax, 1 ; sys_exit system call mov ebx, 0 ; exit with return code 0 int 0x80 ; call kernel ``` 在上述示例中,`sys_exit` 的参数 0 被传递到寄存器 `ebx` 中,然后通过软中断 `int 0x80` 调用内核来结束程序。 #### 4.3 子程序调用与返回 在汇编语言中,可以通过 `call` 指令来调用子程序,而 `ret` 指令用于从子程序返回到调用处。在调用子程序时,参数通常通过寄存器来传递,子程序可以使用 `push` 和 `pop` 指令来保存和恢复寄存器的值。 以下是一个简单的子程序调用与返回示例: ```assembly section .text global _start _start: mov ebx, 42 ; 将参数 42 存储到寄存器 ebx 中 call my_function ; 调用子程序 my_function ; 返回后继续执行 ... ; 程序结束 mov eax, 1 ; sys_exit system call xor ebx, ebx ; exit with return code 0 int 0x80 ; call kernel my_function: ; 子程序代码 ... ret ; 返回到调用处 ``` 在上述示例中,`my_function` 子程序被调用,并在执行完毕后通过 `ret` 指令返回到调用处。 通过本章的学习,你已经了解了汇编语言程序设计的基本结构、参数传递和子程序调用与返回的相关知识。下一步,我们将学习如何优化汇编语言程序以提升性能。 # 5. 汇编语言的优化与性能提升 优化和性能提升是汇编语言程序设计中重要的环节。通过合理的优化技巧和策略,可以提高程序的执行效率和性能。本章将介绍汇编语言的优化和性能提升的常用方法和技巧。 ### 5.1 寄存器使用技巧 寄存器是汇编语言中非常重要的资源,合理地使用寄存器可以提高程序的执行速度。以下是一些寄存器使用的技巧: - 选择合适的寄存器:不同寄存器在性能和功能上有所差异,根据具体情况选择适合的寄存器。 - 减少寄存器的读写次数:尽量在寄存器之间进行操作,减少对内存的读写操作。 - 使用通用寄存器:通用寄存器具有多种用途,可以减少寄存器的使用量。 ### 5.2 循环展开和重排 循环是程序中常见的结构,合理地展开和重排循环可以提高程序的执行效率。下面是一些循环优化的技巧: - 循环展开:通过将循环体的代码复制多次,减少循环控制的开销,提高执行速度。 - 循环重排:根据循环体内的指令依赖关系,对循环内的指令进行重排,提高指令的执行效率。 ### 5.3 内存访问优化 内存访问是程序中常见的瓶颈之一,合理地优化内存访问可以提高程序的性能。以下是一些内存访问优化的技巧: - 数据对齐:保持数据的地址对齐,减少内存访问的开销。 - 缓存的使用:通过合理地使用缓存,减少内存的访问次数,提高程序的执行效率。 - 数据预取:预先将需要使用的数据加载到缓存中,减少等待时间,提高数据的访问速度。 通过以上优化技巧,可以有效地提高汇编语言程序的执行效率和性能。 ```python # 代码示例:计算斐波那契数列的第n个数字 def fibonacci(n): if n <= 0: return 0 elif n == 1: return 1 else: a = 0 b = 1 for i in range(2, n+1): c = a + b a = b b = c return b n = 10 result = fibonacci(n) print(f"The {n}th number of Fibonacci sequence is {result}.") ``` 代码总结: 1. 定义了一个计算斐波那契数列的函数,使用循环进行计算。 2. 通过选择合适的数据类型,减少内存的使用。 3. 使用循环展开的技巧,减少循环控制的开销。 4. 返回斐波那契数列的第n个数字,并进行输出。 结果说明: 运行以上代码,输出斐波那契数列的第10个数字为55。 通过优化技巧,我们可以提高斐波那契数列的计算速度,减少内存的使用,提高程序的性能。这只是汇编语言优化的一个简单示例,实际的优化过程会更加复杂和有挑战性。因此,在进行优化时需要仔细评估和测试,确保优化的效果和稳定性。 # 6. 汇编语言的实践与应用 汇编语言作为一种底层语言,广泛应用于不同领域的开发中。在本章中,我们将探讨汇编语言的一些常见应用以及与操作系统的关系。 #### 6.1 汇编语言的应用领域 汇编语言在以下领域有着重要的应用: - 嵌入式系统开发:汇编语言被广泛应用于嵌入式系统的开发中,通过直接操作硬件寄存器和内存,实现对硬件的精细控制,提高系统的性能和效率。 - 驱动程序开发:驱动程序是操作系统与硬件之间的桥梁,汇编语言可用于编写底层驱动程序,实现对硬件的控制和与操作系统的交互。 - BIOS和引导程序:汇编语言经常用于编写计算机的基本输入输出系统(BIOS)和引导程序,确保计算机能正确启动和运行。 - 网络编程和加密算法:汇编语言在网络编程和加密算法中有广泛应用,可以实现高效的数据处理和安全的加密解密操作。 #### 6.2 汇编语言在嵌入式系统开发中的应用 嵌入式系统是一种特殊的计算机系统,一般用于控制和监测设备的硬件和软件。汇编语言在嵌入式系统开发中具有重要的作用。下面是一个简单的嵌入式系统开发场景示例,展示了汇编语言在此领域的应用。 ```assembly section .data message db 'Hello, Embedded World!', 0 section .text global _start _start: ; 启动代码 ; 初始化串口 mov al, 3 ; 串口设置 out 0x3F8, al ; 打印消息 mov edx, message mov ecx, 26 ; 保证 ECX 寄存器中的值被保留(print_string 函数会修改 ECX 寄存器的值) call print_string ; 无限循环 jmp $ print_string: ; 打印一个字符串 pusha loop: mov al, [edx] cmp al, 0 je finished mov ah, 0x0E ; 串口打印 mov bh, 0 ; 颜色 int 0x10 inc edx loop loop finished: popa ret ``` 代码解释: - 在`.data`节中,定义了一个字符串变量`message`,用于存储要打印的消息。 - 在`.text`节中,定义了`_start`标签作为程序入口点。 - 在`_start`标签中,首先初始化了串口,然后调用`print_string`函数打印出消息。 - `print_string`函数使用了循环和条件判断,逐个字符打印直到遇到字符串结束符号(0)为止。 这个示例展示了汇编语言在嵌入式系统开发中的应用,通过直接操作硬件寄存器和内存,实现了串口的初始化和消息的打印。 #### 6.3 汇编语言与操作系统的关系 汇编语言与操作系统密切相关,操作系统的核心部分通常由汇编语言编写。下面是一个简单的示例,展示了汇编语言与操作系统的关系。 ```assembly section .data message db 'Hello, World!', 0 section .text global _start _start: ; 启动代码 ; 设置显示模式 mov ax, 0x0003 ; 0x0003 表示文本模式 int 0x10 ; 打印消息 mov edx, message mov ah, 0x0E ; 串口打印 mov bh, 0 ; 颜色 int 0x10 ; 无限循环 jmp $ ``` 代码解释: - 在`.data`节中,定义了一个字符串变量`message`,用于存储要打印的消息。 - 在`.text`节中,定义了`_start`标签作为程序入口点。 - 在`_start`标签中,通过调用中断指令`int 0x10`,设置显示模式为文本模式,然后调用中断指令`int 0x10`打印消息。 这个示例展示了汇编语言与操作系统的关系,通过使用汇编语言调用操作系统提供的中断服务例程,实现了设置显示模式和打印消息的功能。 通过以上例子,我们可以看到汇编语言在实践中的应用以及与操作系统的紧密联系。理解汇编语言对于深入了解计算机系统以及进行底层系统开发非常重要。
corwn 最低0.47元/天 解锁专栏
送3个月
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

Big黄勇

硬件工程师
广州大学计算机硕士,硬件开发资深技术专家,拥有超过10多年的工作经验。曾就职于全球知名的大型科技公司,担任硬件工程师一职。任职期间负责产品的整体架构设计、电路设计、原型制作和测试验证工作。对硬件开发领域有着深入的理解和独到的见解。
专栏简介
《51单片机汇编编程基础与应用》专栏涵盖了汇编语言基础与逻辑控制、数据传输与存储技术、寄存器与内存的灵活应用等多个领域的内容。通过本专栏,读者将深入了解51单片机中的中断编程、定时器与计数器在汇编编程中的运用、I_O编程技巧等关键主题。此外,本专栏还关注数码管显示与按键输入的实现、LCD液晶显示技术及驱动、ADC与模拟信号的采集处理等实际应用技术。同时,读者还将学习串口通信原理与实现、I2C总线通信与外设控制、SPI接口与外设扩展等通信和外设控制相关的知识。最后,本专栏还包括对中断优先级与中断嵌套技巧以及低功耗与省电技术的讨论,使读者能够全面了解51单片机汇编编程的基础知识和实际应用技巧。
最低0.47元/天 解锁专栏
送3个月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【实战演练】使用Docker与Kubernetes进行容器化管理

![【实战演练】使用Docker与Kubernetes进行容器化管理](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8379eecc303e40b8b00945cdcfa686cc~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) # 2.1 Docker容器的基本概念和架构 Docker容器是一种轻量级的虚拟化技术,它允许在隔离的环境中运行应用程序。与传统虚拟机不同,Docker容器共享主机内核,从而减少了资源开销并提高了性能。 Docker容器基于镜像构建。镜像是包含应用程序及

【实战演练】综合案例:数据科学项目中的高等数学应用

![【实战演练】综合案例:数据科学项目中的高等数学应用](https://img-blog.csdnimg.cn/20210815181848798.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hpV2FuZ1dlbkJpbmc=,size_16,color_FFFFFF,t_70) # 1. 数据科学项目中的高等数学基础** 高等数学在数据科学中扮演着至关重要的角色,为数据分析、建模和优化提供了坚实的理论基础。本节将概述数据科学

【实战演练】虚拟宠物:开发一个虚拟宠物游戏,重点在于状态管理和交互设计。

![【实战演练】虚拟宠物:开发一个虚拟宠物游戏,重点在于状态管理和交互设计。](https://itechnolabs.ca/wp-content/uploads/2023/10/Features-to-Build-Virtual-Pet-Games.jpg) # 2.1 虚拟宠物的状态模型 ### 2.1.1 宠物的基本属性 虚拟宠物的状态由一系列基本属性决定,这些属性描述了宠物的当前状态,包括: - **生命值 (HP)**:宠物的健康状况,当 HP 为 0 时,宠物死亡。 - **饥饿值 (Hunger)**:宠物的饥饿程度,当 Hunger 为 0 时,宠物会饿死。 - **口渴

【进阶】Python高级加密库cryptography

![【进阶】Python高级加密库cryptography](https://img-blog.csdnimg.cn/20191105183454149.jpg) # 2.1 AES加密算法 ### 2.1.1 AES加密原理 AES(高级加密标准)是一种对称块密码,由美国国家标准与技术研究院(NIST)于2001年发布。它是一种分组密码,这意味着它一次处理固定大小的数据块(通常为128位)。AES使用密钥长度为128、192或256位的迭代密码,称为Rijndael密码。 Rijndael密码基于以下基本操作: - 字节替换:将每个字节替换为S盒中的另一个字节。 - 行移位:将每一行

【实战演练】构建简单的负载测试工具

![【实战演练】构建简单的负载测试工具](https://img-blog.csdnimg.cn/direct/8bb0ef8db0564acf85fb9a868c914a4c.png) # 1. 负载测试基础** 负载测试是一种性能测试,旨在模拟实际用户负载,评估系统在高并发下的表现。它通过向系统施加压力,识别瓶颈并验证系统是否能够满足预期性能需求。负载测试对于确保系统可靠性、可扩展性和用户满意度至关重要。 # 2. 构建负载测试工具 ### 2.1 确定测试目标和指标 在构建负载测试工具之前,至关重要的是确定测试目标和指标。这将指导工具的设计和实现。以下是一些需要考虑的关键因素:

【实战演练】通过强化学习优化能源管理系统实战

![【实战演练】通过强化学习优化能源管理系统实战](https://img-blog.csdnimg.cn/20210113220132350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dhbWVyX2d5dA==,size_16,color_FFFFFF,t_70) # 2.1 强化学习的基本原理 强化学习是一种机器学习方法,它允许智能体通过与环境的交互来学习最佳行为。在强化学习中,智能体通过执行动作与环境交互,并根据其行为的

【实战演练】前沿技术应用:AutoML实战与应用

![【实战演练】前沿技术应用:AutoML实战与应用](https://img-blog.csdnimg.cn/20200316193001567.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h5czQzMDM4MV8x,size_16,color_FFFFFF,t_70) # 1. AutoML概述与原理** AutoML(Automated Machine Learning),即自动化机器学习,是一种通过自动化机器学习生命周期

【实战演练】时间序列预测项目:天气预测-数据预处理、LSTM构建、模型训练与评估

![python深度学习合集](https://img-blog.csdnimg.cn/813f75f8ea684745a251cdea0a03ca8f.png) # 1. 时间序列预测概述** 时间序列预测是指根据历史数据预测未来值。它广泛应用于金融、天气、交通等领域,具有重要的实际意义。时间序列数据通常具有时序性、趋势性和季节性等特点,对其进行预测需要考虑这些特性。 # 2. 数据预处理 ### 2.1 数据收集和清洗 #### 2.1.1 数据源介绍 时间序列预测模型的构建需要可靠且高质量的数据作为基础。数据源的选择至关重要,它将影响模型的准确性和可靠性。常见的时序数据源包括:

【实战演练】python云数据库部署:从选择到实施

![【实战演练】python云数据库部署:从选择到实施](https://img-blog.csdnimg.cn/img_convert/34a65dfe87708ba0ac83be84c883e00d.png) # 2.1 云数据库类型及优劣对比 **关系型数据库(RDBMS)** * **优点:** * 结构化数据存储,支持复杂查询和事务 * 广泛使用,成熟且稳定 * **缺点:** * 扩展性受限,垂直扩展成本高 * 不适合处理非结构化或半结构化数据 **非关系型数据库(NoSQL)** * **优点:** * 可扩展性强,水平扩展成本低

【实战演练】深度学习在计算机视觉中的综合应用项目

![【实战演练】深度学习在计算机视觉中的综合应用项目](https://pic4.zhimg.com/80/v2-1d05b646edfc3f2bacb83c3e2fe76773_1440w.webp) # 1. 计算机视觉概述** 计算机视觉(CV)是人工智能(AI)的一个分支,它使计算机能够“看到”和理解图像和视频。CV 旨在赋予计算机人类视觉系统的能力,包括图像识别、对象检测、场景理解和视频分析。 CV 在广泛的应用中发挥着至关重要的作用,包括医疗诊断、自动驾驶、安防监控和工业自动化。它通过从视觉数据中提取有意义的信息,为计算机提供环境感知能力,从而实现这些应用。 # 2.1 卷积