《汇编语言》- 读书笔记 - 第13章-int 指令
《汇编语言》- 读书笔记 - 第13章-int 指令
- 13.1 int 指令
- 13.2 编写供应用程序调用的中断例程
- 中断例程:求一 word 型数据的平方
- 主程序
- 中断处理程序
- 执行效果
- 中断例程:将一个全是字母,以0结尾的字符串,转化为大写
- 主程序
- 中断处理程序
- 执行效果
- 13.3 对 int、iret 和栈的深入理解
- 主程序
- 中断处理程序
- 分析
- 执行效果
- 检测点 13.1
- 13.4 BIOS 和 DOS 所提供的中断例程
- 13.5 BIOS 和 DOS 中断例程的安装过程
- BIOS中断例程的安装:
- DOS中断例程的安装:
- 13.6 BIOS 中断例程应用
- 功能 02H 设置光标位置
- 功能 09H 在光标位置显示字符
- 13.7 DOS 中断例程应用(INT 21H)
- 功能 4CH:返回码方式的终止进程
- 功能 09H:输出一个字符串到标准输出设备上
- 实验 13 编写、应用中断例程
- 参考资料
13.1 int 指令
int n 指令的功能是:引发 n 号中断过程,从而执行 n号中断处理程序。
系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。
我们在编程的时候,可以用 int 指令调用这些子程序。
当然,也可以自己编写些中断处理程序供别人使用。
以后,我们可以将中断处理程序简称为中断例程。
13.2 编写供应用程序调用的中断例程
中断例程:求一 word 型数据的平方
| 问题一 | 编写、安装中断 7ch 的中断例程。 |
|---|---|
| 功能 | 求一 word 型数据的平方。 |
| 参数 | (ax)=要计算的数据。 |
| 返回 | dx、ax 中存放结果的高 16 位和低 16 位。 |
| 应用举例 | 求 2*3456^2 = 16C8000h = 23,887,872 |
主程序
assume cs:code
code segmentstart: mov ax,3456 ; (ax)=3456int 7ch ; 调用中断 7ch 的中断例程,计算ax中的数据的平方; dx:ax 存放结果,将结果乘以2add ax,ax ; 先加低位adc dx,dx ; 再加高位(这里用了进位加法); 23887872mov ax,4c00hint 21h
code ends
end start
中断处理程序
assume cs:code
code segmentstart: ; ====================== 安装 ==================== ; ------------------- 复制数据 -------------------mov ax,csmov ds,axmov si,offset sqr ;设置 ds:si 指向源地址mov ax,0mov es,axmov di,200h ;设置 es:di 指向目的地址mov cx,offset sqrend-offset sqr ;设置 cx为传输长度cld ;设置传输方向为正。movsb中si,di递增rep movsb ;重复复制数据次数由 cx 控制; ------------------- 复制数据 -------------------; ----------------- 设置中断向量 -----------------mov ax,0mov es,ax ; 段地址 0mov word ptr es:[7ch*4],200h ; 设置【中断处理程序】的:偏移地址mov word ptr es:[7ch*4+2],0 ; 设置【中断处理程序】的:段地址; ----------------- 设置中断向量 -----------------; ====================== 安装 ==================== mov ax, 4c00H ; 退出int 21H; =======================================================
; --------------------- 中断处理程序 --------------------
; ax 的平方
; -------------------------------------------------------
; 参数:ax 要计算的数据。
; 返回:dx、ax 中存放结果的高 16 位和低 16 位。
; -------------------------------------------------------sqr: mul ax ; ax * ax 结果 dx=高16位,ax=低16位iret ; 返回原程序。 pop IP, pop CS, popfsqrend: nop
; --------------------- 中断处理程序 --------------------
; =======================================================
code ends
end start
- 安装功能跟之前都是一样的,只是改下值就行了。
- 中断处理程序也很简单就是一个乘法就返回了。
执行效果

