RadASM环境,win32汇编入门教程之二
;win32汇编环境,RadAsm入门教程之二
;前面我们已经学了教程一,生成了第一个软件。那么让我们继续我们的学习旅程。本教程讲解一下基本窗口模版的原理。让我们打开RadASM后,双击右侧的ABC.Asm文件,一点点研究。
;首先,我们写了很多代码,但需要在边上写个备注什么的,这个时候用分号;来标明,是英文模式下的分号,不是中文输入法下的。你写的时候看到会变黄就可以了,不会变黄的不行。分号后面的不会被编译
;然后,我们大概的把教程一里面的内容理解一下。
;现在,我们把教程一的代码复制过来,再把解释写在后面。我们看着解释来理解。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA
ClassName db "SimpleWinClass",0
AppName db "窗口程序的模版",0
.DATA?
hInstance HINSTANCE ?
CommandLine LPSTR ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.CODE
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess, eax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,100,100,400,600, NULL,NULL,hInst, NULL
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow
invoke UpdateWindow, hwnd
.while TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.break .if (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.endw
mov eax,msg.wParam
ret
WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
.386 ;这句的意思是说兼容到最早的386时代的指令集。就是说386时代的系统也支持它运行。你换成486或586也可以。
.model flat,stdcall ;flat指扁平模式,一种内存展开方式,知道就行,不用理解太深。stdcall指在函数中,参数由右至左压入堆栈。
option casemap:none ;casemap:none指区分大小写。
include windows.inc ;以下的是头文件和库文件。里面包含着一些函数或数据类型的的基本定义。它一般是微软公司提供的,帮我们省很多事儿。自已写头文件也可以。
include user32.inc ;include是包含头文件的指令。includelib是包含库文件的指令。inc的是头文件,lib的是库文件。
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD ;这是函数声明,只是声明,没有实际内容,就是说一声,有这个函数,函数可能在后面的某个地方。如果没有声明,在使用函数的时候,必须在前面有明确的内容。有时候,写着写着就乱了,忘了次序。所以一般先声明一下,就不用管在哪个前面,哪个后面了。
;WinMain是函数的名字,这个其实不重要。它只是一个代号,你换其它名字也可以。但后和它一样名字的要同时改。我们一般不动它。
;proto的意思是这个函数的内容只能自已用,不能被别的程序访问。:DWORD有4个,是这个函数有4个参数,都是DWORD型的,即是4字节型的。每个字节8位,就是32位了。常说的32位系统就是这样来的,相当于跑道上并列可以站32位选手。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA ;下面是数据区,数据分成好多种。有些可以改变,有些不可以改变。有些要初始化,就是一开始就定下来内容。有些不用初始化,可以在运行时随时改变。
ClassName db "SimpleWinClass",0 ;像这种就是初始化的内容。db是dword byte的缩写,就是字符串数组。后面有?的就是没有初始化的。ClassName定义的是类名,就是给这个窗口起个祖宗名,由它可以生成儿子类窗口,儿子类可以生成孙子类窗口。这个暂时还用不上,暂时有个祖宗名就行了。名字自已取。
AppName db "窗口程序的模版",0 ;这段话的意思是设置程序的标题栏。
.DATA?
hInstance HINSTANCE ? ;模块句柄。就是运行时,在整个电脑中,这个程序的的数字代码。相当于整栋楼中,你的门牌号。HINSTANCE是模块,是dd的别一种说法,其实也是dd类,即dword型,4字节。你把HINSTANCE改为dd也一样的。
CommandLine LPSTR ? ;命令行指针。LPSTR是指针的意思,和上面HINSTANCE一样,故意取个新名,好理解。其实也是dword型,即dd型。这个是为了在低版本的系统上运行不了时,显示出来的字符。显示出来的意思是,你的系统太落后了,运行不了。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.CODE ;上面的是数据区,从这儿开始是代码区了。
start: ;代码段开始
invoke GetModuleHandle, NULL ;得到自已程序的门牌号。不用管门牌号哪来的,是系统自动生成或调配的。
mov hInstance,eax ;把门牌号给一个叫hInstance的,后面需要时好调用它
invoke GetCommandLine ;得到命令行内容。
mov CommandLine,eax ;把命令行的地址给CommandLine,后面用时好调用它。命令行的内容由上面的GetCommandLine函数由电脑系统提供。
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT ;调用WinMain函数。这个函数的实体在后面,因为前面声明了,所以实体可以放在后面。把4个参数的值传给它,再运行到函数里面。
invoke ExitProcess, eax ;退出进程。就是告诉电脑,我要离开了,电脑会把占用的资源收回之类的工作。
;以上就是主要程序,下面的就是主要程序包含的又要自已写的内容。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD ;这里别看这么长,其实就是4个参数。proc是指函数过程,它和后面的endp成一对,两者之间的就是此函数的具体内容。这4个参数的值在前面调用它时已经得到了。比如CmdShow的值就是SW_SHOWDEFAULT,默认显示模式的意思。那SW_SHOWDEFAULT是什么?这个在头文件里预定义了。像这些大写字母类的代号,很多都是预定义值,可以在头文件里面搜出来看看,具体值是多少。
LOCAL wc:WNDCLASSEX ;定义一个叫wc的WNDCLASSEX结构变量。什么叫结构,就是要一起用的东西打包在一起,起一个共用的名字。比如家是结构,爸爸是成员,妈妈是成员。然后赋值给爸爸叫张三。
LOCAL msg:MSG ;定义一个叫msg的MSG结构变量。这个是消息结构,很重要,是核心理念,讲起来就长了,后面再慢慢讲解。
LOCAL hwnd:HWND ;定义一个叫hwnd的主窗口句柄。这个代表着显示出来的主窗口。
mov wc.cbSize,SIZEOF WNDCLASSEX ;让wc结构变量知道有多少字节。相当于家这个结构,要多大的面积。
mov wc.style, CS_HREDRAW or CS_VREDRAW ;让wc结构设成什么风格的,比如欧式家居。
mov wc.lpfnWndProc, OFFSET WndProc ;把窗口函数的地址给wc结构。相当于告诉派出所,你家的地址在哪
mov wc.cbClsExtra,NULL ;备用的空间,设为空,就是0的意思。可以理解为家这个结构,要留多少空间给未来的孩子。
mov wc.cbWndExtra,NULL ;备用空间,为将来留用的,设为空。
push hInstance ;把hInstance压入堆栈。堆栈相当于一个本程序外的桶,电脑把hInstance压入桶。堆栈就是桶,而桶是后面进的先出来,不是先进去先出来。
pop wc.hInstance ;把hInstance弹出堆栈,弹到wc的hInstance里去。这里为什么不像上面那样赋值,因为wc的成员hInstance和上面定义的hInstance同名,所以用这个取巧的方式。其实像上面那样赋值也可以的。
mov wc.hbrBackground,COLOR_WINDOW ;设置这个程序的背景色
mov wc.lpszMenuName,NULL ;设置它的菜单,如果有的话,这里没有,就设为NULL,即为0的意思
mov wc.lpszClassName,OFFSET ClassName ;把类名地址给wc,就是前面说的祖宗名在内存里的地址给wc,wc才能找到这个名字 SimpleWinClass
invoke LoadIcon,NULL,IDI_APPLICATION ;加载图标进来
mov wc.hIcon,eax ;把图标句柄给wc的成员hIcon,显示在程序标题栏的前面。
mov wc.hIconSm,eax ;把上面图标压小了给wc的成员hIconSm,相当的一个图标显示在2个地方,一个是程序标题栏前面的图标,一个是最小化时显示的图标。这个是最小化时的图标。
invoke LoadCursor,NULL,IDC_ARROW ;加载光标。就是鼠标的样子。
mov wc.hCursor,eax ;把光标句柄给wc的成员hCursor
invoke RegisterClassEx, addr wc ;注册这个类。把addr wc告诉电脑,就是把wc的地址告诉电脑。即把祖宗名告诉电脑,并让电脑根据上面的参数作好准备。
invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,100,100,400,600, NULL,NULL,hInst, NULL ;调用系统内的函数CreateWindowEx生成窗口,并把参数传进去。参数是属于哪个新祖宗,标题栏写什么,显示模式怎么样,坐标是哪儿开始,有多长,有多宽等。
mov hwnd,eax ;上面的函数返回值在eax里,把它的值给hwnd,后面调用时才能知道主窗口在哪儿。
invoke ShowWindow, hwnd,CmdShow ;显示主窗口
invoke UpdateWindow, hwnd ;更新窗口的数据。比如移动了或被其它窗口挡住又重新恢复,里面的数据需要更新一下。
.while TRUE ;开始消息循环一直到电脑收到该程序结束的消息。即后面的PostQuitMessage函数来时,告诉电脑结束了。
invoke GetMessage, ADDR msg,NULL,0,0 ;消息循环机制相当于电脑是中间人。你点一下鼠标,就产生消息,电脑根据你点鼠标这个消息,把你点的位置,怎么点的,比如双击等信息打包,发给这个程序。
.break .if (!eax) ;如果收到WM_QUIT消息,即退出消息,则跳出循环
invoke TranslateMessage, ADDR msg ;假如设定某个按键代表不同的功能,比如设定某些键当作快捷键,例如设定CTRL+E为退出,则当按这两键时,转化为WM_QUIT消息给电脑
invoke DispatchMessage, ADDR msg ;把你的消息转发给下面的WndProc窗口过程,再等它处理完后返回
.endw
mov eax,msg.wParam ;把消息码给eax寄存器,当作返回值
ret
WinMain endp ;上面的内容基本上就是模版,在窗口程序中基本上一样。大概理解就行,主要我们还是要添加下面窗口过程的内容。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ;这个叫窗口过程函数。每个窗口或控件都有这样的函数。有些控件它自已设好了默认的处理内容,大部分功能都有了,所以不用显示出来。当然也可以显示出来,那就要自已重载它,就是自已再写一遍。比如,按钮控件一般直接用,里面已经有基本功能。但你想画个奇怪形状的按钮,那只能重载它,重绘它,这将是一个复杂的过程。
.if uMsg==WM_DESTROY ;窗口函数将处理许多的消息,比如初始化,比如移动了窗口,比如重新画出来等等。这个WM_DESTROY是退出消息,意思是当你点右上角的X时,就产生WM_DESTROY消息,下面就调用PostQuitMessage函数,插入一条退出消息给消息循环队列。
invoke PostQuitMessage,NULL ;调用发送退出消息函数
.else ;如果这个窗口没有任何消息,则默认处理。就是不管它,把CPU时间给别的程序。
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax ;把eax寄存器清零,即eax为零,当作返回值。函数都需要返回值,除非你想让它进到里面不再出来。如果这样,意味着卡死。
ret ;返回命令
WndProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start ;告诉编译程序,代码段部分到这里结束了。
相关文章:
RadASM环境,win32汇编入门教程之二
;win32汇编环境,RadAsm入门教程之二 ;前面我们已经学了教程一,生成了第一个软件。那么让我们继续我们的学习旅程。本教程讲解一下基本窗口模版的原理。让我们打开RadASM后,双击右侧的ABC.Asm文件,一点点研究。 ;首先,我…...
mysql开启gtid并配置主从
默认主从都开启了bin log. 1.主从都在/etc/my.cnf中加入并重启服务 gtid_mode ON enforce_gtid_consistency ON 2.在主库创建用户并授权 create user slave identified with mysql_native_password by 123456 mysql>GRANT REPLICATION SLAVE ON *.* to slave% identified…...
RAG科普文!检索增强生成的技术全景解析
RAG 相关技术的八个主题:https://pub.towardsai.net/a-taxonomy-of-retrieval-augmented-generation-a39eb2c4e2ab 增强生成 (RAG) 是塑造应用生成式 AI 格局的关键技术。Lewis 等人在其开创性论文中提出了一个新概念面向知识密集型 NLP 任务的检索增强生成之后&…...
【Sceneform-EQR】实现3D场景背景颜色的定制化(背景融合的方式、Filament材质定制)
写在前面的话 Sceneform-EQR是基于(filament)扩展的一个用于安卓端的渲染引擎。故本文内容对Sceneform-EQR与Filament都适用。 需求场景 在使用Filament加载三维场景的过程中,一个3D场景对应加载一个背景纹理。而这样的话,即便…...
python自动化测试之统一请求封装及通过文件实现接口关联
一、接口文档怎么看? http://www.aaa.com/api.php?sindex/index&applicationapp&application_client_typeweixi n&tokentokenvalue&ajaxajax 参数解释: http 协议 www.aaa.com IP和端口 api.php 接口的地址 sindex/index 接口名称以 …...
Redis笔记
文章目录 Redis笔记通用命令get和setkeysexistsdelexpirettlRedis的key过期策略定时器的实现原理type 持久化RDB(Redis DataBase)---定期备份bgsave AOF(Append Only File)---实时备份 Redis笔记 Redis是一个“客户端-服务器”结构的程序,客户端和服务器之间通过网…...
repo学习使用
Repo 是以 Git 为基础构建的代码库管理工具。Repo 可以在必要时整合多个 Git 代码库,将相关内容上传到版本控制系统。借助单个 Repo 命令,可以将文件从多个代码库下载到本地工作目录。 Repo 命令是一段可执行的 Python 脚本,你可以将其放在路…...
windows 通过docker 安装mysql
参考:Docker安装并使用Mysql(可用详细)_docker 安装mysql-CSDN博客 1. 拉取镜像:docker pull mysql:5.7 2. 查看镜像:docker image 3. 创建mysql 容器实例,并将data 目录挂载到本地d盘上 docker run --n…...
高效利用Python爬虫开发批量获取商品信息
在当今电商行业竞争激烈的环境下,精准且高效地获取商品信息对于商家和数据分析师来说至关重要。无论是进行市场调研、优化商品布局,还是制定竞争策略,商品信息的全面掌握都是关键。Python爬虫技术以其强大的功能和灵活性,成为批量…...
【C语言】左旋字符串(三种实现方式)
题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一: 我们画个图分析一下: 基本逻辑: 就是我们每一次旋转之前,我们就取出…...
Spring Security,servlet filter,和白名单之间的关系
首先,Servlet Filter是Java Web应用中的基础组件,用于拦截请求和响应,进行预处理和后处理。它们在处理HTTP请求时处于最外层,可以执行日志记录、身份验证、授权等操作。白名单机制通常指允许特定IP、用户或请求通过的安全策略&…...
Python 调用 Azure OpenAI API
在人工智能和机器学习快速发展的今天,Azure OpenAI 服务为开发者提供了强大的工具来集成先进的 AI 能力到他们的应用中。本文将指导您如何使用 Python 调用 Azure OpenAI API,特别是使用 GPT-4 模型进行对话生成。 准备工作 在开始之前,请确保您已经: 拥有一个 Azure 账户…...
Git标签管理:从基础到高阶自动化实践
引言 在软件发布过程中,88%的生产事故与版本标记错误相关。Git标签(Tag)作为版本控制的关键锚点,不仅是发布流程的里程碑,更是代码审计和问题追溯的重要依据。本文将深入Git标签的底层机制,揭示企业级标签…...
运行Petalinux的准备
参考文档 建议使用Xilinx官方的文档中心DocNav,在Design Hub View选项卡中可以看到Xilinx官方组织的开发流程,非常详尽且总是最新的。 《UG1144-petalinux-tools-reference-guide》 安装linux系统 1.查看Petalinux版本支持的系统版本,对于官方未提及或…...
Jenkins 通过 Execute Shell 执行 shell 脚本 七
Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...
AT32系列微控制器低压电机控制开发板
参考:《UM0014_AT32_LV_Motor_Control_EVB_V20_User_Manual_V1.0.1_ZH.pdf》 开发板介绍 此电机开发板是一个泛用型的低压三相电机驱动器,应用雅特力科技AT32系列微控制器搭配雅特力电机函数库,可驱动直流无刷电机、交流同步电机࿰…...
k8s部署redis集群
前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 需要部署方式,可以参考我之前的文章:k8s部署rabbitmq-CSDN博客 2. 新增redis配置文件 redis-6001.yaml --- apiVersion: v1 kind: Serv…...
道路运输安全员考试题库及答案
一、判断题 32.驾驶员必须取得道路危险货物运输从业资格证,才能从事道路危险货物运输活动。 答案:正确 33.可以将危险货物与普通货物混装运输。 答案:错误 34.货车正常行驶时,转向轮转向后应有一定的回正能力,以使货…...
反射概率以及一些基本API的使用
请问,获取对象有几种方式? 1、通过构造函数来new一个对象; 2、通过clone来克隆一个对象; 3、通过序列化反序列化来构建一个对象; 4、通过反射来创建对象;a、通过Class类来创建;b、通过Const…...
DeepSeek API 调用 - Spring Boot 实现
DeepSeek API 调用 - Spring Boot 实现 1. 项目依赖 在 pom.xml 中添加以下依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></depe…...
机器学习 - 理论和定理
在机器学习中,有一些非常有名的理论或定理,对理解机器学习的内在特性非常有帮助。本文列出机器学习中常用的理论和定理,并举出对应的举例子加以深化理解,有些理论比较抽象,我们可以先记录下来,慢慢啃&#…...
Java进阶:Docker
1. Docker概述 1.1. Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱…...
Winform禁止高分辨下缩放布局成功方法
Windows自动缩放布局会导致窗体上的按钮和文本挤在一起根本看不清楚。 那么该如何解决呢? 具体操作步骤如下: 1、在项目属性上切换到【安全性】菜单,勾选【启用ClickOnce安全设置】,然后立刻取消勾选; 为了生成app.…...
力扣142题——环形链表II
#题目# #代码# #链接# 这道链表题还是需要一些思维,这里把代码随想录的链接也贴在这里,有需要的小伙伴自行点击: https://programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%…...
工厂设计模式
工厂设计模式 简介 工厂模式是一种创建型设计模式,用于创建产品,代替手动new,主要包括简单工厂模式、工厂方法模式、抽象工厂模式。 一、简单工厂模式 定义:通过一个工厂类根据传入的参数匹配创建的产品 结构组成:…...
网络安全之探险
因为工作相关性,看着第三方公司出具的网络安全和shentou测试报告就想更深入研究一下,于是乎开始探索网络安全方面的知识,度娘、知乎开始一步步开始,总结昨天学到皮毛知识。 1.考证大全,开始是奔着这个目的去的 2.有用…...
Python基础语法精要
文章目录 一、Python的起源二、Python的用途三、Python的优缺点优点缺点 四、基础语法(1)常量和表达式(2)变量变量的语法(i)定义变量(ii)变量命名的规则 (3)变…...
C语言(枚举类型)
目录 1、什么是枚举 2、枚举成员的类型 3、枚举类型的实际应用 1、什么是枚举 枚举的定义就是:枚举(Enumeration)是一种用户自定义的数据类型,用于定义一组具有离散值的符号常量。 那通俗一点说就是把一些固定的值,一…...
讯方·智汇云校华为授权培训机构的介绍
官方授权 华为授权培训服务伙伴(Huawei Authorized Learning Partner,简称HALP)是获得华为授权,面向公众(主要为华为企业业务的伙伴/客户)提供与华为产品和技术相关的培训服务,培养华为产业链所…...
高级 Conda 使用:环境导出、共享与优化
1. 引言 在 Conda 的基础包管理功能中,我们了解了如何安装、更新和卸载包。但对于开发者来说,如何更好地管理环境、导出环境配置、共享环境,以及如何优化 Conda 的使用效率,才是提高工作效率的关键。本篇博客将进一步深入 Conda …...
从算法到落地:DeepSeek如何突破AI工具的同质化竞争困局
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux网络编程笔记: https://blog.cs…...
P9584 「MXOI Round 1」城市
题目描述 小 C 是 F 国的总统,尽管这个国家仅存在于网络游戏中,但他确实是这个国家的总统。 F 国由 n 个城市构成,这 n 个城市之间由 n−1 条双向道路互相连接。保证从任意一个城市出发,都能通过这 n−1 条双向道路,…...
CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发
CodeGPT IDEA DeepSeek,在IDEA中引入DeepSeek 版本说明 建议和我使用相同版本,实测2022版IDEA无法获取到CodeGPT最新版插件。(在IDEA自带插件市场中搜不到,可以去官网搜索最新版本) ToolsVersionIntelliJ IDEA202…...
Filter过滤器
Filter:过滤器 概念: web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能 过滤器的作用:一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符处理… 过滤器的生…...
git如何下载指定版本
要使用Git下载指定版本,可以通过以下步骤进行操作: 1. 使用Git命令行下载指定版本: 1.1 首先,使用git clone命令克隆整个git库到本地。例如:git clone [库的URL]。这将下载最新的代码到本地。 1.2 进入克隆…...
开源的 DeepSeek-R1「GitHub 热点速览」
春节假期回来,一睁眼全是王炸级的开源模型 DeepSeek-R1! GitHub 地址→github.com/deepseek-ai/DeepSeek-R1 DeepSeek-R1 开源还不到一个月,Star 数就飙升至冲破天际的 70k。虽然目前仅开源了模型权重,但同时发布的技术论文详细地…...
Open FPV VTX开源之OSD使用分类
Open FPV VTX开源之OSD使用分类 1. 源由2. 硬件2.1 【天空端】SigmaStar2.2 【天空端】Raspberry Pi2.3 【地面端】 3. 软件3.1 天空端软件3.2 地面端软件 4. 分类4.1 嵌入式OSD分类A1-嵌入式OSD:SigmaStar Android分类A2-嵌入式OSD:SigmaStar Hi3536分…...
请求超时处理
RequestMapping("/test") public DeferredResult<String> test() {DeferredResult<String> deferredResult new DeferredResult<>(6000L); // 设置超时时间为6秒// 模拟长时间任务new Thread(() -> {try {Thread.sleep(10000); // 模拟10秒的任…...
利用prompt技术结合大模型对目标B/S架构软件系统进行测试
利用prompt技术结合大模型对目标B/S架构软件系统进行测试,可参考以下步骤和方法: 测试需求理解与prompt设计 明确测试点:梳理B/S架构软件系统的功能需求、非功能需求(如性能、安全性、兼容性等),确定具体的测试点,如用户登录功能、数据查询功能、系统响应时间要求等。设…...
Go 语言里中的堆与栈
在 Go 语言里,堆和栈是内存管理的两个重要概念,它们在多个方面存在明显差异: 1. 内存分配与回收方式 栈 分配:Go 语言中,栈内存主要用于存储函数的局部变量和调用信息。当一个函数被调用时,Go 会自动为其…...
【人工智能】如何选择合适的大语言模型,是能否提高工作效率的关键!!!
DeepSeek R1入门指南 导读一、提示语差异1.1 指令侧重点不同1.2 语言风格差异1.3 知识运用引导不同 二、挑选原则2.1 模型选择2.2 提示语设计2.3 避免误区 结语 导读 大家好,很高兴又和大家见面啦!!! 在前面的内容中,…...
常见的IP地址分配方式有几种:深入剖析与适用场景
在数字互联的世界里,IP地址如同网络世界的“门牌号”,是设备间通信的基础。随着网络技术的飞速发展,IP地址的分配方式也日趋多样化,以适应不同规模、不同需求的网络环境。本文将深入探讨当前主流的几种IP地址分配方式,…...
无人机常见的开源飞控项目
开源飞控软件项目为无人机等无人载具的开发和应用提供了丰富的资源和灵活的解决方案,以下是一些常见的开源飞控软件项目: 1、PX4 简介:PX4 是一个高度模块化、可扩展的开源飞行控制平台,被广泛应用于各种类型的无人机࿰…...
模型报错infeasible,如何查看冲突约束
在使用Gurobi求解模型时,如果模型不可行(infeasible),可以通过以下步骤来查看冲突的约束或变量,帮助诊断问题: 1. 使用 computeIIS() 方法 Gurobi 提供了 computeIIS() 方法,用于计算不可行模…...
谭浩强C语言程序设计(5) 9章
1、统计三个候选人的票数 #include <cstdio> // 引入标准输入输出库 #include <cstring> // 引入字符串处理库,用于 strcmp 函数 #define N 10 // 定义一个宏常量 N,表示数组的最大长度// 定义一个结构体 Person,用于存储…...
Large Language Model Distilling Medication Recommendation Model
摘要:药物推荐是智能医疗系统的一个重要方面,因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是,目前使用的许多复杂模型往往忽视医疗数据的细微语义,而仅仅严重依赖于标识信息。此外,这些模型在处理首次就…...
STM32F407通过FSMC扩展外部SRAM和NAND FLASH
1 扩展外部SRAM 1.1 地址情况 FSMC控制器的存储区分为4个区(Bank),每个区256MB。其中,Bank1可以用于连接SRAM、NOR FLASH、PSRAM,还可以连接TFT LCD。Bank1的地址范围是0x60000000~0x6FFFFFFF。Bank1又分为4个子区,每…...
ArcGIS注册开发账号及API KEY
注册与激活 Sign up | ArcGIS Location Platform 填写信息,然后邮箱收到激活邮件,激活,再补充信息。 参考 Tutorial: Create an API key | Documentation | Esri Developer 产生API KEY Tutorial: Create an API key | Documentation |…...
C++-----------酒店客房管理系统
酒店客房管理系统 要求: 1.客房信息管理:包括客房的编号、类型、价格、状态等信息的录入和修改; 2.顾客信息管理:包括顾客的基本信息、预订信息等的管理; 3.客房预订:客户可以根据需要进行客房的预订,系统会自动判断客房的可用情况; 4.入住管理:客户入住…...
AI 编程私有化部署,在使用 cline 时,可能无法避免私隐的泄漏问题
摘录:Cline Privacy Policy https://github.com/cline/cline/blob/main/docs/PRIVACY.md Key Points Cline operates entirely client-side as a VS Code extensionNo code or data is collected, stored, or transmitted to Clines servers 问题是:…...