当前位置: 首页 > news >正文

ARM 汇编基础总结

GNU 汇编语法

编写汇编的过程中,其指令、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。

1. 汇编语句的格式

label: instruction @ comment

  • label即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通过这个标号得到指令的地址,标号也可以用来表示数据地址。注意 label 后面的" : ",任何以" : "结尾的标识符都会被识别为一个标号。在汇编语言中,_start是一个特殊的标号(label),_start是程序执行的入口点,程序执行的起始地址,当程序加载到内存中时,处理器会跳转到_start标签所在的地址,从这里开始执行代码。_start主要作用是初始化程序运行环境,比如栈、全局变量、动态链接环境,然后跳转到用户定义的main函数执行。
  • instruction即指令,也就是汇编指令或伪指令
  • @表示后面的是注释,跟 C 语言的“/*”和“*/”一样,在 GNU 汇编文件中也可以使用“/*”和“*/”来注释
  • comment就是注释内容
2. 预定义段名

.section 伪操作,用于指定汇编代码或数据应当放入哪个段, 或者定义自己的自定义段,每个段以段名开始,以下一段名或者文件结尾结束

.text 表示代码段

.data 初始化的数据段

.bss 未初始化的数据段

.rodata 只读数据段

.byte 定义单字节数据,比如.byte 0x12

.equ 赋值语句,比如.equ num,0x12,表示num=0x12

.short 定义双字节数据,比如.short 0x1234

.long 定义一个 4字节数据,比如.long 0x12345678

.align 数据字节对齐,比如.align4表示4字节对齐

.end 表示源文件结束

.global 定义一个全局符号,比如.global _start

.section .data         // 数据段
message:.asciz "Hello, World!"  // 字符串常量.section .text         // 代码段
.global _start         // 声明程序入口
_start:mov eax, 4         // 系统调用号,写操作mov ebx, 1         // 文件描述符(1是标准输出)lea ecx, [message] // 将字符串地址加载到 ecxmov edx, 13        // 要写入的字节数int 0x80           // 调用内核mov eax, 1         // 系统调用号,退出程序xor ebx, ebx       // 返回值为0int 0x80           // 调用内核

Cortex-A7 常用汇编指令

处理器内部数据传输指令

数据传输常用的指令有三个: MOV、 MRS 和 MSR。

指令

目标寄存器

源寄存器

功能

MOV R1, R0

R0

R1

将 R1 里面的数据复制到 R0 中

MRS R0, CPSR

R0

CPSR

将特殊寄存器 CPSR 里的数据复制到 R0

MSR CPSR, R1

CPSR

R1

将 R1 里面的数据复制到特殊寄存器 CPSR

1. MOV(Move)

MOV 指令将一个立即数或一个寄存器的值赋值到另一个寄存器中,只能操作通用寄存器,不能直接访问系统状态寄存器(CPSR)。

MOV R0, #0x1234 //将立即数 0x1234 赋值到寄存器 R0, 即R0 = 0X1234
MOV R1, R0 		//将寄存器 R0 的值复制到寄存器 R1, 即R1 = R0
2. MRS(Move Register from System)

MRS 指令将系统状态寄存器中的值读取到通用寄存器中。

MRS R0, CPSR //将系统状态寄存器 (CPSR) 的值存入 R0, 即R0=CPSR
MRS R1, SPSR //将系统状态寄存器 (SPSR) 的值存入 R1, 即R0=SPSR
3. MSR(Move System Register)

MSR 指令将系统状态寄存器中的值读取到通用寄存器中。

MSR SPSR, R0    //将 R0 的值写入 SPSR 系统寄存器中, 即SPSR=R0

存储器访问指令

常用的存储器访问指令有两种: LDR 和 STR 在编写汇编驱动的时候最常用这两个指令。在 32 位处理器中 LDR 和 STR 都是操作 4 个字节的地址,也就是 32 位数据。