中断例程:将一个全是字母,以0结尾的字符串,转化为大写
| 问题二 | 编写、安装中断 7ch 的中断例程。 |
|---|---|
| 功能 | 将一个全是字母,以0结尾的字符串,转化为大写。 |
| 参数 | ds:si指向字符串的首地址。 |
| 应用举例 | 将 data 段中的字符串转化为大写 |
主程序
assume cs:code
data segmentdb 'conversation',0
data endscode segmentstart: mov ax,datamov ds,axmov si,0int 7ch mov ax,4c00hint 21h
code ends
end start
中断处理程序
assume cs:code
code segmentstart: ; ====================== 安装 ==================== ; ------------------- 复制数据 -------------------mov ax,csmov ds,axmov si,offset capital ;设置 ds:si 指向源地址mov ax,0mov es,axmov di,200h ;设置 es:di 指向目的地址mov cx,offset capitalend-offset capital ;设置 cx为传输长度cld ;设置传输方向为正。movsb中si,di递增rep movsb ;重复复制数据次数由 cx 控制; ---------------- 安装(复制数据) ----------------; ----------------- 设置中断向量 -----------------mov ax,0mov es,ax ; 段地址 0mov word ptr es:[7ch*4],200h ; 设置【中断处理程序】的:偏移地址mov word ptr es:[7ch*4+2],0 ; 设置【中断处理程序】的:段地址; ----------------- 设置中断向量 -----------------; ====================== 安装 ====================mov ax, 4c00H ; 退出int 21H; =======================================================
; --------------------- 中断处理程序 --------------------
; 将一个全是字母,以0结尾的字符串,转化为大写。
; -------------------------------------------------------
; 参数:ds:si 指向字符串的首地址。
; -------------------------------------------------------capital: push cx ; 备份寄存器push sichange: mov cl,[si] ; 取字符mov ch,0 ; 高位不参与计算,置 0 jcxz ok ; 如果取到 0 跳到 ok 循环结束and byte ptr [si],11011111b ; 否则:字符转大写inc si ; si++ 指向下一字符jmp short change; 跳到开头继续循环ok: pop si ; 还原寄存器pop cxiret ; 返回原程序。 pop IP, pop CS, popfcapitalend: nop
; --------------------- 中断处理程序 --------------------
; =======================================================
code ends
end start
没什么新知识点,都是之前学过的:安装、遍历字符串、字符转大写。
执行效果

13.3 对 int、iret 和栈的深入理解
| 问题 | 用 7ch 中断例程完成 loop 指令的功能 (模拟 loop s) |
|---|---|
| 参数 | bx 存 s 到 se 之间的位移 cx 循环次数 |
| 返回 | 无 |
| 应用举例 | 在屏幕中间显示80个“!” |
主程序
assume cs:code
code segmentstart: mov ax,0b800hmov es,axmov di,160*12 ; 从第16向第一个字符开始(正好一行80个字符)mov bx,offset s-offset se ; 参数:se到s的【位移】= -9mov cx,80 ; 参数:循环80次; ES: 当前偏移量 000Eh = 23 + (-9) = 14s: mov byte ptr es:[di],'!' ; add di,2int 7ch ; 实现 loop s 效果se: nop ; 当前偏移量 0017h = 23mov ax,4c00hint 21h
code ends
end start

