第3天 导入32位模式并导入C语言

1.制作真正的IPL

本次修改的内容为:

; 程序主体
entry:MOV AX, 0           ; 初始化寄存器MOV SS, AXMOV SP, 0x7c00MOV DS, AX
; 读取磁盘MOV AX, 0x0820MOV ES, AXMOV CH, 0           ; 柱面0MOV DH, 0           ; 磁头0MOV CL, 2           ; 扇区2MOV AH, 0x02        ; 读取软盘/硬盘MOV AL, 1MOV BX, 0MOV DL, 0x00        ; A驱动器INT 0x13            ; 调用BIOSJC  error

首先介绍“INT 0x13”指令,这个指令与硬盘操作有关,详细的信息可以到http://aprilsloan.ys168.com/网址,在“文件”文件夹下的BIOS接口技术参考手册87.4.pdf有关于BIOS功能的介绍。如要对磁盘进行读盘、写盘操作,则需对如下寄存器赋予不同的值:

  • AH = 0x02;(读盘)
  • AH = 0x03;(写盘)
  • AL = 处理对象的扇区数;(只能同时处理连续的扇区)
  • CH = 柱面号;
  • CL = 扇区号;
  • DH = 磁头号;
  • DL = 驱动器号;
  • ES:BX = 缓冲地址;

通过上面对寄存器的说明,就可以知道代码的意思了。我们要读取0号柱面0号磁头的第2扇区,并把读取到内容放在内存中地址为0x8200~0x83ff的地方。

读盘写盘操作得到的返回值为:

①FLAGS.CF == 0:没有错误,AH=0

②FLAGS.CF == 1:有错误,错误号码存入AH内

FLAGS.CF是什么?它表示的是标志寄存器FLAGS的进位标志CF(carry flag),现在还不必了解CF的功能,所以就不讲了。

而下方的JC就与磁盘读取操作产生了联系,JC是“jump if carry”的缩写,意思是如果CF位是1的话,就进行跳转。联系磁盘读取操作的代码,如果磁盘读取错误的话,就跳转到error标签去。

那为什么要用0x8200~0x83ff,而不用0x8000~0x81ff呢?看书去,书上都有。启动区的内容拷贝了一份到0x8000~0x81ff地址中,你敢用这块地方,系统就敢罢工。

下图是软盘的示意图,关于软盘的知识就不在此赘述,多看看书总是能懂的。

error:MOV SI, msgputloop:MOV AL, [SI]ADD SI, 1           ; 给SI加1CMP AL, 0JE  finMOV AH, 0x0e        ; 显示一个文字MOV BX, 15          ; 指定字符颜色INT 0x10            ; 调用显卡BIOSJMP putloopmsg:DB  0x0a, 0x0a      ; 2个换行DB  "load error"DB  0x0a            ; 换行DB  0RESB    0x7dfe-$     ; 填写0x00,直到0x07dfeDB  0x55, 0xaa

接下来这一段是当读取磁盘出错时才会运行的,若是看过我第2天的博客的人应该能看懂这段代码吧,看不懂可以去复习一下。最后会在屏幕上显示"load error",相信你是看不到这个界面的。

最后运行出来不显示什么信息就是对的。


2.试错

软盘并没有那么可靠,有时会发生不能读数据的状况,需要重新读上几遍看是不是真的坏了,于是对代码做出新的调整。(软盘这玩意儿现在都看不到了,这段代码是否有必要添加吗?)

; 读取磁盘MOV AX, 0x0820MOV ES, AXMOV CH, 0           ; 柱面0MOV DH, 0           ; 磁头0MOV CL, 2           ; 扇区2MOV SI, 0           ; 记录失败次数的寄存器retry:MOV AH, 0x02        ; 读取软盘/硬盘MOV AL, 1           ; 1个扇区MOV BX, 0MOV DL, 0x00        ; A驱动器INT 0x13            ; 调用BIOSJNC  fin            ; 没出错的话跳转到finADD SI, 1           ; 将SI加1CMP SI, 5           ; 比较SI与5JAE error           ; SI >= 5时,跳转到errorMOV AH, 0x00MOV DL, 0x00        ; A驱动器INT 0x13            ; 重置驱动器JMP retry

