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

news/2024/5/19 11:21:45

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


文章目录

  • 【汇编语言】中断及外部设备操作
  • 前言
  • 一、中断及其处理
    • 中断的概念
    • 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.mrgr.cn/p/76513864

相关文章

day31-jQuery

1、jQuery介绍jQuery是什么jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的J…

物联网小demo

机智云生成代码 具体参考之前的文章 初始化 ADC用来使用光敏电阻 连续采样开启 采样的周期调高 定时器 定时器1用来实现延时 为了只用温湿度模块DHT11 定时器4用来和51进行交互 实现定时的发送和检测心跳信号 IIC 用来使用oled屏幕 USART 串口1和串口2是机智云自己…

VMware ESXi 7.0U3p macOS Unlocker Dell (戴尔) OEM 定制版自定义镜像 A20

VMware ESXi 7.0U3p macOS Unlocker Dell (戴尔) OEM 定制版自定义镜像 A20VMware ESXi 7.0U3p macOS Unlocker Dell (戴尔) OEM 定制版自定义镜像 A20 ESXi 7.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富…

毕设求助

毕业答辩一辩没过,老师说我的系统没什么用。说让我换个题目加两个功能,有没有大佬指导一下应该怎么做,往哪个方向去想大概界面就是这样,求大佬指点,有偿

程序设计——前后端分离实现简单表白墙

文章目录 一、前端页面样式代码二、前后端衔接1. 后端创建 maven 项目2. 针对前后端交互的解释以及后端代码的实现针对 post 请求解释前后端衔接针对 Get 请求解释前后端衔接 3.后端与数据库的联系以及对数据的存取单独封装数据库连接代码解释后端存储 save 数据的代码解释后端…

用Golang做一个永久阻塞,有哪些小技巧 ?

用Golang做一个永久阻塞,有哪些小技巧 ? 磊丰 Go语言圈 2024-05-06 08:30 广东 听全文Go语言圈 Go语言开发者的学习好助手,分享Go语言知识,技术技巧,学习与交流Go语言开发经验,互动才有助于技术的提升,每天5分钟,助你GO语言技术快乐成长 159篇原创内容公众号学习与交流:…

vue3早已具备抛弃虚拟DOM的能力了

前言 jquery时代更新视图是直接对DOM进行操作,缺点是频繁操作真实 DOM,性能差。react和vue时代引入了虚拟DOM,更新视图是对新旧虚拟DOM树进行一层层的遍历比较,然后找出需要更新的DOM节点进行更新。这样做的缺点就是如果DOM树很复杂,在进行新旧DOM树比较的时候性能就比较差…

五一假期学习总结:从DevOps到SRE

五一假期,没出远门,带娃露营玩水玩沙骑平衡车,累的不亦乐乎。同时,也刷了一门极客时间的课程《SRE实战手册》,给我带来了一些新的认知,我将这些认知整理了以下,特此总结分享与你,强烈建议已经实践了DevOps的童鞋了解一下SRE。大家好,我是Edison。 五一假期,没出远门,…

经验之谈:我为什么选择了这样一个激进的缓存大Key治理方案

本文将结合我的一次Redis大Key的治理经验,来浅谈一下缓存大Key的治理方案选择。文中主要包括缓存大Key基础知识、大Key治理方案选择、大Key治理案例等,适合有一定开发经验的开发者阅读,希望对大家有帮助。一、引言 本文将结合我的一次Redis大Key的治理经验,来浅谈一下缓存大…

Flask教程2:flask高级视图

文章目录 add_url_rule类视图的引入装饰器的自定义与使用蓝图的使用url_prefix设置蓝图前缀 add_url_rule 欲实现url与视图函数的绑定,除了使用路由装饰器app.route,我们还可以通过add_url_rule(rule,endpointNone,view_funcNone)方法,其中&…

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 已开源:https://github.com/stay-leave/enhance_llm 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。…

视频教程下载:为 GPTs 商店构建 10 个 GPTs获得被动收入

欢迎来到 AI 驱动的内容创作新时代 - GPT 商店。这门综合课程是您成为定制和利用 GPT 模型解决多样化应用的专家的路线图。无论你是错过了应用商店革命的初始浪潮还是乘着它取得了成功,这都是你站在下一个重大数字飞跃前沿的机会。 课程模块: - 介绍 Ch…

易语言IDE界面美化支持库

易语言IDE界面美化支持库 下载下来可以看到,是一个压缩包。 那么,怎么安装到易语言中呢? 解压之后,得到这两个文件。 直接将clr和lib丢到易语言安装目录中,这样子就安装完成了。 打开易语言,在支持库配置…

WPF之border标签边框控件、设置弧度、图片

border标签在WPF中承担着边框的角色又称之为边框标签,使用嵌套的方法去给一些标签添加边框,border标签包裹目标标签(border不能有多个子元素)。一般在给标签添加弧度时可以使用border。 常用属性 CornerRadius边框拐角的弧度,当宽高是一样的…

分享几个.NET开源的AI和LLM相关项目框架

前言 现如今人工智能(AI)技术的发展可谓是如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI和LLM相关的项目框架,希望能为大家提供一些参考。如果你有更好的推荐,欢迎RP投稿或文末留言。https://github.com/YSGStudyHards/DotNet…

Arduino安装esp32-cam

没买下载主板的可使用usb转串口模块进行烧录,接线方式可参考arduino-esp32-cam环境配置和例程使用。 2. 软件 2.1 arduino下载安装 官网https://www.arduino.cc/en/main/software下载,我的版本是2.1.0,IDE默认安装路径为C盘,自己可以选择其他盘进行安装。 2.2 arduino配置e…

华为二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备,用于在局域网(LAN)中转发数据帧。它工作在OSI模型的第二层,即数据链路层。二层交换机通过学习和维护MAC地址表,实现了数据的快速转发和广播域的隔离。 实…

ThreeJS:光线投射与3D场景交互

光线投射Raycaster 光线投射详细介绍可参考:https://en.wikipedia.org/wiki/Ray_casting, ThreeJS中,提供了Raycaster类,用于进行鼠标拾取,即:当三维场景中鼠标移动时,利用光线投射,…

解密Prompt系列28. LLM Agent之金融领域摸索:FinMem FinAgent

本章介绍金融领域大模型智能体,并梳理金融LLM相关资源。大模型智能体当前集中在个股交易决策场景,而使用大模型智能体最显著的优势在于对海量信息的高效处理,存储和信息联想。FinMEM和FinAgent本章介绍金融领域大模型智能体,并梳理金融LLM的相关资源。金融领域的大模型智能…

【webrtc】MessageHandler 6: 基于线程的消息处理:StunRequest实现包发送和超时重传

G:\CDN\rtcCli\m98\src\p2p\base\stun_request.cc使用OnMessage 实现包的发送和包的超时重传StunRequest 一个StunRequest 代表是一个独立的请求的发送STUN消息 要不是发送前构造好的,要不就是按照需要构建的使用StunRequestManager: 每一个STUNRequest 携带一个交互id 写入m…