【汇编语言】中断及外部设备操作

【汇编语言】中断及外部设备操作


文章目录

  • 【汇编语言】中断及外部设备操作
  • 前言
  • 一、中断及其处理
    • 中断的概念
    • 8086内中断
    • 中断处理程序
    • 案例:系统中的0号中断
    • 中断过程
  • 二、编制中断处理程序
    • 中断处理程序及其结构
    • 编制中断处理程序——以除法错误中断为例
    • do0子程序应该放在哪里?
    • 程序框架
    • do0安装程序的实现
    • do0子程序的实现
    • 小结
  • 三、单步中断
    • 由Debug中的t命令说起
    • 单步中断过程与处理
    • 应用:中断不响应的情况
  • 四、由int指令引发的中断
    • int n引起的中断
    • 编写供应用程序调用的中断例程
    • 示例 :中断7ch的中断例程(1)
    • 示例 :中断7ch的中断例程(2)
  • 五、BIOS和DOS中断处理
    • BIOS——基本输入输出系统
    • BIOS中断调用示例
    • 有哪些BIOS中断,怎么用?
    • 汇编的强大功能,还有DOS中断!
    • int 21H DOS 中断例程的应用
    • BIOS和DOS中断例程的安装过程
  • 六、端口的读写
    • 用端口访问外设:以发声为例
    • CPU的邻居
    • 端口的读写
    • I/O端口分配
    • 端口的读写指令示例
  • 七、操作CMOS RAM 芯片
    • 端口操作示例:提取CMOS RAM中存储的时间信息
    • 在屏幕中间显示当前的月份
  • 八、外设的连接与中断
    • CPU通过端口与外部设备“连接”
    • 外中断:由外部设备发生的事件引起的中断
    • 外中断处理过程
  • 九、PC机键盘的处理过程
    • PC机键盘的处理过程
    • 键盘上键的扫描码(通码)
    • PC机键盘的处理过程——引发中断
    • PC机键盘的处理过程——执行中断例程
    • 输入‘a’
  • 十、定制键盘输入处理
    • PC机键盘的处理过程(int 9 中断例程)
    • 实现:依次显示'a'~'z'(v0.2)
    • 实现:依次显示”a”~”z”(v0.4)
    • 按下 Esc 键后改变显示的颜色
    • 实现: 按下 Esc 键后改变显示的颜色(v1.0)
  • 十一、改写中断例程的方法
    • 改写中断例程-以int 9为例
    • 实现方法
  • 十二、用中断响应外设
    • 如何操作外部设备?
    • 键盘输入的处理的int 9h中断和int 16h中断
    • 调用int 16h 从键盘缓冲区中读取键盘的输入
  • 十三、应用:字符串的输入
    • 要解决的问题
    • 程序的处理过程
    • 子程序:字符栈的入栈、出栈和显示
    • 实现字符栈的入栈、出栈和显示
  • 十四、读写磁盘
    • BIOS提供的磁盘直接服务——int 13h
    • 用BIOS int 13h对磁盘进行读操作
    • 用BIOS int 13h对磁盘进行写操作
    • DOS中断对磁盘文件的支持——int 21H
  • 十五、让计算机“唱歌”
    • 外部设备与如何被控制的?
    • 与"计算机唱歌"有关的硬件及控制
    • 翻译乐谱
    • 演奏程序
  • 总结


前言

本篇文章我们会详细讲到,中断及其处理,编制中断处理程序,单步中断,有int指令引发的中断,BIOS和DOS中断处理。端口的读写,操作CMOS RAM芯片,外设连接与中断,PC机键盘的处理过程,定制键盘输入处理,改写中断历程的方法,用中断相应外设,应用:字符串的输入,磁盘读写,发声程序。


一、中断及其处理

中断的概念

中断:CPU不再接着(刚执行完的指令)向下执行,而是转去处理中断信息。
内中断:由CPU内部发生的事件而引起的中断。
外中断:由外部设备发生的事件引起的中断。
在这里插入图片描述

8086内中断

CPU内部产生的中断信息
在这里插入图片描述
除法错误,比如:执行div指令产生的除法溢出
单步执行
执行into指令
执行int 指令

8086的中断类型码
1)除法错误:0
2)单步执行:1
3)执行 into 指令:4
4)执行 int n指令 ,立即数 n 为中断类型码。
在这里插入图片描述