- 从
s到se共 9 个字节。把它存进bx,传给中断处理程序,
在中断处理程序中我们就是利用它来算出s偏移量,来实现循环的。 - 从上面的截图可以看出
mov byte ptr es:[di],'!'这一句被反编译成了两句。
2.1. 先是ES:看上去是设置默认数据段的意思 。
2.2. 因为第二句中MOV BYIE PIR [DI],21中没有写段地址,只写了[DI]
中断处理程序
assume cs:code
code segmentstart: ; ---------------- 安装(复制数据) ----------------mov ax,csmov ds,axmov si,offset lp ;设置 ds:si 指向源地址mov ax,0mov es,axmov di,200h ;设置 es:di 指向目的地址mov cx,offset lpend-offset lp ;设置 cx为传输长度cld ;设置传输方向为正。movsb中si,di递增rep movsb ;重复复制数据次数由 cx 控制; ---------------- 安装(复制数据) ----------------; ----------------- 设置中断向量 -----------------mov ax,0mov es,ax ; 段地址 0mov word ptr es:[7ch*4],200h ; 设置【中断处理程序】的:偏移地址mov word ptr es:[7ch*4+2],0 ; 设置【中断处理程序】的:段地址; ----------------- 设置中断向量 -----------------mov ax, 4c00H ; 退出int 21H ; 触发33号中断; =======================================================
; --------------------- 中断处理程序 --------------------
; 模拟 loop s 效果
; -------------------------------------------------------
; 参数:bx 下一句指令到 s 之间的位移
; 参数:cx-1 循环次数
; -------------------------------------------------------lp: push bp ; 备份寄存器mov bp,sp ; 取栈顶所指的内存位置dec cx ; 计数 cx = cx-1jcxz lpret ; cx 为 0 就跳出循环add [bp+2],bx ; 分析:1lpret: pop bp ; 还原寄存器iret ; 分析:2 【重点】lpend: nop
; --------------------- 中断处理程序 --------------------
; =======================================================
code ends
end start
分析
- 分析1. 上面我们从
sp拿到了栈顶内存地址存到bp。
这里我们就直接修改这段内存中的偏移量了。当前栈中:[bp, ip, cs, flags]
(注意:这时的 bp 是栈顶,跟栈中备份的那个bp值可不是同一个东西了)
所以修改时使用的是[bp+2]指向中断前备份的IP。 - 分析2.
iret是用来返回原程序,继续执行的。它会从栈中恢复中断前保存的寄存器状态,还原了CS:IP就能实现继续执行中断前的下一条指令了。
pop IP
pop CS
popf
这里是本节的重点了:欺骗善良无知的iret。
- 在中断触发前,
IP指向了标号se处。(在主程序中我已经计算出了se到s之间的偏移) 中断过程中,会备份当前寄存器:pushf, push cs, push ip。中断处理程序中:我们在add [bp+2],bx ; 分析:1这句修改了栈中备份的IP的值。
所以iret恢复后其实指向了标号s,这也就实现了跳回去重新执行的效果。
执行效果

检测点 13.1
《汇编语言》- 读书笔记 - 检测点 13.1
13.4 BIOS 和 DOS 所提供的中断例程
BIOS(基本输入输出系统)存储在系统板的ROM中,包含以下内容:硬件系统的检测和初始化程序外部中断和内部中断的中断例程- 用于对
硬件设备进行I/O操作的中断例程 - 其他与
硬件系统相关的中断例程
- DOS操作系统同样提供了中断例程,这些例程是
操作系统向程序员提供的编程接口。 - BIOS和DOS提供的中断例程包括许多子程序,它们实现了常见的编程功能。
程序员可以通过int指令直接调用:BIOS或DOS的中断例程来完成特定任务。- 与
硬件设备相关的DOS中断例程通常会进一步调用BIOS的中断例程以执行底层硬件操作。
13.5 BIOS 和 DOS 中断例程的安装过程
在8086架构的早期个人计算机系统中,BIOS和DOS中断例程的安装过程并非由用户程序直接执行安装,而是内置于系统的初始化过程中。以下是一个简化的概述:
BIOS中断例程的安装:
- 开机后,CPU 一加电,自动从
FFFF:0000H地址处开始执行ROM中的代码(即BIOS)。
(这个位置存放着一条跳转指令,它会跳转到ROM中的实际BIOS启动代码区域。) - BIOS首先进行硬件自检(POST, Power-On Self-Test),检测和初始化硬件设备。
- BIOS建立中断向量表,将自身的
中断处理程序的入口地址填入到中断向量表对应的内存位置。
(只需要有登记入口地址,因为中断处理程序本身已固化在BIOS的ROM中。)
DOS中断例程的安装:
- 硬件自检和初始化完成后,调用
int 19h进行操作系统的引导。
1.1. 在BIOS对int 19h中断做出响应时,它首先从硬盘的第一个扇区(即主引导记录MBR)读取512字节的数据到内存特定位置(如0x7C00)。
1.2.MBR中的前446字节通常是机器码构成的操作系统引导程序(Boot Loader),该引导程序接着会被CPU执行。
1.3. 引导程序的任务是找到并加载实际的操作系统,例如MS-DOS或更现代的操作系统的核心文件,并将控制权转交给操作系统。 - 当DOS启动时,它会接管控制权,并且根据需要重定向某些中断向量,以便调用自己的中断例程来处理特定的服务请求。
- DOS通常会保留一部分中断向量用于调用原始的BIOS服务,同时提供额外的中断服务例程以支持文件操作、磁盘读写等功能。
总之,在8086环境下,BIOS和DOS中断例程的安装是指在系统启动阶段由固件和操作系统自动完成中断向量表的填充和设置,而不是程序员手动安装的过程。
《汇编语言》- 读书笔记 - 检测点 13.2.
13.6 BIOS 中断例程应用
功能 02H 设置光标位置
| INT 10H | 显示服务 Video Service |
|---|---|
功能02H | 设置光标位置 |
| 参数 | AH=调用 02H 号子程序BH=显示页码DH=行(Y坐标)DL=列(X坐标) |
| 返回 | 无 |
assume cs:code
code segmentstart: mov ah,2 ; 设置光标位置mov bh,0 ; 显示页码,第0页mov dh,5 ; dh 中放行号mov dl,12 ; dl 中放列号int 10hok: mov ax,4c00hint 21h
code ends
end start