读取磁盘的操作并没有发生什么变化,用SI来记录读取失败的次数。retry标签下前五行代码与上一节的一样。

第六行出现了新的指令JNC,它是无进位跳转(Jump if Not Carry)的缩写,在没有进位的时候才发生跳转。以下是一些短转移指令,我将它们放在一起,方便各位读者整理。

JA/JNBE无符号整数大于时跳转JG/GNLE有符号整数大于时跳转
JAE/JNB无符号整数大于或等于时跳转JGE/JNL有符号整数大于或等于时跳转
JB/JNAE无符号整数小于时跳转JL/JNGE有符号整数小于时跳转
JBE/JNA无符号整数小于或等于时跳转JLE/JNG有符号整数小于或等于时跳转
JE/JZ等于时跳转JNE/JNZ不等于时跳转
JC有进位时跳转JNC无进位时跳转
JO溢出时跳转JNO无溢出时跳转
JP/JPE奇偶性为偶数时跳转JNP/JPO奇偶性为奇数时跳转
JS符号位为“1”时跳转JNS符号位为“0”时跳转

还记得上一节的内容吗?当读取磁盘成功时,CF=0,当读取失败时,CF=1。所以,当成功读取磁盘后,就跳转到fin标签。而读取失败后,将SI加1,与5进行对比,JAE指令的含义如上表所示,当SI大于5,即读取磁盘失败超过5次后,跳转到error标签,否则重置驱动器再次进行读取。

最后执行得到的界面如图:

其实我就是把第一节的图粘贴下来了,毕竟第一节都没出错,第二节就更不会出错了。


3.读到18扇区

再次对代码做出调整:

readloop:MOV SI, 0           ; 记录失败次数的寄存器retry:MOV AH, 0x02        ; 读取软盘/硬盘MOV AL, 1           ; 1个扇区MOV BX, 0MOV DL, 0x00        ; A驱动器INT 0x13            ; 调用BIOSJNC next            ; 没出错的话跳转到nextADD SI, 1           ; 将SI加1CMP SI, 5           ; 比较SI与5JAE error           ; SI >= 5时,跳转到errorMOV AH, 0x00MOV DL, 0x00        ; A驱动器INT 0x13            ; 重置驱动器JMP retrynext:MOV AX, ESADD AX, 0x20        ; 把内存地址后移0x200MOV ES, AX          ; 因为没有ADD ES, 0x20指令,所以以这种方式计算ADD CL, 1           ; 往CL里加1,指定下一个扇区号CMP CL, 18          ; 比较CL与18JBE readloop        ; 如果CL <= 18跳转至readloop

首先是在MOV SI, 0指令前面添加一个标签,取名readloop,这样就能通过条件转移指令跳转到这里进行循环了。

retry的内容并没有改变。在下方添加了next代码段,这里是实现读取到18扇区的关键。在读取完一个扇区之后,更改ES的值,其中0x200=512(1个扇区的大小),给CL加1,读取下一个扇区,JBE指令可以看看上面的表,将CL与18进行比较,如果CL小于或等于18就跳转到readloop读取下一个扇区。

最后得到的界面:

没错,这个图还是粘贴过来的,作者为什么不在读取成功的时候显示个信息呢?


4.读入10个柱面

这一节的代码还是比较简单,让我们看看有什么变化吧。

CYLS    EQU 10...readloop:MOV SI, 0           ; 记录失败次数的寄存器retry:...next:MOV AX, ESADD AX, 0x20        ; 把内存地址后移0x200MOV ES, AX          ; 因为没有ADD ES, 0x20指令,所以以这种方式计算ADD CL, 1           ; 往CL里加1,指定下一个扇区号CMP CL, 18          ; 比较CL与18JBE readloop        ; 如果CL <= 18跳转至readloopMOV CL, 1ADD DH, 1CMP DH, 2JB  readloop        ; 如果DH < 2,则跳转到readloopMOV DH, 0ADD CH, 1CMP CH, CYLSJB  readloop        ; 如果CH < CYLS,则跳转到readloop