中断处理程序

CPU接到中断信息怎么办?
执行中断处理程序。
中断处理程序在哪里?
中断信息和其处理程序的入口地址之间有某种联系,CPU根据中断信息可以找到要执行的处理程序。
中断向量表
中断类型码查表得到中断处理程序的入口地址,从而定位中断处理程序
8086CPU的中断向量表:
在这里插入图片描述

案例:系统中的0号中断

这里是引用
在这里插入图片描述

中断过程

这里是引用
中断过程: 中断过程由CPU的硬件自动完成; 用中断类型码找到中断向量,并用它设置CS和IP 8086CPU的中断过程:
1)从中断信息中取得中断类型码
2)标志寄存器的值入栈——中断过程中要改变标志寄存器的值,需要先行保护
3)设置标志寄存器的第8位TF 和第9位IF值为0
4)CS的内容入栈;
5)IP的内容入栈;
6)从中断向量表读取中断处理程序的入口地址,设置IP和CS。
在这里插入图片描述


二、编制中断处理程序

中断处理程序及其结构

CPU随时都可能检测到中断信息,所以中断处理程序必须常驻内存(一直存储在内存某段空间之中)。
中断处理程序的入口地址即中断向量,必须存储在对应的中断向量表表项中(0000:0000-0000:03FF)。
在这里插入图片描述

编制中断处理程序——以除法错误中断为例

问题:如何编制中断处理程序?
方案:通过对 0号中断,即除法错误的中断处理,体会中断处理程序处理的技术问题。
预期效果:编写一个0号中断处理程序,它的功能是在屏幕中间显示“overflow!”后,然后返回到操作系统。
在这里插入图片描述
第1个问题:do0子程序应该放在哪里?

do0子程序应该放在哪里?

这里是引用

程序框架

1)编写可以显示“overflow!”的中断处理程序:do0
2)安装程序:将do0送入内存0000:0200处;
3)将do0中断处理程序的入口地址0000:0200存储在中断向量表0号表项中。
在这里插入图片描述
第2个问题:怎么写安装程序?

do0安装程序的实现

这里是引用
第3个问题:do0怎么写?
第4个问题:设置中断向量表

do0子程序的实现

这里是引用

小结

在这里插入图片描述


三、单步中断

由Debug中的t命令说起

程序的正常执行:取指令、改变CS:IP、执行指令、取指令…
Debug提供了单步中断的中断处理程序,功能为显示所有寄存器中的内容后等待输入命令。
是什么,让CPU能执行一条指令就停下来?
Debug利用了CPU提供的单步中断的功能
使用t命令时,Debug将TF标志设为1,使CPU工作在单步中断方式下…
自定义单步中断处理程序,还可以实现特殊的功能。

单步中断过程与处理

这里是引用
两个和中断相关的寄存器标志位:
TF-陷阱标志(Trap flag):用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷
,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
IF-中断标志(Interrupt flag):当IF=1时,允许CPU响应可屏蔽中断请求;当IF=0时,关闭中断。
在这里插入图片描述
在这里插入图片描述

应用:中断不响应的情况

一般情况下,CPU在执行完当前指令后,如果检测到中断信息,就响应中断,引发中断过程。
在有些情况下,CPU 在执行完当前指令后,即便是发生中断,也不会响应。
例:在执行完向 ss寄存器传送数据的指令后,即便是发生中断,CPU 也不会响应。
原因:ss:sp联合指向栈顶,而对它们的设置应该连续完成。
以此保证对栈的正确操作!
例:设置栈


四、由int指令引发的中断

int n引起的中断

CPU内部产生的中断信息
除法错误
单步执行
执行into指令
执行int 指令
int格式: int n,n为中断类型码
功能:引发中断过程
CPU 执行int n指令,相当于引发一个n号中断过程,执行过程如下:
1)取中断类型码n;
2)标志寄存器入栈,IF = 0,TF = 0;
3)CS、IP入栈;
4)(IP) = (n4),(CS) = (n4+2)。—从此处转去执行n号中断的中断处理程序。
在这里插入图片描述
在这里插入图片描述

编写供应用程序调用的中断例程

技术手段:编程时,可以用 int指令调用子程序
此子程序即中断处理程序,简称为中断例程
可以自定义中断例程,实现特定功能
示例:中断7ch的中断例程的编写和安装
中断例程序需要按中断的运行机制的要求编写
参考:中断0 的中断例程
在这里插入图片描述