功能 09H 在光标位置显示字符
| INT 10H | 显示服务 Video Service |
|---|---|
功能09H | 在当前光标处按指定属性显示字符 |
| 参数 | AH=功能号 09H AL=字符内容BH=显示页码BL=颜色属性CX=字符重复个数 |
| 返回 | 无 |
assume cs:code
code segmentstart: mov ah,2 ; 设置光标位置mov bh,0 ; 显示页码,第0页mov dh,5 ; dh 中放行号mov dl,12 ; dl 中放列号int 10hmov ah,9 ; 在光标位置显示字符mov al,'a' ; 字符内容mov bl,11001010b ; 颜色属性mov bh,0 ; 显示页码mov cx,20 ; 字符重复个数int 10hok: mov ax,4c00hint 21h
code ends
end start

13.7 DOS 中断例程应用(INT 21H)
在8086架构下,int 21h是DOS操作系统为应用程序提供的一种系统API。
通过调用int 21h并设置不同的AH寄存器值,程序员可以请求执行多种操作,如:文件操作、设备I/O、内存管理等。
这些中断服务例程相当于DOS系统的函数库,使得应用程序能够与操作系统进行交互和访问底层资源。
功能 4CH:返回码方式的终止进程
| INT 21H | DOS 中断例程 |
|---|---|
功能 4CH | 终止程序的执行,并可返回一个代码 |
| 参数 | AH=功能号 4CHAL=返回值 |
| 返回 | 无 |
mov ah,4ch ; 调用 4ch 号功能
mov al,00h ; 返回值
int 21h
功能 09H:输出一个字符串到标准输出设备上
| INT 21H | DOS 中断例程 |
|---|---|
功能09H | 输出一个字符串到标准输出设备上。待显示的字符串以$作为其结束标志 |
| 参数 | AH=功能号09H DS:DX=待输出字符的地址 |
| 返回 | 无 |
assume cs:code
data segmentdb 'Welcome to masm','$'
data endscode segmentstart: mov ah,2 ; 设置光标位置mov bh,0 ; 第0页显示mov dh,5 ; dh 中放行号mov dl,12 ; dl 中放列号int 10hmov ax,datamov ds,axmov dx,0 ;ds:dx指向字符串的首地址 data:0mov ah,9int 21hok: mov ax,4c00hint 21h
code ends
end start