唯有next标签下的代码段发生了变化,再读取完第18扇区之后,重置CL为1,将DH加1,更换磁头从第1扇区开始读取,再对DH做对比,如果DH小于2就跳转到readloop继续读扇区。若2个磁头都读完了,再更换柱面读取扇区,直至读完10个柱面后结束。

CYLS EQU 10的意思是CYLS = 10,若是用C语言写的话就是#define CYLS 10,它用来定义常数。

OK,代码的部分就讲完了,下面来运行看看吧。

万年不变的运行界面。。。


5.着手开发操作系统

你以为以前你写的是操作系统?不不不,之前的只是启动区,它被用来把操作系统装载到内存中,现在才是真正的开始。

新建一个文本文档并命名为haribote.nas,并把以下内容输入文档中。

fin:HLTJMP fin

这短小的代码,是不是让人很失望?但学习还是要慢慢来的。

另外,因为新添了文件,需要的Makefile中规定它的编译规则。

ipl.bin : ipl.nas Makefile$(NASK) ipl.nas ipl.bin ipl.lstharibote.sys : haribote.nas Makefile$(NASK) haribote.nas haribote.sys haribote.lstharibote.img : ipl.bin haribote.sys Makefile$(EDIMG)   imgin:../z_tools/fdimg0at.tek \wbinimg src:ipl.bin len:512 from:0 to:0 \copy from:haribote.sys to:@: \imgout:haribote.img

这是Makefile中需要修改的部分。从上我们可以看出,首先要将haribote.nas通过nask转换为haribote.sys,再将ipl.bin和haribote.sys写入镜像中。这就完成了。

用二进制编辑器打开haribote.img,可以发现在0x2600地址附近保存着文件名。在0x4200地址附近,看到“F4 EB FD”。

以上内容可以总结为:一般向一个空软盘保存文件时,

(1)文件名会写在0x2600以后的地方;

(2)文件的内容会写在0x4200以后的地方。

要记住这两点内容哦,以下的某些地方会用到它们的。

好,再次运行代码。


6.从启动区执行操作系统

要怎么才能执行磁盘镜像上0x4200地址的程序呢?程序是从启动区开始的,把磁盘内容转载到内存0x8000地址上,所以磁盘0x4200出的内容就应该位于内存0x8000+0x4200=0xc200地址中。知道了这个,我们就往代码里添点东西,haribote.nas中的代码变为:

    ORG 0xc200      ; 把程序转载到0xc200地址中fin:HLTJMP fin

这代码一如既往地简洁。接下来还需要对ipl.nas进行处理:

    CMP CH, CYLSJB  readloop        ; 如果CH < CYLS,则跳转到readloopJMP 0xc200          ; 读取完磁盘后执行haribote.syserror:  ; 打印错误信息MOV SI, msg

添加JMP 0xc200这句代码。意思是当ipl.nas中读取磁盘操作结束后就跳转到0xc200地址。

最后运行代码。

这图片我都粘贴5次了,下一节中终于要出现新界面了。


7.确定操作系统的执行情况

这次就让我们切换一下画面模式吧。代码如下:

; haribote-os
; TAB = 4ORG 0xc200          ; 将程序加载到这个内存地址MOV AL, 0x13        ; VGA显卡,320x200x8位彩色MOV AH, 0x00INT 0x10fin:HLTJMP fin

INT 0x10在我们显示字符的时候就出现过,这是有关显示服务的BIOS功能,下面介绍一下有关的寄存器配置:

  • AH = 0x00; 设置显卡模式
  • AL = 模式: (省略了一些不重要的模式)                                                                                                                                          0x03: 16色字符模式,80 * 25                                                                                                                                                      0x12: VGA图形模式,640 * 480 * 4位彩色模式,独特的4面存储模式                                                                                        0x13: VGA图形模式,320 * 200 * 8位彩色模式,调色板模式                                                                                                    0x6a: 扩展VGA图形模式,800 * 600 * 4位彩色模式,独特的4面存储模式(有的显卡不支持这个模式)
  • 返回值:无