示例 :中断7ch的中断例程(1)

任务:编写程序
写7ch的中断例程,完成特定任务
功能:求一个word型数据的平方
参数: (ax)=要计算的数据
返回值:dx, ax中存放结果的高、低16位
编写安装中断例程
测试
应用举例:求2*3456^2
对中断例程的要求
在这里插入图片描述

示例 :中断7ch的中断例程(2)

7ch的中断例程的任务
功能:将以 0结尾的字符串转化为大写。
参数: ds:si指向字符串的首地址
在这里插入图片描述
在这里插入图片描述


五、BIOS和DOS中断处理

BIOS——基本输入输出系统

这里是引用
在这里插入图片描述
在这里插入图片描述

BIOS中断调用示例

任务:在屏幕的5行12列显示3个红底高亮闪烁绿色的’a’
回顾:
显示缓冲区结构
在这里插入图片描述
用BIOS的10h中断:
(ah)=2时,调用第10h中断例程的2号子程序,设置光标位置
(ah)=9时,调用第10h中断例程的9号子程序,在光标位置显示字符

在这里插入图片描述

有哪些BIOS中断,怎么用?

这里是引用

汇编的强大功能,还有DOS中断!

这里是引用

int 21H DOS 中断例程的应用

4ch号功能:程序返回
功能号在ah,返回结果保存在al
用法: mov ah,4ch
mov al,0
int 21h
或者:
mov ax,4c00h
int 21h
09h号功能:在光标位置显示字符串:
ds:dx指向要显示的字符串(用’$'结束)
用法:
mov ah ,9
int 21h
例:
编程在屏幕的5行12列显示字符串
“welcome to masm!”。
在这里插入图片描述

BIOS和DOS中断例程的安装过程

1)CPU 一加电,初始化(CS)=0FFFFH,(IP)=0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条转跳指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序
2)初始化程序将建立BIOS 所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。
3) 硬件系统检测和初始化完成后,调用int19h进行操作系统的引导。从此将计算机交由操作系统控制
4)DOS 启动后,除完成其它工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。
这里是引用


六、端口的读写

用端口访问外设:以发声为例

这里是引用
在这里插入图片描述
在这里插入图片描述

CPU的邻居

CPU可以直接读写3 个地方的数据
1)CPU 内部的寄存器
2)内存单元
3)端口:对应各种接口卡,网卡、显卡等;主板上的接口芯片;其他芯片;
读写内存与寄存器的指令
mov, add, push…
读写端口的指令
in: CPU从端口读取数据
out: CPU往端口写入数据
在这里插入图片描述
在这里插入图片描述

端口的读写

访问端口的方法:
例: in al, 60h ; 从60h号端口读入一个字节
执行时与总线相关的操作
① CPU通过地址线将地址信息60h发出;
② CPU通过控制线发出端口命令,选中端口所在的芯片,并通知要从中读取数据;
③ 端口所在的芯片将60h端口中的数据通过数据总线送入CPU。
在这里插入图片描述
在这里插入图片描述

I/O端口分配

这里是引用

端口的读写指令示例

对0~255以内的端口进行读写,端口号用立即数给出
in al,20h ;从20h端口读入一个字节
out 21h,al ;往21h端口写入一个字节
对256~65535的端口进行读写时,端口号放在dx中
mov dx,3f8h ;将端口号3f8送入dx
in al,dx ;从3f8h端口读入一个字节
out dx,al ;向3f8h端口写入一个字节
注意:在in和out 指令中,只能使用ax 或al 来存放从端口中读入的数据或要发送到端口中的数据。访问8 位端口时用 al访问16 位端口时用ax


七、操作CMOS RAM 芯片

CMOS RAM 芯片
1)包含一个实时钟和一个有128个存储单元的RAM存储器。
2)128 个字节的 RAM 中存储:内部实时钟、系统配置信息、相关的程序(用于开机时配置系统信息)。
3) CMOS RAM 芯片靠电池供电,关机后其内部的实时钟仍可正常工作, RAM 中的信息不丢失
4)该芯片内部有两个端口,端口地址为70h和71h,CPU 通过这两个端口读写CMOS RAM。
; 70h地址端口,存放要访问的CMOS RAM单元的地址。
; 71h数据端口,存放从选定的单元中读取的数据,或要写入到其中的数据。
这里是引用

