汇编基础语法及其示例
1.汇编指令
1.1汇编指令的基本格式
<opcode>{<cond>}{s} <Rd> , <Rn> , <shifter_operand>
<功能码>{<条件码>}{cpsr影响位} <目标寄存器> , <第一操作寄存器> , <第二操作数>
注:第一操作寄存器只能是寄存器, 不能写数值
第二操作数可以写寄存器名, 也可以写#一个数值
汇编不区分大小写
操作数可以是一个寄存器,也可以是一个立即数
立即数:能够经过编码后保存到指令空间中直接当作指令一部分去执行的数据。一个32位指令空间中预留了12位空间保存当前操作数, 可以通过某一个规则对操作数进行处理,将处理后数值放在这12个空间中。所以处理完能够保存到12位空间中的数据就是立即数。通常通过循环右移看是否能得到一个0-255之间的数,如果可以,说明该数据就是立即数
1.2数据处理指令
1.2.1数据搬移指令
1.mov {条件码} Rd ,Sh~
将操作数搬移到目标寄存器中
mov R1 , #0x1
MOV R2, R1
2.mvn {条件码} Rd Sh~
将操作数按位取反后搬移到目标寄存器中
mvn R1 , #0x1
MVN R2, R1
3.通过伪指令实现非立即数的搬移:ldr Rd, =非立即数
ldr Rd , =0x81
1.2.2数据移位指令
1.逻辑左移
lsl{<cond>} Rd , Rn , Sh~
将Rn左移Sh~位存到Rd中
2.逻辑右移
lsr{<cond>} Rd , Rn , Sh~
将Rn右移Sh~位存到Rd中
3.循环右移
ror{<cond>} Rd , Rn , Sh~
将Rn循环右移Sh~位存到Rd中
LSL R1 , R2, #(0x1<<2)
LSR R1 , R2, #2)
1.2.3位运算指令
1.与, 与0清零,与1不变
and {<cond>} Rd , Rn , Sh~
and R1, r2 , #(0x1<<2)
将Rn与Sh~进行与运算存于Rd
2.或,有1为1, 全0为0
orr {<cond>} Rd , Rn , Sh~
Orr r1, r2, #(0x1<<2)
将Rn与Sh~进行或运算存于Rd
3.异或 ,相同为0, 不同为1
eor {<cond>} Rd , Rn , Sh~
Eor R2, R1, #(0x1<<0)
将Rn与Sh~进行异或运算存于Rd
4.按位取反,01交换
mvn(见搬移指令2)
5,按位清零,指为1,清为0
bic {<cond>} Rd , Rn , Sh~
将Rn与Sh~取反进行与运算存于Rd
bic r1, r2, #(0x1<<2) === and r1, r2, #(~(0x1<<2))
1.2.4算术运算指令
1.加法指令
add{<cond>}{s} Rd, Rn,Sh~
Rd = Rn+Sh~
adc{<cond>}{s} Rd, Rn,Sh~
Rd = Rn+Sh~+cpsr寄存器的c位
2.减法指令
sub {<cond>}{s} Rd, Rn,Sh~
Rd = Rn-Sh~
sbc{<cond>}{s} Rd, Rn,Sh~
Rd = Rn-Sh~-cpsr寄存器的c位
3.乘法指令
mul{<cond>}{s} Rd, Rn,Sh~
Rd = Rn*Sh~
注 :{s}存在时运算,加法进位和减法不借位时,cpsr位置1
32位处理器进行64位数据运算时先低八位,后高八位,低位运算影响c位,高位运算考虑c位
1.2.5比较指令
1.cmp Rn , Sh~
将Rn和Sh~比较,本质是将二者进行减法运算,并将结果存到cpsr寄存器 的nzcv位,通常和条件码一起使用
2.tst Rd, #(0x1<<N)
判断第N位是否为0.
3.TEQ Rd , sh~
判断二者是否相等
只能影响到z位,无法影响到cvn位
1.2.6跳转指令
1.b 标签
跳转到指定标签下,跳转后LR寄存器不保存程序的返回地址
2.bl 标签
跳转到指定标签下,跳转后LR寄存器保存程序的返回地址
可实现程序到循环执行操作 ,比如累乘和阶乘
1.2.7内存读写指令
类比c语言通过指针读写地址下内存中的数据
*((unsigned int*)0x12345678) = 数值
向内存中写
1.str Rd,[目标地址]
将Rd中的四字节数据写入到目标地址对应的内存中
2.strh Rd,[目标地址]
将Rd中的2字节数据写入到目标地址对应的内存中
3.strb Rd,[目标地址]
将Rd中的1字节数据写入到目标地址对应的内存中
向内存中读
4.ldr Rd,[目标地址]
从目标地址对应的内存中读取4字节数据保存到Rd中
5.ldrh Rd,[目标地址]
从目标地址对应的内存中读取2字节数据保存到Rd中
6.ldrb Rd,[目标地址]
从目标地址对应的内存中读取1字节数据保存到Rd中
此外还分前索引,后索引和自动索引
前索引:以基地址偏移后为首地址读写
str Rd,[基地址, 偏移量]
将Rd的数据写入到基地址+偏移量为首地址到内存中
ldr Rd,[基地址, 偏移量]
从基地址+偏移量为首地址到内存中读取数据保存到Rd中
后索引:以基地址进行为首地址进行读写,之后基地址在进行偏移
str Rd , [基地址],偏移量
将目标寄存器到数据写入以基地址为首地址的内存中,然后基地址增加偏移量
ldr Rd , [基地址], 偏移量
从以基地址为首地址的内存中读取数据保存到目标寄存器中,然后将基地址增加偏移量的大小
自动索引:以基地址偏移后为首地址进行读写,同时基地址也进行自增自减
str Rd , [基地址,偏移量]!
将基地址自增偏移量大小,再将Rd的数据写入到以基地址为首地址的内存中
ldr Rd,[基地址,偏移量]!
先将基地址自增偏移量大小,再从基地址为首地址到内存中读取数据保存到Rd中
注:基地址要保存到一个寄存器中,偏移量要是一个立即数
此外还可以通过寄存器列表对内存批量读写
写:
stm 基地址, { 寄存器列表}
将寄存器列表中的所有寄存器数据写入到以基地址为首地址的内存中
读:
ldm 基地址,{寄存器列表}
从基地址开始往下读取数据,保存到寄存器列表中的每一个寄存器中
注:
寄存器的写法有:起始寄存器-终止寄存器 /寄存器1、寄存器2、、、、
并且无论寄存器列表编号顺序与否排列,内存读写始终是从小编号寄存器对应着低地址的数据
批量寄存器地址的增长方式有以下四种
ia、ib、da、db
a:先读写,基地址再增长
b:基地址先增长,再进行读写
i:基地址往大地址方向增长
d:基地址往小地址方向增长
栈内存读写
1.空栈和满栈(E&F)
2.增栈和减栈(A&D)
也就形成了四类栈,空增(EA)空减(ED)满增(FA)满减(FD)
ARM默认使用满减栈(FD)
"交叉读写"即:ia写那就db读
对于ARM,满减是由ib写入那么就需要用da读出(对应满减栈就是先读再偏移)
满减栈的实现主要通过三种方式:压栈出栈、strdb和满减栈专用的后缀fd
1.压栈出栈
push {寄存器列表}
pop {寄存器列表}
start:
mov sp ,#0x40000020 @初始化的栈
mov R1, #0x1
mov r2,#0x2
mov r3,#0x3
push {R1-r5}
2.stmdb
将上述代码的push替换成stmdb
3.stmfd(满减专用)
push换成stmfd
最后就是关于叶子函数和非叶子函数的压栈出栈注意事项
关于叶子函数,为了叶子函数在操作寄存器时,不改变非叶子函数的需求,通常将从非叶子函数中已经使用且叶子函数中要使用寄存器数据进行压栈处理,在叶子函数处理完之后进行出栈释放,从而保证函数返回后寄存器的值和调用函数前的保持一致
针对于非叶子函数,还要额外的将返回地址进行压栈出栈处理将LR寄存器压栈非叶子函数调用完成后将其中 的地址数据出栈于sp寄存器中使程序继续正常运行
核心即压栈保护现场push{}出栈恢复现场pop{}
1.2.8状态寄存器传送指令
读取状态寄存器
mrs Rd,cpsr
读取CPSR的数值,保存到Rd中
修改状态寄存器
MSR cpsr , sh~
修改cpsr寄存器的数值为操作数
注:在特权模式下可以通过修改CPSR到非特权模式(USER模式),但是非特权模式不能通过修改cpsr寄存器的数值实现转化为特权模式,只有当对应的特权事件发生之后,处理器会自动进入对应的特权模式
1.2.9异常产生指令
1.2.9.1软中断产生指令
当软中断产生指令执行后会产生一个如饭中断,让处理器进入SVC模式下进行软中断的处理
swi sh~
sh~是一个立即数即产生软中断的中断号
例子
:
start:
MRS r0 , cpsr @
Msr cpsr,#0x1
swi 1
loop
b loop
end
:
1.2.9.2异常模式和异常源
前者时处理器发生异常后进入的工作模式,后者是引发处理器产生异常的源头
总共分为五种异常模式和7种异常源
异常向量表:
ARM处理器在处理异常时采用了异常向量机制,通过在内存中申请一段空间为异常向量表,作为异常处理程序的索引项,根据索引项进入异常处理程序去执行。
cortex——a处理器的异常向量表时32字节,平分为8份。每一份时44字节,正好对应一条汇编指令,每一种异常源都会在异常向量表中有一个位置,剩下一份位置保留
1.2.9.3异常的处理(4⃣️大步3⃣️小步)
1.保存cpsr于spsr
2.修改cpsr(三小步)
修改为对应的异常模式【4;0】
修改工作状态为ARM状态【5】-》0
根据当前的异常的优先级禁用中断【7:6】
3.保存程序的返回地址到异常模式的LR寄存器中
4.修改PC的值到对应异常在异常向量表中的位置
1.2.9.4异常的返回
注:异常的返回必须要手动返回
1.将异常模式下的spsr数值赋值给cpsr,恢复程序的状态
2.将异常模式下的LR的数值赋值给PC,恢复程序执行的位置
1.2.10协处理器指令
2.伪操作:能够在编译过程中起到编译引导作用的 内容
.test .gloabal .if .else ..endif . .....
3.伪指令:不是汇编指令,但是可以起到指令的作用,也会占用一定的内存空间
4.注释
单行注释:@ 或 ;
多行注释:/**/
条件注释:
.if 逻辑值
指令段
.else
指令段
.endif
5.混合编程
目的:使c语言资源和汇编资源相互调用
要求:符合ATPCS规范,将变量传递给从低到高的寄存器实现二者之间的相互调用
函数与标签:函数名汇编中当标签使用,标签c语言中当函数名使用
内联汇编格式
asm volatile(
"汇编指令\n\t"
。。。。。。
输出列表
输入列表
破坏列表
);
相关文章:
汇编基础语法及其示例
1.汇编指令 1.1汇编指令的基本格式 <opcode>{<cond>}{s} <Rd> , <Rn> , <shifter_operand> <功能码>{<条件码>}{cpsr影响位} <目标寄存器> , <第一操作寄存器> , <第二操作数> 注:第一操作寄存器…...
使用python调用JIRA6 进行OAuth1认证获取AccessToken
Jira配置应用程序链接 1) 创建应用程序链接 登录 JIRA 管理后台。转到 Administration > Applications > Application Links。在输入框中输入外部应用程序的 URL(例如 GitLab 或自定义应用),然后点击 Create new link。 2) 配置 Con…...
关于el-table翻页后序号列递增的组件封装
需求说明: 项目中经常会用到的一个场景,表格第一列显示序号(1、2、3...),但是在翻页后要递增显示序号,例如10、11、12(假设一页显示10条数据),针对这种情况,封…...
Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin
Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.RectF …...
Linux 进程概念
目录 一、前言 二、概念实例,正在执行的程序等 三、描述进程-PCB 四、组织进程 五、查看进程 编辑六、通过系统调用获取进程标示符 七、进程切换和上下文数据 1.进程切换 2.上下文数据 一、前言 在Linux中,每个执行的程序叫做进程ÿ…...
Kafa分区策略实现
引言 Kafka 的分区策略决定了生产者发送的消息会被分配到哪个分区中,合理的分区策略有助于实现负载均衡、提高消息处理效率以及满足特定的业务需求。 轮询策略(默认) 轮询策略是 Kafka 默认的分区策略(当消息没有指定键时&…...
元素的显示与隐藏
display显示隐藏visibility显示隐藏overflow溢出显示隐藏 display属性 visibility属性 overflow溢出...
“AI视频智能分析系统:让每一帧视频都充满智慧
嘿,大家好!今天咱们来聊聊一个特别厉害的东西——AI视频智能分析系统。想象一下,如果你有一个超级聪明的“视频助手”,它不仅能自动识别视频中的各种元素,还能根据内容生成详细的分析报告,是不是感觉特别酷…...
LeetCode:63. 不同路径 II
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:63. 不同路径 II 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0]…...
P4681 [THUSC 2015] 平方运算 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an) 和常数 p p p ,有 m m m 个操作,分以下两种: modify ( l , r ) \operatorname{modify}(l,r) modify(l,r):对每个 i ∈ [ …...
机器人抓取与操作概述(深蓝)——1
工业机器人:① “臂”的形态 ② “手”的形态 ③ 视觉,力和触觉 1 机器人的不同形态 “臂”的形态 “手”的形态 2 常见的操作任务 操作:插入、推和滑 抓取:两指(平行夹爪)抓取、灵巧手抓取 落地-产…...
算法基础学习——快排与归并(附带java模版)
快速排序和归并排序是两种速度较快的排序方式,是最应该掌握的两种排序算法, (一)快速排序(不稳定的) 基本思想:分治 平均时间复杂度:O(nlogn) / 最慢O(n^2) / 最快O(n) 步骤&…...
JavaScript_02 表单
表单常用演示: 1.图片 结果失真了... 2.切换图片 切换结果 3.表单:...
接口 V2 完善:分布式环境下的 WebSocket 实现与 Token 校验
🎯 本文档详细介绍了如何使用WebSocket协议优化客户端与服务端之间的通信,特别是在处理异步订单创建通知的场景中。通过引入WebSocket代替传统的HTTP请求-响应模式,实现了服务器主动向客户端推送数据的功能,极大地提高了实时性和效…...
Android中Service在新进程中的启动流程2
目录 1、Service在客户端的启动入口 2、Service启动在AMS的处理 3、Service在新进程中的启动 4、Service与AMS的关系再续 上一篇文章中我们了解了Service在新进程中启动的大致流程,同时认识了与客户端进程交互的接口IApplicationThread以及与AMS交互的接口IActi…...
C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】
1. 题目描述 力扣在线OJ题目 给定两个数组,编写一个函数来计算它们的交集。 示例: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 输入:nums1 [4,9,5], nums2 [9,4,9,8,4] 输出:[9,4] 2. 思路 直接暴力…...
Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
DeepSeek学术写作测评第二弹:数据分析、图表解读,效果怎么样?
我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 针对最近全球热议的DeepSeek开源大模型,娜姐昨天分析了关于论文润色、中译英的详细效果测评: DeepSeek学术写作测评第一弹:论文润色&#…...
(2)SpringBoot自动装配原理简介
SpringBoot自动装配 这里写目录标题 SpringBoot自动装配启动器主程序自定义扫描包SpringBootApplicationSpringBootConfigurationEnableAutoConfigurationAutoConfigurationPackageImport({AutoConfigurationImportSelector.class})选择器AutoConfigurationEntrygetCandidateCo…...
Rust:Rhai脚本编程示例
当然,以下是一个简单的Rhai脚本编程示例,展示了如何在Rust中使用Rhai执行脚本。 首先,你需要确保你的Rust项目中包含了rhai库。你可以在你的Cargo.toml文件中添加以下依赖项: [dependencies] rhai "0.19" # 请检查最…...
深入理解文件描述符
问题 文件描述符只是一个整数值,那么系统是如何利用这个整数值来完成文件读写的呢? 什么是文件系统? 计算机中用于组织、存储和管理文件的数据结构集合 管理磁盘或其他存储介质上的空间 (将存储介质分块管理)保证文件数据不被破坏…...
使用CSS实现一个加载的进度条
文章目录 使用CSS实现一个加载的进度条一、引言二、步骤一:HTML结构与CSS基础样式1、HTML结构2、CSS基础样式 三、步骤二:添加动画效果1、使用CSS动画2、结合JavaScript控制动画 四、使用示例五、总结 使用CSS实现一个加载的进度条 一、引言 在现代网页…...
SQL 指南
SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...
sqlzoo答案4:SELECT within SELECT Tutorial
sql练习:SELECT within SELECT Tutorial - SQLZoo world表: namecontinentareapopulationgdpAfghanistanAsia6522302550010020343000000AlbaniaEurope28748283174112960000000AlgeriaAfrica238174137100000188681000000AndorraEurope46878115371200000…...
斐波那契数(信息学奥赛一本通-1071)
【题目描述】 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。 【输入】 输入一行,包含一个正整数k。(1 ≤ k ≤ 46)…...
数据结构与算法再探(六)动态规划
目录 动态规划 (Dynamic Programming, DP) 动态规划的基本思想 动态规划的核心概念 动态规划的实现步骤 动态规划实例 1、爬楼梯 c 递归(超时)需要使用记忆化递归 循环 2、打家劫舍 3、最小路径和 4、完全平方数 5、最长公共子序列 6、0-1背…...
ECMAScript--promise的使用
一、Promise的简介 Promise是一个代理,它所代表的值在创建时并不一定是已知的。借助Promise,我们能够将处理程序与异步操作最终的成功值或者失败原因关联起来。这一特性使得异步方法可以像同步方法那样返回值,不同之处在于异步方法不会立…...
微服务入门(go)
微服务入门(go) 和单体服务对比:里面的服务仅仅用于某个特定的业务 一、领域驱动设计(DDD) 基本概念 领域和子域 领域:有范围的界限(边界) 子域:划分的小范围 核心域…...
【自学笔记】计算机网络的重点知识点-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 计算机网络重点知识点一、计算机网络概述二、网络分类三、网络性能指标四、网络协议与体系结构五、数据交换方式六、物理层与数据链路层七、网络层与运输层八、应用…...
leetcode——二叉树的中序遍历(java)
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出…...
neo4j-community-5.26.0 install in window10
在住处电脑重新配置一下neo4j, 1.先至官方下载 Neo4j Desktop Download | Free Graph Database Download Neo4j Deployment Center - Graph Database & Analytics 2.配置java jdk jdk 21 官网下载 Java Downloads | Oracle 中国 path: 4.查看java -version 版本 5.n…...
物联网智能项目之——智能家居项目的实现!
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网智能项目之——智能家居项目…...
基于SpringBoot的假期周边游平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
JavaScript_03 超简计算器
版本一: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算器</title><script type"text/javascript">function add(){let num1 document.getElementById("number1&qu…...
【重生之我在学习C语言指针详解】
目录 编辑 --------------------------------------begin---------------------------------------- 引言 一、指针基础 1.1 内存地址 1.2 指针变量 1.3 指针声明 1.4 取地址运算符 & 1.5 解引用运算符 *** 二、指针运算 2.1 指针加减运算 2.2 指针关系运算 三…...
深度学习每周学习总结R5(LSTM-实现糖尿病探索与预测-模型优化)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客R7中的内容,为了便于自己整理总结起名为R5🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结优化细节(目前只采用了1、2两种方式)1. L2 正则…...
单元测试在复杂业务逻辑开发中的重要性与实践
背景 以前编写程序时,我并没有养成大量撰写单元测试的习惯,尤其是在写偏向业务代码的情况下,写的单元测试很少,只有在封装一些公共方法的时候才会写一些测试用例。 然而,最近我在开发的一个业务时,深刻地…...
Kubernetes 环境中的自动化运维实战指南
Kubernetes 作为容器编排领域的领导者,已经成为云原生应用的核心基础设施。然而,随着集群规模的扩大和应用的复杂化,手动运维 Kubernetes 集群变得愈发困难。自动化运维成为提升效率、保障系统稳定性的关键。本文将详细介绍如何在 Kubernetes 环境中实施自动化运维,涵盖工具…...
Linux 如何使用fdisk进行磁盘相关的操作
简介 fdisk 命令是 Linux 中用于管理磁盘分区的强大文本实用程序。它可以创建、删除、调整大小和修改硬盘上的分区。 基本语法 fdisk [options] <device> <device>:要管理的磁盘,例如 /dev/sda、/dev/nvme0n1 或 /dev/vda 示例用法 列…...
嵌入式Linux:如何监视子进程
目录 1、wait()函数 2、waitpid()函数 3、SIGCHLD信号 在嵌入式Linux系统中,父进程通常需要创建子进程来执行特定任务,例如处理网络请求、执行计算任务等。监视子进程的状态不仅可以确保资源的合理利用,还能防止僵尸进程的产生,…...
【信息系统项目管理师-选择真题】2010上半年综合知识答案和详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1~2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第21题】…...
工作总结:压测篇
前言 压测是测试需要会的一项技能,作为开发,有点时候也要会一点压测。也是被逼着现学现卖的。 一、压测是什么,以及压测工具的选择 压测,即压力测试,是一种性能测试手段,通过模拟大量用户同时访问系统&am…...
doris:STRUCT
STRUCT<field_name:field_type [COMMENT comment_string], ... > 表示由多个 Field 组成的结构体,也可被理解为多个列的集合。 不能作为 Key 使用,目前 STRUCT 仅支持在 Duplicate 模型的表中使用。一个 Struct 中的 Field 的名字和数量固定&…...
二叉树介绍
一.树的概念 树的图: 1.结点的度:一个结点含有子树的个数称为该结点的度; 如上图:A的度为6 2.树的度:一棵树中,所有结点度的最大值称为树的度; 如上图:树的度为6 3.叶子结点或终…...
通过Ngrok实现内网穿透助力远程开发
在现代软件开发和网络应用的环境下,开发人员常常需要在本地搭建服务器进行调试、测试或演示。然而,传统的端口映射(如使用 NAT 或 SSH 隧道)配置繁琐,且并非所有环境都允许直接暴露本地服务。ngrok 作为一款强大的隧道…...
DeepSeek-R1:通过强化学习激励大型语言模型(LLMs)的推理能力
摘要 我们推出了第一代推理模型:DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是一个未经监督微调(SFT)作为初步步骤,而是通过大规模强化学习(RL)训练的模型,展现出卓越的推理能力。通过强…...
Node.js基础
浏览器知识 浏览器 个浏览器都内置了DOM、BOM等API函数,供浏览器中的Javascript调用。 每个浏览器都有对应的JavaScript解析引擎。 浏览器中的JavaScript环境 V8引擎负责解析和执行JavaScript代码 内置API是由运行环境提供的特殊接口,只能在所属的运…...
DeepSeek R1:中国AI黑马的崛起与挑战
在人工智能(AI)领域,大型语言模型(LLMs)正以迅猛之势重塑世界,其发展速度和影响力令人瞩目。近期,中国DeepSeek公司发布的DeepSeek R1模型,宛如一颗璀璨新星,凭借卓越的推…...
【JavaEE】_MVC架构与三层架构
目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…...
对比DeepSeek、ChatGPT和Kimi的学术写作摘要能力
摘要 摘要是文章的精华,通常在200-250词左右。要包括研究的目的、方法、结果和结论。让AI工具作为某领域内资深的研究专家,编写摘要需要言简意赅,直接概括论文的核心,为读者提供快速了解的窗口。 下面我们使用DeepSeek、ChatGPT…...