参照说明,我们采用的是8位彩色模式,可以使用2^8=256种颜色。

此次还修改了其他一些地方。首先将ipl.nas的文件名变成了ipl10.nas(不要忘记在Makefile中更改名字哦)。这是为了提醒大家这个程序只能读入10个柱面。另外,想要吧磁盘装载内容的结束地址告诉给haribote.nas,所以我们在JMP 0xc200之前,加入了一行命令,将CYLS的值写到内容地址0x0ff0中。

    MOV [0x0ff0], CH    ; 将读取的柱面数保存在这个地址中JMP 0xc200          ; 读取完磁盘后执行haribote.sys

如果运行正常的话,画面会变为一片漆黑,来运行看看吧。

虽然画面终于有变动了,但黑漆漆一片还是不好看,要想制作好看点的界面还得等到下一章。


8. 32位模式前期准备

这节是为了C语言开发做准备,作者提供的C编译器只能生成32位模式的机器语言。这个32位指的是CPU的模式,不同模式使用的寄存器不一样,所以一个模式的机器语言在另一个模式下不能运行。另外,32位模式下可以使用的内存容量远远大于1MB,还具有CPU的自我保护功能。

BIOS是用16位机器语言写的,使用32位模式就不能使用BIOS了,所以全部要放在开头先做。

下面我们来修改代码吧,这次只修改haribote.nas。

; 有关BOOT_INFO
CYLS    EQU 0x0ff0      ; 设定启动区
LEDS    EQU 0x0ff1
VMODE   EQU 0x0ff2      ; 关于颜色数目的信息,颜色的位数
SCRNX   EQU 0x0ff4      ; 分辨率的X(screen x)
SCRNY   EQU 0x0ff6      ; 分辨率的Y(screen y)
VRAM    EQU 0x0ff8      ; 图像缓冲器的开始地址ORG 0xc200          ; 将程序加载到这个内存地址MOV AL, 0x13        ; VGA显卡,320x200x8位彩色MOV AH, 0x00INT 0x10MOV BYTE [VMODE], 8 ; 记录画面模式MOV WORD [SCRNX], 320MOV WORD [SCRNY], 200MOV DWORD [VRAM], 0x000a0000; 用BIOS取得键盘上各种LED指示灯的状态MOV AH, 0x02INT 0x16MOV [LEDS], AL

首先我们定义了几个变量的值,它们的用处已经写在注释中。在设置好显卡模式之后,开始向内存地址存入一些数据,唯一需要说明的是向VRAM地址存入0xa0000,可以从内存图中看出0xa0000图像视频缓冲器的开始地址,之后可以通过指针很方便的修改其中的数据。

最后是调用BIOS功能。INT 0x16代表的是调用键盘的功能。下面介绍一些寄存器参数:

  • AH = 0x02; (Shift Status)
  • 返回值:AL = 当前键盘状态情况

AL中各位表示的含义如下表所示:

Bit含义
7插入上锁
6大写锁定上锁
5数字锁定上锁
4滚动锁定上锁
3Alt键按下
2Ctrl键按下
1左Shift键按下
0右Shift键按下

目前AL中的数据还用不到,这就当做扩展知识介绍给大家了。

下面来运行程序看看吧。

一如既往的黑,你以为我会告诉你这是从上面粘贴下俩的吗?


9.开始导入C语言

终于要开始我最喜欢的C语言了。

首先把haribote.nas改名为asmhead.nas(别忘了也要在Makefile里面改哦),为了能够调用C语言写的程序,还要添加一点点代码,放心,你看不懂这段代码的,作者也认为你看不懂,他表示以后再讲,我也就偷懒了。

新建文件并命名为bootpack.c,以下是内容:

void HariMain(void)
{
fin:/* 这里想写上HTL,但C语言中不能用HTL! */goto fin;
}

还是一个很简单的死循环语句。这里的主函数名是HariMain,和C语言有些区别。C语言的基本语法不会多讲,只针对语言的逻辑结构和意义进行说明。