端口操作示例:提取CMOS RAM中存储的时间信息

问题描述
在屏幕中间显示当前的月份
事实
在CMOS RAM中的时间信息含有月份
背景知识
在这里插入图片描述
在这里插入图片描述
分析:这个程序主要做两部分工作
1)从CMOS RAM的8号单元读出当前月份的BCD码
2)将用BCD码表示的月份以十进制的形式显示到屏幕上。

在屏幕中间显示当前的月份

1)从CMOS RAM的8号单元读出当前月份的BCD码
首先要向地址端口70h写入要访问的单元的地址-月份8
mov al,8
out 70h,al
再从数据端口71h中取得指定单元中的数据-月份值
in al,71h
2)将用BCD码表示的月份以十进制的形式显示到屏幕上
将读到的数据前4位和后4位分离出来
由低4位为BCD码的“数字”转为ASCII码
由:BCD 码值=十进制数码值
得:十进制数对应的ASCII码 = BCD码值+30h
显示
在这里插入图片描述


八、外设的连接与中断

CPU通过端口与外部设备“连接”

在这里插入图片描述

外中断:由外部设备发生的事件引起的中断

这里是引用
可屏蔽中断:
可屏蔽中断是CPU 可以不响应的外中断
CPU 是否响应可屏蔽中断,要看标志寄存器的IF 位的设置
当CPU 检测到可屏蔽中断信息时:
如果IF=1,则CPU 在执行完当前指令后响应中断,引发中断过程;
如果IF=0,则不响应可屏蔽中断
不可屏蔽中断:
不可屏蔽中断是CPU 必须响应的外中断;
当CPU 检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。
对于8086CPU 不可屏蔽中断的中断类型码固定为2
在这里插入图片描述

外中断处理过程

可屏蔽中断所引发的中断过程:
1)取中断类型码n;
2)标志寄存器入栈,IF=0,TF=0;
3)CS 、IP 入栈;
4)(IP)=(n4),(CS)=(n4+2)
由此转去执行中断处理程序
在这里插入图片描述
在这里插入图片描述
不可屏蔽中断的中断过程:

1)标志寄存器入栈,IF=0,TF=0;
2)CS、IP入栈;
3)(IP)=(8),(CS)=(0AH)。
在这里插入图片描述
在这里插入图片描述


九、PC机键盘的处理过程

PC机键盘的处理过程

键盘输入的处理过程
1、键盘输入
2、引发9号中断
3、执行int 9中断例程

1、键盘输入:
在这里插入图片描述

键盘上键的扫描码(通码)

这里是引用

PC机键盘的处理过程——引发中断

2、引发9号中断
在这里插入图片描述
输入的字符键值如何保存?
BIOS键盘缓冲区
BIOS键盘缓冲区:是系统启动后,BIOS用于存放int 9 中断例程所接收的键盘输入的内存区。
BIOS键盘缓冲区:可以存储15 个键盘输入,一个键盘输入用一个字单元存放,高位字节存放扫描码,低位字节存放字符码
在这里插入图片描述
输入了控制键和切换键,如何处理?
在这里插入图片描述

PC机键盘的处理过程——执行中断例程

3、执行int 9中断例程
在这里插入图片描述

输入‘a’

在这里插入图片描述


十、定制键盘输入处理

PC机键盘的处理过程(int 9 中断例程)

键盘输入的处理过程:
1)键盘产生扫描码;
2)扫描码送入60h 端口;
3)引发9 号中断; 前三由硬件系统完成的
4)CPU执行int 9中断例程,处理键盘输入; DOS系统提供int 9中断例程
按照开发需求定制处理键盘的输入
编程任务:
在屏幕中间依次显示 ‘a’~‘z’ ,并可以让人看清。
在显示的过程中,按下Esc键后,改变显示的颜色。
工作策略
尽可能忽略硬件处理细节,充分利用BIOS 提供的int 9中断例程对这些硬件细节进行处理。
在改写后的中断例程中满足特定要求,并能调用BIOS 的原int 9中断例程

实现:依次显示’a’~‘z’(v0.2)

这里是引用
存在的问题:无法看清屏幕上的显示。
原因:同一位置显示字母,字母之间切换的太快,无法看清。
对策:在每显示一个字母后,延时一段时间
如何延时?让CPU执行一段时间的空循环。
在这里插入图片描述