实验 13 编写、应用中断例程
《汇编语言》- 读书笔记 - 第13章-实验13编写、应用中断例程
参考资料
DOS 中断参考手册
相关文章:
《汇编语言》- 读书笔记 - 第13章-int 指令
《汇编语言》- 读书笔记 - 第13章-int 指令 13.1 int 指令13.2 编写供应用程序调用的中断例程中断例程:求一 word 型数据的平方主程序中断处理程序执行效果 中断例程:将一个全是字母,以0结尾的字符串,转化为大写主程序中断处理程序…...
深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例
条件语句 用于根据不同的条件执行不同的操作。Go中的条件可以是真或假。Go支持数学中常见的比较运算符: 小于 < 小于等于 < 大于 > 大于等于 > 等于 不等于 ! 此外,Go还支持常见的逻辑运算符: 逻辑与 && 逻辑或…...
大数据和机器学习在气象预报中的应用-张平文院士
报告链接:张平文院士 -- 大数据和机器学习在气象预报中的应用_哔哩哔哩_bilibili...
C#高级:Winform桌面开发中DataGridView的详解
一、每条数据增加一个按钮,点击输出对应实体 请先确保正确添加实体的名称和文本: private void button6_Click(object sender, EventArgs e) {//SQL查询到数据,存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…...
java八股文复习-----2024/03/05----基础---反射,动态代理。序列化
来源一 大彬八股文 来源二 2023 20W字八股文 2024秋招八股文 1.Java创建对象有几种方式? Java创建对象有以下几种方式: 用new语句创建对象。使用反射,使用Class.newInstance()创建对象。调用对象的clone()方法。运用反序列化手段&#x…...
【人工智能】Anthropic发布强大的Claude3对齐GPT-4,大模型杂谈个人感想
北京时间3月5日,人工智能创业公司Anthropic宣布,推出其突破性的Claude 3系列模型。Claude 3系列包含三个子模型,分别为Claude 3 Haiku、Claude 3 Sonnet和Claude 3 Opus,它们提供不同程度的智能、速度和成本选择,以满足…...
基于openKylin与RISC-V的MindSpore AI项目实践
项目目标: 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型,并在RISC-V平台上进行训练和推理。根据RISC-V的特性,对MindSpore框架进行必要的优化。 目录 项目目标: 训练模型 编写训练代码,设…...
【牛客】VL64 时钟切换
描述 题目描述: 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。 信号示意图: 波形示意图: 输入描述: clk0 clk1为时…...
Java设计模式——桥连模式
桥接模式简单来说就是通过将抽象部分和具体部分分离,使它们可以独立地变化。如果你的一个类存在多个变化维度(如抽象和具体的实现)。若使用继承来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。并且&…...
数据结构与算法:堆排序和TOP-K问题
朋友们大家好,本节内容来到堆的应用:堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序,冒泡排序,快速排序(qsor…...
【NR 定位】3GPP NR Positioning 5G定位标准解读(三)
目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备(UE) …...
文件操作与IO(3) 文件内容的读写——数据流
目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本: 第二个带有byte数组的版本: 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本: 第二个写入整个数组版本: …...
《PyTorch深度学习实践》第十一讲卷积神经网络进阶
一、 1、卷积核超参数选择困难,自动找到卷积的最佳组合。 2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义…...
Ansible的playbook的编写和解析
目录 什么是playbook Ansible 的脚本 --- playbook 剧本 实例部署(使用playbook安装启动httpd服务) 1.编写一个.yaml文件 在主机下载安装http,将配置文件复制到opt目录下 运行playbook 在192.168.17.77主机上查看httpd服务是否成功开启…...
[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”
已经被VScode ssh毒死好几次了,都是执行命令意外中断,然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器,VSCode可以连上了, 系统ssh还是不行,报错“kex_exchange_identification: read: Connecti…...
Mybatis-Plus——04,自动填充时间(新注解)
自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…...
【动态规划入门】最长上升子序列
每日一道算法题之最长上升子序列 一、题目描述二、思路三、C代码 一、题目描述 题目来源:LeetCode 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 输入格式 第一行包含整数 N。 第二行包含 N个整数,表示完整序列。 输出格式 输出一个整数…...
LabVIEW眼结膜微血管采集管理系统
LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统,以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能,有效缩短了图像采集时间,提高了图像质量&#…...
通过GitHub探索Python爬虫技术
1.检索爬取内容案例。 2.找到最近更新的。(最新一般都可以直接运行) 3.选择适合自己的项目,目前测试下面画红圈的是可行的。 4.方便大家查看就把代码粘贴出来了。 #图中画圈一代码 import requests import os import rewhile True:music_id input("请输入歌曲…...
【Python】-----基础知识
注释 定义:让计算机跳过这个代码执行用三个单引号/双引号都表示注释信息,在Python中单引号与双引号没有区别,但必须是成对出现 输出与输入 程序是有开始,有结束的,程序运行规则:从上而下,由内…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