bootpack.c编程机器语言的过程比较复杂,而且书上有,就不赘述了。另外,Makefile也不进行讲解了,反正你们也有源码,复制粘贴多省事。

以下是运行的界面:

我没复制粘贴,你别乱说。


10.实现HLT

作者真的是对hlt这个指令情有独钟。让我们再新建一个文件,命名为naskfunc.nas,今后会在这里写汇编函数,以下是代码:

; naskfunc
; TAB = 4[FORMAT "WCOFF"]            ; 制作目标文件的模式
[BITS 32]                   ; 制作32位模式用的机器语言; 制作目标文件的信息
[FILE "naskfunc.nas"]       ; 源文件名信息GLOBAL  _io_hlt         ; 程序中包含的函数名; 以下是实际的函数
[SECTION .text]             ; 目标文件中谢了这些之后再写程序
_io_hlt:    ; void io_hlt(void);HLTRET

注意要在函数名之前加上“_”,否则就不能很好地与C语言函数链接。需要链接的函数名都要用GLOBAL指令声明。

下面是bootpack.c里面的内容:

/* 告诉C编译器,有一个函数在别的文件里 */
void io_hlt(void);void HariMain(void)
{
fin:io_hlt();   /* 这里想写上HTL,但C语言中不能用HTL! */goto fin;
}

这样就写好了,内容很简单,相信你一定能看懂。另外也不要修改Makefile,赶紧来运行看看吧。


第3章的内容就到此结束了,这章的内容比较多,请大家好好理解。这篇博客花了好几天才写完,在内容的说明中花费了最多的时间,我也不知道自己是否清晰的解释了代码的含义,若是不清晰,很高兴大家在下方评论指正。愿与诸君能继续看第四章的内容,虽然我一个字都还没写,估计要再等半个月才写得出来吧,反正没几个人看我博客,没人催更,就慢慢拖吧。

 

 

 

 

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