实现:依次显示”a”~”z”(v0.4)

这里是引用
接下来的工作:按下 Esc键后,改变显示的颜色!
原理:键盘输入到达60h端口后,就会引发 9号中断,CPU 则转去执行int 9中断例程。

按下 Esc 键后改变显示的颜色

编写int 9中断例程改变显示的颜色
在这里插入图片描述

实现: 按下 Esc 键后改变显示的颜色(v1.0)

这里是引用


十一、改写中断例程的方法

改写中断例程-以int 9为例

任务:安装一个新的int 9中断例程
功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理。
要解决的问题
1)改变屏幕的显示颜色
改变从B800开始的4000个字节中的所有奇地址单元中的内容,当前屏幕的显示颜色即发生改变。
2)F1改变功能,其他键照常
可以调用原int 9中断处理程序,来处理其他的键盘输入
3)原int 9中断例程入口地址的保存
要保存原int 9中断例程的入口地址原因:在新int 9中断例程中要调用原int 9中断例程保存在哪里? 我们将地址保存在0:200单元处。
4)新int 9中断例程的安装
我们可将新的int 9中断例程安装在0:204 处。
在这里插入图片描述

实现方法

这里是引用


十二、用中断响应外设

如何操作外部设备?

以典型输入设计——键盘操作为例
在这里插入图片描述
在这里插入图片描述

键盘输入的处理的int 9h中断和int 16h中断

这里是引用
键盘缓冲区的实现
共16字;用环形队列;可存储15个按键扫描码

调用int 16h 从键盘缓冲区中读取键盘的输入

综前所述:int 16h 中断例程 0 号功能的实现过程
1)检测键盘缓冲区中是否有数据;
2)没有则继续做第1 步;
3)读取缓冲区第一个字单元中的键盘输入;
4)将读取的扫描码送入ah,ASCII 码送入al;
5)将己读取的键盘输入从缓冲区中删除。
事实
BIOS 的int 9 中断例程和int 16h 中断例程是一对相互配合的程序,int 9 中断例程向键盘缓冲区中写入,int 16h 中断例程从缓冲区中读出
应用
我们在编写一般的处理键盘输入的程序的时候,根据需要用不同的方法。
应用示例:更改屏幕颜色
要求:接收用户的键盘输入
输入“r”,将屏幕上的字符设置为红色;
输入“g”, 将屏幕上的字符设置为绿色;
输入“b ”,将屏幕上的字符设置为蓝色。
在这里插入图片描述
在这里插入图片描述


十三、应用:字符串的输入

要解决的问题

问题:设计一个最基本的字符串输入程序,需要具备下面的功能
1) 在输入的同时需要显示这个字符串;
2)一般在输入回车符后,字符串输入结束;
3)能够删除已经输入的字符——用退格键。
讨论:
1)在输入的同时需要显示这个字符串
需要用栈的方式来管理字符串的存储空间
2)在输入回车符后,字符串输入结束
输入回车符后 ,在字符串中加入0,表示字符串结束。
3) 在输入的同时需要显示这个字符串
每次有新的字符输入和删除一个字符的时候,都应该重新显示字符串,即从字符栈的栈底到栈顶,显示所有的字符。
在这里插入图片描述

程序的处理过程

  1. 调用int 16h读取键盘输入;
  2. 如果不是字符:①如果是退格键,从字符栈中弹出一个字符,显示字符栈中的所有字符;继续执行(1) ;②如果是Enter 键,向字符栈中压入0,返回。
  3. 如果是字符键:字符入栈;显示字符栈中的所有字符;继续执行(1) ;
    在这里插入图片描述

子程序:字符栈的入栈、出栈和显示

参数说明:
(ah)=功能号,0表示入栈,1表示出栈,2表示显示;
对于0 号功能:(al)=入栈字符
对于1 号功能:(al)=返回的字符;
对于2 号功能
(dh)、(dl) =字符串在屏幕上显示的行、列位置;
ds:si 指向字符串的存储空间,字符串以0为结尾符。
在这里插入图片描述
在这里插入图片描述

实现字符栈的入栈、出栈和显示

这里是引用


十四、读写磁盘

BIOS提供的磁盘直接服务——int 13h

这里是引用

用BIOS int 13h对磁盘进行读操作