指令

功能

LDR Rd, [Rn, #offset]

从 Rn+offset 的地址读取数据存到 Rd 中

STR Rd, [Rn, #offset]

将 Rd 寄存器中的数据写入到 Rn+offset 地址

1. LDR(Load Register)

LDR 指令用于从内存中加载一个值到寄存器,[ R1 ] 表示以 R1 存储的数字为地址。

LDR R0, = 0x20000000 //将立即数 0x20000000 加载到寄存器 R0 中//如果地址 0x20000000 存储的值是 0x1234, 则执行后 R0 = 0x1234
LDR R0, [R1]     //将内存地址 R1 指向的数据加载到寄存器 R0 中//带偏移量的加载, 如果地址 0x20000004 存储的值是 0x6789, 则执行后 R0 = 0x6789
LDR R0, [R1, #4] //将 R1 + 4 的地址处的数据加载到 R0 中
2. STR(Store Register)

STR 指令用于将寄存器中的值存储到内存地址中。

STR R0, [R1]     //将 R0 的值存储到内存地址 R1 指向的地址
STR R0, [R1, #4] //将 R0 的值存储到 R1 + 4 的地址处

栈指针

SP 指针(Stack Pointer,栈指针)是计算机体系结构中一个重要的寄存器 ,在不同的处理器架构中,SP寄存器是硬件层面预定义的,处理器会专门保留一个寄存器用来表示栈指针。在 ARM 架构中 R13 是专门的寄存器,SP是它的别名。SP指向栈的当前顶部或下一条可用地址。

1. 栈的应用

在程序执行过程中,栈通常用于管理函数调用、局部变量和保存寄存器内容等任务。当函数被调用时,局部变量、返回地址、保存的寄存器等会被压入栈中,SP指针会自动调整,指向栈的最新位置,当函数返回时,这些数据会被弹出,SP指针恢复到调用前的位置。

2. 栈指针位置

SP设置栈指针(C 语言运行的时候需要出栈和入栈,所以需要栈内存),SP指针可以指向内部 RAM 也可以指向 DDR,以指向 DDR 为例,假设 DDR 的大小是 512MB,起始地址为 0x80000000,那么 DDR 的地址范围是 0x8000_0000~0x9FFF_FFFF,设置栈大小为 2MB=0x0020_0000(对于裸机运行已经够大了),栈的增长方式是向下增长,即高地址向低地址增长,所以设置栈地址为 0x8020_0000,保证栈不会溢出。

.global _start          // 声明程序入口
_start:ldr sp, =0X80200000  // 设置栈指针的起始地址
b main 				          //跳转到main函数

压栈和出栈指令

常用的栈操作指令是 PUSH 和 POP 。压栈和出栈指令通常用于保存和恢复寄存器的值,或者用于函数调用的返回地址。

1. PUSH(压栈)

PUSH 指令将寄存器的值压入栈中,并自动更新栈指针。它是对栈操作的简化形式,常用于保存寄存器的值。例如: PUSH {R0, R1, R2, R3}

2. POP(出栈)

POP 指令从栈中弹出寄存器的值,恢复寄存器的内容,并自动更新栈指针。例如:POP {R0, R1, R2, R3}

在压栈出栈的过程中,要保证先进后出的特性,最后压入栈中的寄存器最先出栈。例如,压栈的顺序为R0 -> R1 -> R2 -> R3,那么出栈的顺序为R3 -> R2 -> R1 -> R0。下面以中断场景举例压栈和出栈,在中断服务例程中,保存和恢复多个寄存器的值也非常常见。由于中断会打断程序的正常执行流程,所以需要保存现场,确保中断处理完成后能够正确地恢复执行。

ISR_Handler:PUSH {R0, R1, R2, R3}   // 保存现场, 保存 R4, R5, R6, R7 到栈中//中断处理逻辑POP {R0, R1, R2, R3}    // 恢复现场, 恢复 R4, R5, R6, R7BX LR                   // 返回到调用者

跳转指令

常用的跳转指令有 B 和 BK,其中 B 指令跳转后不会回到原来位置,BK 跳转后待函数执行完还会回到原来位置。

1. B(Branch)

B 指令这是最简单的跳转指令, B 指令会将 PC 寄存器的值设置为跳转目标地址, 一旦执行 B 指令, ARM 处理器就会立即跳转到指定的目标地址。如果要调用的函数不会再返回到原来的执行处,那就可以用 B 指令,如下示例

_start:
ldr sp, =0X80200000 //设置栈指针
b main             //跳转到 main 函数//用 B 指令实现 loop 死循环
loop:b loop
2. BL(Branch with Link )

BL 指令相比 B 指令的区别是 BL 会跳转到指定函数,待函数执行完再返回原来位置继续执行,因为在跳转之前会在寄存器 LR(R14)中保存当前 PC 寄存器值,所以可以通过将 LR 寄存器中的值重新加载到 PC 中来继续从跳转之前的代码处运行,这是子程序调用一个基本但常用的手段。比如 Cortex-A 处理器的 irq 中断服务函数都是汇编写的,主要用汇编来实现现场的保护和恢复、获取中断号等。但是具体的中断处理过程都是 C 函数,所以就会存在汇编中调用 C 函数的问题。

PUSH {r0, r1}        //保存 r0,r1
CPS #0x13            //进入 SVC 模式,允许其他中断再次进去
BL system_irqhandler //加载 C 语言中断处理函数到 r2 寄存器中
CPS #0x12            //进入 IRQ 模式
POP {r0, r1}
STR r0, [r1, #0X10]  //中断执行完成,写 EOIR

算术运算指令

常用加法、减法,乘除很少用

指令

计算公式

说明

ADD Rd, Rn, Rm

Rd = Rn + Rm

加法运算,指令为 ADD

ADD Rd, Rn, #immed

Rd = Rn + #immed

ADC Rd, Rn, Rm

Rd = Rn + Rm + 进位

带进位的加法运算,指令为 ADC

ADC Rd, Rn, #immed

Rd = Rn + #immed +进位

SUB Rd, Rn, Rm

Rd = Rn – Rm

减法

SUB Rd, #immed

Rd = Rd - #immed

SUB Rd, Rn, #immed

Rd = Rn - #immed

SBC Rd, Rn, #immed

Rd = Rn - #immed – 借位

带借位的减法

SBC Rd, Rn ,Rm

Rd = Rn – Rm – 借位

MUL Rd, Rn, Rm

Rd = Rn * Rm

乘法(32 位)

UDIV Rd, Rn, Rm

Rd = Rn / Rm

无符号除法

SDIV Rd, Rn, Rm

Rd = Rn / Rm

有符号除法

在 CPU 运行过程中,如果想执行运算操作,必须要先将数据加载到寄存器中,然后才能执行运算操作!

// 实现 DDR 两个地址数据相加
LDR R0, [#0x20000000]   // 从地址 0x20000000 加载数据到 R0
LDR R1, [#0x20000004]   // 从地址 0x20000004 加载数据到 R1
ADD R2, R0, R1          // 将 R0 和 R1 的值相加,结果存入 R2// 实现两个立即数相加
MOV R0, #0x1          // 将立即数 0x1 加载到 R0
MOV R1, #0x2          // 将立即数 0x2 加载到 R1
ADD R2, R0, R1        // 将 R0 和 R1 的值相加,结果存入 R2

逻辑运算指令

指令

计算公式

说明

AND Rd, Rn

Rd = Rd &Rn

按位与

AND Rd, Rn, #immed

Rd = Rn &#immed

AND Rd, Rn, Rm

Rd = Rn & Rm

ORR Rd, Rn

Rd = Rd | Rn

按位或

ORR Rd, Rn, #immed

Rd = Rn | #immed

ORR Rd, Rn, Rm

Rd = Rn | Rm

BIC Rd, Rn

Rd = Rd & (~Rn)

位清除

BIC Rd, Rn, #immed

Rd = Rn & (~#immed)

BIC Rd, Rn , Rm

Rd = Rn & (~Rm)

ORN Rd, Rn, #immed

Rd = Rn | (#immed)

按位或非

ORN Rd, Rn, Rm

Rd = Rn | (Rm)

EOR Rd, Rn

Rd = Rd ^ Rn

按位异或

EOR Rd, Rn, #immed

Rd = Rn ^ #immed

EOR Rd, Rn, Rm

Rd = Rn ^ Rm

相关文章:

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中,其指令、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号,表示地址位置,有些指令前面可能会有标…...

L27.【LeetCode笔记】2 的幂(五种解法)

目录 1.题目 2.自解 方法1:调用log函数 代码 提交结果 方法2:循环 提交结果 3.优解 方法3:位运算n & (n-1) 0 代码 提交结果 方法4:位运算lowbit 代码 提交结果 4.投机取巧的方法 代码 提交结果 1.题目 https://leetcode.cn/problems/power-of-two/?env…...

【MyBatis-Plus】让 MyBatis 更简单高效

如果你曾经使用过 MyBatis,你一定知道它的强大和灵活。然而,随着项目规模的增长,手写 SQL 成为了一件既繁琐又容易出错的事。这时,MyBatis-Plus(简称 MP)应运而生,它为 MyBatis 增强了许多功能&…...

如何使用OpenCV进行抓图-多线程

前言 需求: 1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、 2、采用多线程 3、获知当前摄像头的帧率。 这个需求,之前就有做了,但是由于出现了一个问题,人家摄像头的帧率目前都可以达到60帧/s 了,而我的程序…...

解决安装pynini和WeTextProcessing报错问题

点击这里,访问博客 0. 背景 最近在给别人有偿部署ASR-LLM-TTS项目时遇到安装pynini和WeTextProcessing依赖报错的问题,报错信息如下: IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files…...

数据中台与数据治理服务方案[50页PPT]

本文概述了数据中台与数据治理服务方案的核心要点。数据中台作为政务服务数据化的核心,通过整合各部门业务系统数据,进行建模与加工,以新数据驱动政府管理效率提升与政务服务能力增强。数据治理则聚焦于解决整体架构问题,确保数据…...

springCloud 脚手架项目功能模块:Java分布式锁

文章目录 引言分布式锁产生的原因:集群常用的分布式锁分布式锁的三种实现方式I ZooKeeper 简介zookeeper本质上是一个分布式的小文件存储系zookeeper特性:全局数据一致性II 基于ZooKeeper 实现一个排他锁创建锁获取锁释放锁Apache ZooKeeper客户端III 分布式锁方案非公平锁方…...

一文讲清楚HTTP常见的请求头和应用

文章目录 一文讲清楚HTTP常见的请求头和应用1. 啥是个HTTP请求头2. 常见的请求头,作用和示例3.协商缓存4.会话状态 一文讲清楚HTTP常见的请求头和应用 1. 啥是个HTTP请求头 一句话,说白了就是限定HTTP传输的一些规则参数,比如Accept&#xf…...

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found

这个问题之前遇到过,没有记录,导致今天又花了2小时 原因是没有GLIBC——2.32 使用以下命令查一下有哪些版本: strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 我已经安装好了,所有有2.32版本 原因是当前的ubuntu版本…...

如何安装适配pytorch版本的torchvision

一、对照版本 版本对照pytorch/vision: Datasets, Transforms and Models specific to Computer Vision 二、下载对应版本的torchvision 下载连接1download.pytorch.org/whl/torch_stable.html 下载连接2download.pytorch.org/whl/cu110/torch_stable.html 笔者认为1会比2更…...

UE4_用户控件_3_用户控件输入数据的方法

祝愿大美兰陵越来越好! 一、效果展示: 二、先制作一个角色 1、新建个父类为pawn的蓝图类。更名为BP_Image_Character。 2、这个角色只是用于观察场景,并与场景中的物体相碰撞用的,所以不需要骨骼网格体, 3、但是我们…...

以往博客的复习补充——part1

之前没更新是因为期末考试要复习,没空写博客。1月3号才考完,现在有空,打算从头看一遍,既是复习以前知识点,又是对原来的博客进行补充。刚好寒假,有大把时间。 一,希尔排序(Shell So…...

数据挖掘——决策树分类

数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构,可以很好的对数据进行分类; 决策树的根节点到叶节点的每一条路径构建一条规则;具有互斥且完备的特点,即每一个样本均被且…...

Kafka 快速实战及基本原理详解解析-01

一、Kafka 介绍 1. MQ 的作用 消息队列(Message Queue,简称 MQ)是一种用于跨进程通信的技术,核心功能是通过异步消息的方式实现系统之间的解耦。它在现代分布式系统中有着广泛的应用,主要作用体现在以下三个方面&…...

大模型在自动驾驶领域的应用和存在的问题

大模型在自动驾驶领域的应用与挑战 大模型(如 GPT-4、BERT等)已经在多个领域取得了突破,自动驾驶是其中一个受益颇多的行业。随着人工智能和深度学习的快速发展,自动驾驶技术正在向更加智能化、自动化和安全的方向发展。大模型在…...

【0x0014】HCI_Read_Local_Name命令详解

目录 一、命令概述 二、命令格式 三、返回事件及参数说明 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Local_Name 四、命令执行流程 4.1. 命令发送 4.2. 控制器接收并处理命令 4.3. 控制器返回结果 4.4. 主机接收并解析事件包 4.5. 示例代码 五、应用场景 …...

理解Java领域中的 DTO、PO 和 VO

在 Java 开发中,DTO(Data Transfer Object)、PO(Persistent Object)和 VO(Value Object)是在不同层面用于数据处理和传递的概念,它们各自有着独特的作用: 一、DTO&#…...

成都和力九垠科技有限公司九垠赢系统Common存在任意文件上传漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

框架模块说明 #09 日志模块_01

背景 日志模块是系统的重要组成部分,主要负责记录系统运行状态和定位错误问题的功能。通常,日志分为系统日志、操作日志和安全日志三类。虽然分布式数据平台是当前微服务架构中的重要部分,但本文的重点并不在此,而是聚焦于自定义…...

Unity热更文件比较工具类

打包出来的热更文件,如果每次都要全部上传到CDN文件服务器,不进耗费时间长,还浪费流量。 所以让AI写了个简单的文件比较工具类,然后修改了一下可用。记录一下。 路径可自行更改。校验算法这里使用的是MD5,如果使用SH…...

Python性能分析深度解析:从`cProfile`到`line_profiler`的优化之路

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在软件开发过程中,性能优化是提升应用质量和用户体验的关键环节。Python作为广泛应用的高级编程语言,其性能分析工具为开发者提供了强大的…...

EF Core配置及使用

Entity Framework Core是微软官方的ORM框架。 ORM:Object Relational Mapping。让开发者用对象操作的形式操作关系数据库。 EF Core是对于底层ADO.NET Core的封装,因此ADO.NET Core支持的数据库不一定被EF Core支持。 代码创建数据库Code First 建实…...

EPS32基础篇开发

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 开发 EPS32基础篇 前言一、GPIO输入输出GPIO可设置一下4种状态代码示例:检测按键,按下时:LED亮,松开时,LED灭 二、…...

【时时三省】(C语言基础)常见的动态内存错误2

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 对非动态开辟空间内存使用free释放 示例: 这个arr数组是在栈上的 *p指向的就是arr 对非动态空间也用了free ferr只能在动态开辟空间使用 使用free释放一块动态开辟空间的一部分…...

Harmony OS开发-ArkUI框架速成四

程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前! 1.图标库 1.1 图标库概述 HarmonyOS 图标库为 HarmonyOS 开发者提供丰富的在线图…...

vulnhub Earth靶机

搭建靶机直接拖进来就行 1.扫描靶机IP arp-scan -l 2.信息收集 nmap -sS -A -T4 192.168.47.132 得到两个DNS; 在443端口处会让我们加https dirb https://earth.local/ dirb https://terratest.earth.local/ #页面下有三行数值 37090b59030f11060b0a1b4e0000000000004312170a…...

ScheduledExecutorService详解

ScheduledExecutorService 是 Java 并发工具包 (java.util.concurrent) 中的一个接口,用于在指定的延迟后执行任务,或者以固定的时间间隔周期性执行任务。它是 ExecutorService 的子接口,提供了更强大的调度功能。 ScheduledExecutorService…...

logback日志文件多环境配置路径

项目中遇到问题,springboot项目 本地jar包部署到现场后,经常遇到现场的日志存放的路径会更改,经过查阅,有两种方式,下面简单说明一下。 一、第一种 启动jar包时 添加参数 --logging.configF:\hgtest\config\logback.x…...

判断一个变量是否为NaN

1. JS代码 NaN(不是一个数字,但数据类型为number)是执行数学运算没有成功,返回失败的结果。 另外,NaN 不等于 NaN 。 //利用 NaN 是唯一一个不等于自身的特点 function _isNaN(val) {if (val ! val) {return true;}ret…...

Flask 快速入门

1. Flask 简介 1.1 什么是 Flask Flask 是一个用 Python 编写的轻量级 Web 框架,被誉为 微框架。它提供基础功能,如路由、请求处理和模板引擎,但不强迫开发者使用特定库或工具,赋予开发人员高度的自由选择权,以满足不…...

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义:让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…...

微信小程序调用 WebAssembly 烹饪指南

我们都是在夜里崩溃过的俗人,所幸终会天亮。明天就是新的开始,我们会变得与昨天不同。 一、Rust 导出 wasm 参考 wasm-bindgen 官方指南 https://wasm.rust-lang.net.cn/wasm-bindgen/introduction.html wasm-bindgen,这是一个 Rust 库和 CLI…...

java_配置使用nacos完整示例

参考:49 尚上优选项目-平台管理端-整合ESMQ实现商品上下架-流程分析_哔哩哔哩_bilibili 1. 下载安装nacos https://github.com/alibaba/nacos/releases 2. 解压,运行 PS D:\path/to\nacos-server-2.4.3\nacos\bin> .\startup.cmd -m standalone 3.…...

Go语言性能优化-字符串格式化优化

在 Go 语言中,格式化字符串(例如使用 fmt.Sprintf、fmt.Printf 等函数)确实可能对性能产生影响,尤其是当频繁执行格式化操作时。格式化字符串涉及对格式符的解析和数据类型的转换,这会增加额外的开销。为了减少格式化字符串带来的性能影响,可以采取以下一些优化策略: 1…...

Spring源码分析之事件机制——观察者模式(二)

目录 获取监听器的入口方法 实际检索监听器的核心方法 监听器类型检查方法 监听器的注册过程 监听器的存储结构 过程总结 Spring源码分析之事件机制——观察者模式(一)-CSDN博客 Spring源码分析之事件机制——观察者模式(二&#xff…...

机器学习和深度学习

机器学习(Machine Learning,简称 ML)和深度学习(Deep Learning,简称 DL)都是人工智能(AI)领域的重要技术,它们的目标是使计算机通过数据学习和自主改进,从而完…...

MetaGPT - 多Agent框架

文章目录 一、关于 MetaGPT功能介绍快速开始的演示视频教程 二、安装Pip安装Docker安装 一、关于 MetaGPT MetaGPT 为GPTs分配不同的角色,以形成一个协作实体来完成复杂的任务。 github : https://github.com/geekan/MetaGPTtwitter : https://twitter.com/MetaGP…...

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统? A hy…...

TIM的输入捕获

IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中 我们使用测周法测频率 void IC_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphCl…...

SCAU期末笔记 - 数据库系统概念往年试卷解析

数据库搞得人一头雾水,题型太多太杂,已经准备摆烂了。就刷刷往年试卷,挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项? 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...

黑马跟学.苍穹外卖.Day01

黑马跟学.苍穹外卖.Day01 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库…...

获取系统启动时间

获取系统启动时间 uptime命令 gbgb:~$ uptime09:29:41 up 2:21, 4 users, load average: 0.00, 0.00, 0.00 gbgb:~$ 这里的up 13 min表示系统已经运行了2个小时13分钟。 date 命令 /proc/uptime gbgb:~$ date -d "$(awk -F. {print $1} /proc/uptime) second ago&…...

Istio 补充 Kubernetes 的不足

1 Istio 补充 Kubernetes 的不足 Kubernetes 强大但无法解决复杂分布式系统中的非功能性需求,如流量路由、协议转换、请求重试和负载均衡。Istio作为Service Mesh,通过独立的代理进程处理这些需求,避免直接修改业务代码。 2. 独立的代理进程…...

以图像识别为例,关于卷积神经网络(CNN)的直观解释

大家读完觉得有意义记得关注和点赞!!! 作者以图像识别为例,用图文而非数学公式的方式解释了卷积神经网络的工作原理, 适合初学者和外行扫盲。 目录 1 卷积神经网络(CNN) 1.1 应用场景 1.2 起…...

使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用

使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用 目录 使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用1. 引言2. 数据集介绍3. 模型网络结构3.1 网络结构3.2 编码器3.3 生成器3.4 判别器4. 模型优化器与损失函数4.1 优…...

Java重要面试名词整理(十八):Sentinel

文章目录 服务雪崩及其解决方案技术选型: Sentinel or Hystrix 流量治理组件Sentinel**基于SentinelResource注解埋点实现资源保护** Sentinel控制台**限流阈值类型****流控模式****直接****关联** **流控效果**系统规则——系统自适应保护 限流算法**计数器法****滑动时间窗口…...

【微信小程序获取用户手机号

微信小程序获取用户手机号有2种,一种是前端自己解密,一种是获取后发给后端,后端去解密 重点:要在微信公众平台设置里面绑定微信开放平台账号,不然反解不出来用户手机号上代码: <button style"font-size: 16px;" open-type"getPhoneNumber" getphonenumb…...

Profinet转EtherNet/IP网关连接AB PLC的应用案例

某大型制造企业的生产车间同时采用了西门子 S7 - 1500 PLC 作为核心控制系统的一部分&#xff0c;负责主要生产流程的控制与数据处理&#xff1b;而在特定生产环节&#xff0c;由于历史设备遗留或工艺配套需求&#xff0c;存在使用 AB PLC 的情况。这就导致了在整个自动化生产系…...

Maven的依赖管理

1. 依赖管理 依赖管理&#xff0c;可以将有关依赖项的所有信息放在共同的POM中&#xff0c;并对子POM中的工件进行更简单的引用。举个例子&#xff1a; 父POM <project>......<dependencyManagement><dependencies><dependency><groupId>gro…...

验证码识别插件 - captcha-killer

验证码识别插件 - captcha-killer 简介 captcha-killer 是一款用于 Burpsuite 的验证码识别插件。它的主要功能是调用各种验证码识别接口&#xff0c;以便在进行渗透测试时能够自动识别和绕过验证码。这个插件本身并不直接进行验证码的识别&#xff0c;而是通过调用外部的 OC…...