相关文章

  1. 解决ios13版本echarts的tooltip在页面滚动时出现白色线条问题

    在做开发过程中,发现在ios手机上滑动时,echarts的tooltip会放置在柱子的下层并出现白条,刚开始以为是层级问题,通过给tooltip添加层级进行解决,发现设置层级并不能解决该问题,最后查看api发现可通过设置属性进行实现,解决方案如下:设置tooltip的position,即重置toolti…...

    2024/5/10 13:15:17
  2. 模拟+贪心

    零件加工任务的安排一 Description 有个国有中型企业,接到一批需要加工零件的订单,员工们非常高兴,可是高兴之后却发现问题了,原来这家企业能够加工这批零件的机床有限,如果仅仅为了这批加工任务而新添机床的话,那么既不合算也不必要,因为加工完这批零件后很可能这些机床…...

    2024/5/10 8:49:41
  3. 《alios things开发实战系列》第二篇:文件系统(二):FatFS文件系统

    不想去成为一个伟大的程序员,只想成为一个具有良好习惯的优秀程序员。一、什么是FATFSFatFs是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。其特点如下:(1)DOS/Windows兼容的FAT/exFAT文件系统(2)平台独立性,容易使用(3)程序代码量少,…...

    2024/5/10 8:48:48
  4. python爬虫解析数据时:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    最近在爬取每个网站的数据,出现:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误,具体报错如下:我知道原因是json编码错误,我要编码的变量是html变量,代码如下(打印的部分代码已加粗): #coding=utf8 import requests import time from qu…...

    2024/4/29 11:23:34
  5. Git极简入门

    从远程仓库克隆文件进自己的硬盘:windows:(使用git bash) 1. cd ~./.ssh 第一次会提示无这个文件夹 2. ssh-keygen -t rsa -C "youremail@example.com" 会让你输入key文件名字,随便输入, 第二次,第三次输入password 的时候直接回车可免密。你需要把邮件地址…...

    2024/5/10 7:03:52
  6. Nginx 流控搞不好,背锅跑路少不了

    前几天,以前一个老同事在微信上和我吐槽,一次周未休息,突然收到公司服务器告警,有一台服务器挂掉了,导致影响一部分公司业务的运行,事后查看发现原来是前端Nginx流控配置的不够科学,不得不背上一锅,影响了这个月的KPI考核和当年中的加薪指标。可见这Nginx流控的配置还是…...

    2024/5/10 5:04:35
  7. 顶尖的复音合成器 – Reveal Sound Spire v1.1.17 WiN

    Reveal Sound Spire v1.1.17-win | 165M Reveal Sound的Spire是一款软件复音合成器,结合了软件和硬件合成器的最佳机会。强大的声音调音模块,漂亮的音乐界面和灵活的架构相结合,为这款多功能合成器提供了无与伦比的可用性。 聆听audoi演示和perusinq的礼物,您可能会倾向于将…...

    2024/4/29 11:23:22
  8. 众多顶级交易所纷纷看好Filecoin,这样的项目你还犹豫什么?

    Filecoin主网虽未上线,但Filecoin的期货却早在2017就已上线。近期,随着二阶段测试网的稳步推进及主网上线时间临近,激发了Filecoin期货价的一波小行情。除了期货客观的涨势外,临近上线交易所也在暗自布局。今天至联云就带大家盘点下主网上线后有哪些交易所将支持FIL交易,又…...

    2024/4/29 11:23:18
  9. 至联云给你分享已经上线Filecoin期货的交易所

    1.gate.io gate.io 大门国际站创立于2013年,国内比较靠谱的交易所之一。创办至今,已为来自全球超过130个国家的数百万用户,提供了近百种优质区块链资产品类的交易和投资服务。 它拥有超级防卫SSL链接,离线比特币钱包技术,即时区块链资产存取功能,多币种地址共享技术,多重…...

    2024/5/10 19:13:13
  10. 如何选择自动化测试和软件开发

    软件测试和软件开发是产品研发中同样重要的两个板块,无论在哪个领域发展都可以给你实现价值的空间。而且从目前的行业发展情况来看,测试人员必须要懂一些开发知识,而开发人员也必须要会一些基本的测试,并且在软件测试领域中的“测试开发“岗已经变得越来越重要,所以它们之…...

    2024/5/10 10:03:47
  11. 合约交易所使用手册

    简介交易所后台管理系统,主要包括三大功能。后台系统的管理模块,交易所系统的管理模块和交易所业务的管理模块。主要的功能划分见下图后台系统管理模块主要包括后台管理系统,主要有团队部门管理,团队的角色岗位管理,团队人员权限管理。已经系统字典管理和相关得到参数,还…...

    2024/5/10 16:25:58
  12. selenium配置chrome浏览器的选项

    在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用。相对应的,当我们用chrome浏览器爬取网站时,可能需要对这个chrome做一些特殊的配置,以满足爬虫的行为。…...

    2024/4/29 11:23:02
  13. Android studio开发APP

    1. 创建HelloWorld项目2. 修改阿里云镜像源 这一步一定要需要,不然的话你需要编译很久,因为在sync的过程中要下载很多的资源是在外网的,我们这里使用阿里云像源就会很快。修改后只对本项目有效:第一处代码 maven { url http://maven.aliyun.com/nexus/content/groups/publi…...

    2024/4/29 11:22:58
  14. 数据可视化【一】准备工作

    本博客是我学习Curran Kelleher老师数据可视化课程的笔记,感兴趣的小伙伴可以点击这里学习。 three cores of data visualization:analysis design construction推荐书籍《visualization analysis & design》 JS学习尽量使用const 可以通过()=>{}的方式声明函数,不需要…...

    2024/5/4 1:03:30
  15. 想要一款好用的mac电脑数据恢复软件?

    想要一款好用的mac电脑数据恢复软件?这是一款非常好用的Mac电脑数据恢复软件。UltData Mac破解版界面简约、功能强大、安全实用,支持超过550种文件类型,将丢失/删除/格式化的文件恢复到Mac是一项非常简单的任务。可以满足用户的众多数据恢复需求。本站现在提供的是UltData M…...

    2024/4/29 11:22:51
  16. 浅谈剑指Offer

    相遇 如今的程序猿相关产业链已越发成熟。一个行业的成熟必然催生培训机构新专业的形成。培训机构成功扮演了工厂的角色。尽管培训机构能短时间制造出程序猿的外衣,但也由于是短时间制成,外衣的质量也必然有些许不尽人意。如何提升外衣的质量,从而提升获得Offer的机率呢。这…...

    2024/4/29 11:22:45
  17. 内网穿透:最牛逼最好用的完全开源的内网穿透工具frps

    前期准备:首先你要有一台云服务器或者VPS,有公网ip或域名都可以,内网主机(自己的电脑)一台。服务器或者VPS、域名的购买,本文不赘述。本文所用的服务端是我拿便宜的腾讯云Linux系统,客户端是windows7系统。服务端(Linux)搭建步骤1:下载服务端的frp:https://github.com/…...

    2024/4/29 11:22:43
  18. 工业物联网中的无线充电

    微波无线能量传输系统的构建。(图片来源:TransferFi)工业4.0,智能家居,智能建筑。 这三种技术趋势有一个共同点:它们并没有真正发挥作用。其中一个原因是,成功的实施需要无数不同的传感器和联网 设备,所有这些都需要能量。在工业物联网(IIoT)中,电缆供电非常昂贵。A…...

    2024/4/29 11:22:38
  19. Dynamic programming -- 背包问题

    文章目录装箱问题背包01背包背包问题01背包输出方案01背包问题Bone Collector完全背包完全背包问题Piggy-Bank多重背包悼念512汶川大地震遇难同胞——珍惜现在,感恩生活滑动窗口问题二维费用的背包问题二维费用的背包问题分组背包分组背包问题 装箱问题 装箱问题 题目描述 有一…...

    2024/4/29 11:22:36
  20. ES6学习笔记(3)——变量的解构赋值

    ES6 许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)1. 数组解构赋值 let [a, b, c] = [1, 2, 3];let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3let [ , , third] = ["foo", "bar", "…...

    2024/4/29 11:22:30

最新文章

  1. React 学习-5

    React 条件渲染: 与js中的写法一致 注意&#xff1a;在 JavaScript 中&#xff0c;true && expression 总是返回 expression&#xff0c;而 false && expression 总是返回 false。 因此&#xff0c;如果条件是 true&#xff0c;&& 右侧的元素就会被渲…...

    2024/5/10 20:13:56
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/9 21:23:04
  3. JSON格式转换

    文章目录 1. JSON 格式2. 细节 1. JSON 格式 实体类格式&#xff1a; public class Student {public string name {get; set;}public int age {get; set;} } public class Classs {public string teacher {get; set;}public List<Student> students {get; set;} }JSON格…...

    2024/5/10 14:26:20
  4. 理解 Golang 变量在内存分配中的规则

    为什么有些变量在堆中分配、有些却在栈中分配&#xff1f; 我们先看来栈和堆的特点&#xff1a; 简单总结就是&#xff1a; 栈&#xff1a;函数局部变量&#xff0c;小数据 堆&#xff1a;大的局部变量&#xff0c;函数内部产生逃逸的变量&#xff0c;动态分配的数据&#x…...

    2024/5/10 0:16:17
  5. linux系统编程 线程 p1

    线程 1.线程的概念2.线程的创建/终止/取消&#xff0c;栈的清理2.1线程创建2.2线程终止2.3 栈的清理 1.线程的概念 线程就是一个正在运行的函数。 posix线程是一套标准&#xff0c;而不是实现。 openmp线程。 线程标识&#xff1a;pthread_t &#xff08;linux环境下是整形数&…...

    2024/5/10 18:53:46
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/10 1:36:26
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/10 16:45:57
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/10 16:45:56
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/10 2:07:45
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/10 8:07:24
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/10 16:45:52
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/10 8:16:30
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/10 2:07:43
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/10 2:07:43
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/10 16:45:47
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/10 16:45:46
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/9 19:47:07
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/10 10:17:11
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/10 2:07:41
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/10 16:37:19
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/10 15:01:36
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/9 16:54:42
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/10 1:31:37
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/10 9:24:29
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/10 10:40:03
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57