入口参数:
(ah)=2(2表示读扇区)
(al)=读取的扇区数
(ch)=磁道号,(cl)=扇区号
(dh)=磁头号(对于软盘即面号,一个面用一个磁头来读写)
(dl)=驱动器号:软驱从0开始,0:软驱A,1:软驱B;硬盘从80h开始,80h:硬盘C,81h:硬盘D
es:bx指向接收从扇区读入数据的内存区
返回参数:
操作成功:(ah)=0,(al)=读入的扇区数
操作失败:(ah)=出错代码
例:读取C盘0面0道1扇区的内容到内存单元0:200;
在这里插入图片描述

用BIOS int 13h对磁盘进行写操作

入口参数:
(ah)=3(3表示写扇区)
(al)=写入的扇区数
(ch)=磁道号,(cl)=扇区号
(dh)=磁头号(对于软盘即面号)
(dl)=驱动器号:软驱从0开始,0:软驱A,1:软驱B;硬盘从80h开始,80h:硬盘C,81h:硬盘D
es:bx指向将写入磁盘的数据
返回参数:
操作成功:(ah)=0,(al)=写入的扇区数
操作失败:(ah)=出错代码
例:将0:200中的内容写入C盘0面0道1扇区
在这里插入图片描述

DOS中断对磁盘文件的支持——int 21H

这里是引用


十五、让计算机“唱歌”

外部设备与如何被控制的?

这里是引用

与"计算机唱歌"有关的硬件及控制

这里是引用
在这里插入图片描述

翻译乐谱

在这里插入图片描述
在这里插入图片描述
这里是引用

演奏程序

这里是引用


总结

到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础I/O--文件系统

文章目录 回顾C文件接口初步理解文件理解文件使用和并认识系统调用open概述标记位传参理解返回值 closewriteread总结 文件描述符fd0&1&2理解 回顾C文件接口 C代码&#xff1a; #include<stdio.h> int main() { FILE *fpfopen("log.txt",&…

《MySQL45讲》读书笔记

重建表 alter table t engine InnoDB&#xff08;也就是recreate&#xff09;&#xff0c;而optimize table t 等于recreateanalyze&#xff0c;让表大小变小 重建表的执行流程 建立一个临时文件&#xff0c;扫描表 t 主键的所有数据页&#xff1b;用数据页中表 t 的记录生…

mac通过termius连接Linux服务器

mac上安装 linux系统 如果有 linux服务器账号密码&#xff0c;那么上一步可忽略&#xff1b; 比如&#xff1a;直接连接阿里云或腾讯云账号 1. 安装termius 链接: https://pan.baidu.com/s/1iYsZPZThPizxqtkLPT89-Q?pwdbw6j 提取码: bw6j 官网 Termius - SSH platform for …

【C++】STL — vector的接口讲解 +详细模拟实现

前言: 本章我们将学习STL中另一个重要的类模板vector… vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。但是又不像数组&#xff0c;它的大小是可以动态改变的本质讲&#xff0c;vector使用动态分配数组来存储它的元素v…

配电室智能巡检机器人

近年来&#xff0c;生产过程高度自动化&#xff0c;各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工&#xff0c;既耗时费力效率又低&#xff0c;且受环境等因素影响&#xff0c;巡检难以全面规范&#xff0c;隐患或问题易被忽视。在此情况下&#xff0c;如何利用现有…

ElasticSearch02(DSL查询文档,DSL处理结果,RestClient查询,旅游案例,数据聚合)【全详解】

目录 一、DSL查询文档 1. 说明 2. 文本检索 3. 精确查询 4. 地理坐标查询 5. 复合查询 6. 课堂演示 7. 小结 二、DSL处理结果 1. 排序 2. 分页 3. 高亮 4. 课堂演示 5. 小结 三、RestClient查询 1.快速入门 2.match查询 3.精确查询 4.布尔查询 5. 算分函数…

锁相环原理解析

在计算机和嵌入式系统中&#xff0c;常常要用锁相环来倍频&#xff0c;那么&#xff0c;锁相环是如何倍频的&#xff0c;其原理又是什么呢&#xff1f; 目录 1. 锁相环基本概念与构成1.1 鉴相器1.2 低通滤波器1.3 压控振荡器 2. 锁相环如何实现倍频3. 锁相环也会失效&#xff…

【前端学习——正则】

https://www.bilibili.com/video/BV1da4y1p7iZ/?spm_id_from333.337.search-card.all.click&vd_source5cef5968d539682b683e7d01b00ad01b 学习网站 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

Bookends for Mac:文献管理工具

Bookends for Mac&#xff0c;一款专为学术、研究和写作领域设计的文献管理工具&#xff0c;以其强大而高效的功能深受用户喜爱。这款软件支持多种文件格式&#xff0c;如PDF、DOC、RTF等&#xff0c;能够自动提取文献的关键信息&#xff0c;如作者、标题、出版社等&#xff0c…

在M1芯片安装鸿蒙闪退解决方法

在M1芯片安装鸿蒙闪退解决方法 前言下载鸿蒙系统安装完成后&#xff0c;在M1 Macos14上打开闪退解决办法接下来就是按照提示一步一步安装。 前言 重新安装macos系统后&#xff0c;再次下载鸿蒙开发软件&#xff0c;竟然发现打不开。 下载鸿蒙系统 下载地址&#xff1a;http…

MATLAB实现遗传算法优化第三类生产线平衡问题

第三类生产线平衡问题的数学模型 假设&#xff1a; 工作站数量&#xff08;m&#xff09;和生产线节拍&#xff08;CT&#xff09;是预设并固定的。每个任务&#xff08;或作业元素&#xff09;只能分配到一个工作站中。任务的执行顺序是预先确定的&#xff0c;且不可更改。每…

PHP医疗不良事件上报系统源码 AEMS开发工具vscode+ laravel8 医院安全(不良)事件报告系统源码 可提供演示

PHP医疗不良事件上报系统源码 AEMS开发工具vscode laravel8 医院安全&#xff08;不良&#xff09;事件报告系统源码 可提供演示 医院安全不良事件报告系统&#xff08;AEMS&#xff09;&#xff1b;分为外部报告系统和内部报告系统两类。内部报告系统主要以个人为报告单位&…

Docker私有镜像仓库搭建 带图形化界面的

搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。 官网地址&#xff1a;https://hub.docker.com/_/registry 先配置私服的信任地址: # 打开要修改的文件 vi /etc/docker/daemon.json # 添加内容&#xff1a; "insecure-registries":["http://192.…

暴力匹配字符串的升级版算法 —— Kmp算法

文章目录 一、Kmp算法是什么&#xff1f;二、算法分析1.构建next数组2.匹配主串 三、完整代码 一、Kmp算法是什么&#xff1f; 简单来说&#xff0c;KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法主要用于解决字符串匹配问题。也就是当你有一个主串&#xff08;text&…

OceanBase 轻量级数仓关键技术解读

码到三十五 &#xff1a; 个人主页 为了更好地聚合和治理跨域数据&#xff0c;帮助企业用较低的成本快速聚合分析&#xff0c;快速决策&#xff0c;不断的让企业积累的数据产生价值&#xff0c;从全域海量数据抓取&#xff0c;高性能流批处理&#xff0c;元数据血缘治理等等方面…

AI-数学-高中52-离散型随机变量概念及其分布列、两点分布

原作者视频&#xff1a;【随机变量】【一数辞典】2离散型随机变量及其分布列_哔哩哔哩_bilibili 离散型随机变量分布列&#xff1a;X表示离散型随机变量可能在取值&#xff0c;P:对应分布在概率&#xff0c;P括号里X1表示事件的名称。 示例&#xff1a;

QT:QT窗口(一)

文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…

AI人才争夺战,华尔街入局:豪掷百万美元年薪抢人

继硅谷之后&#xff0c;华尔街也入局**“AI人才争夺大战”**。 他们的目标非常明确——抢的就是高精尖的AI专家。 △图源&#xff1a;Business Insider 现在这条“街”上&#xff0c;不论是银行、对冲基金还是私募股权公司都已纷纷下场&#xff0c;可谓是豪掷千金&#xff0c…

选择深度学习框架:TensorFlow 2 vs PyTorch

TensorFlow 2 vs PyTorch 选择深度学习框架&#xff1a;TensorFlow 2 vs PyTorchTensorFlow 2概述TensorFlow 2的优点TensorFlow 2的缺点 PyTorch概述PyTorch的优点PyTorch的缺点 选择建议对于选择困难症的人&#xff0c;我给你们的答案——PyTorch选择理由&#xff1a;结论&am…