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

ARM02汇编指令

文章目录

      • 一、keil软件介绍
        • 1.1 创建工程
        • 1.2 解析start.s文件(重点)
        • 1.3 乱码解决
        • 1.4 更换背景颜色
        • 1.5 C语言内存分布
        • 1.6 解析map.lds文件(重点)
        • 1.7 常见错误信息
        • 1.8 仿真
      • 二、汇编三种符号
        • 2.1 汇编指令
        • 2.2 伪指令
        • 2.3 伪操作
      • 三、汇编指令格式
        • 3.1 格式
          • 3.2 注意事项
      • 四、数据操作指令
        • 4.1 数据搬移指令 mov mvn
        • 4.2 立即数
        • 4.3 伪指令 ldr
        • 4.4 移位操作指令
        • 4.5 位运算操作指令
          • 4.5.1 代码1
          • 4.5.2 代码2
        • 4.6 算数运算指令
        • 4.7 比较指令
      • 五、跳转指令
        • 5.1 指令码
      • 作业1
      • 作业2
      • 总结

一、keil软件介绍

1.1 创建工程

跟着文档进行创建就可以,注意不要出现中文路径

1.2 解析start.s文件(重点)

.text @文本段
.global _start @ 声明一个_start函数入口
_start:  @ _start标签,相当于C语言中函数mov r0,#0x1  @ 一条汇编指令stop:  @ stop标签,相当于C语言中函数b stop @ 跳转到stop标签下的第一条指令执行,相当于C语言中while(1).end @结束标志

1.3 乱码解决

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ax8jQPO4-1692022974257)(evernotecid://3E0E4EC3-DFE7-4A43-A61C-6137F75331C6/appyinxiangcom/14761362/ENNote/p999?hash=5c85f58c1fe3896ffa652dc31c6d2f44)]

1.4 更换背景颜色

将群里下发global.prop文件替换到C:\Keil_v5\UV4,重启keil软件

1.5 C语言内存分布

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ichTV9H9-1692022950793)(evernotecid://3E0E4EC3-DFE7-4A43-A61C-6137F75331C6/appyinxiangcom/14761362/ENNote/p999?hash=fca5618d46730e99c5649c42f3babd0d)]

1.6 解析map.lds文件(重点)

map.lds文件:链接脚本文件
作用:给编译器进行使用,告诉编译器对各个段,如何进行分布

/*输出格式:32位可执行程序,小端对齐*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
/*输出架构:arm架构*/
OUTPUT_ARCH(arm)
/*入口:_start*/
ENTRY(_start)
/*段*/
SECTIONS
{. = 0x00000000;/*入口地址*/. = ALIGN(4);/*4字节对齐*/.text      :{./Objects/start.o(.text) /*第一个文件存放start.o文件,指定start.o位置*/*(.text) /*其余文件没有要求,编译器随便放*/}. = ALIGN(4);.rodata : /*只读数据段*/{ *(.rodata) }. = ALIGN(4);.data :  /*数据段*/{ *(.data) }. = ALIGN(4);__bss_start = .; .bss : /*.bss段*/{ *(.bss) }__bss_end__ = .;
}

1.7 常见错误信息

c:/program files (x86)/codesourcery/ld.exe: cannot find ./start.o =====> 不能找到./start.o
解决方法:1)在当前工程下,查看start.o位置 ======> 编译器决定start.o在哪个位置2)修改map.lds文件

1.8 仿真

在这里插入图片描述

二、汇编三种符号

2.1 汇编指令

编译器将一条汇编指令编译生成机器码,占用代码段空间

2.2 伪指令

伪指令本身不是一条指令,编译器可以将其编译生成多条指令,共同完成一条指令功能

2.3 伪操作

指导编译器对代码如何进行编译,所有以.开头的为伪操作,伪操作不占用代码段空间

三、汇编指令格式

3.1 格式

{cond}{s} Rd,Rn,#oprand2
:指令码
{cond}:条件码
加条件码:指令有条件执行
不加条件码:指令默认无条件执行
{s}:状态位
加s:影响CPSR寄存器
不加s:不影响CPSR寄存器
Rd:目标寄存器
Rn:第一操作寄存器
#oprand2:第二操作数
1)立即数
2)寄存器
3)有效数:将一个数按位取反之后,如果这个数为立即数,说明这个数为有效数

3.2 注意事项

1、{cond}{s}需要连在一起编写
2、Rd,Rn,#oprand2需要用逗号分隔开
3、{cond}{s}和Rd,Rn,#oprand2需要用空格隔开
4、一条汇编指令占用一行,并且没有分号
5、汇编中不区分大小写

四、数据操作指令

4.1 数据搬移指令 mov mvn

指令码:mov mvn
指令格式:{cond}{s} Rd,#oprand2
mov ====> 将第二操作数进行赋值
mvn ====> 将第二操作数,按位进行取反之后,进行赋值

mov r0,#0xf  @ r0 = 0xf ====> 立即数
mov r1,#0xff  @ r1 = 0xff  ====> 立即数
mov r8,r1 @ r8 = r1 = 0xff  ====> 寄存器
@ mov r2,#0xfff  @ r2 = 0xfff ====> error
@ mov r3,#0xffff  @ r3 = 0xfffff  ====> error
@ mov r4,#0xfffff  @ r4 = 0xfffff  ====> error
mov r5,#0xffffff  @ r5 = 0xffffff = ~r5 = 0xff000000   ====> 有效数
mov r6,#0xfffffff  @ r6 = 0xfffffff = ~r6 = 0xf0000000 ====> 有效数
mov r7,#0xffffffff @ r7 = 0xffffffff = ~r7 = 0 ====> 有效数
mov r0,#0xff   @ r0 = 0xff
mvn r1,#0xff   @ r1 = ~ r1 = 0xffffff00 

4.2 立即数

在这里插入图片描述

1、从判断的数中,找到0~0xff之间的数 ===> 判断的这个数所有1包含
2、将找到的0~0xff之间的数,循环右移偶数位 ===> 低位移出,补到高位
3、如果能够得到你要判断的那个数,说明这个数就是立即数
判断的数0 ~ 0xff之间数循环右移偶数是否立即数

判断的数0 ~ 0xff之间数循环右移偶数是否立即数
0xf0xf0
0xf000000f0xff4
0xff0000000xff8
0x000000ff0xff0
0x1fe000000xff11不是
0x1f8000000x7E10
0x0000000f =====> 判断的数
0000 0000 0000 0000 0000 0000 0000 1111  =====> 判断的数
0 ~ 0xff之间数:0xf
循环右移偶数: 0    0xf000000f =====> 判断的数
1111 0000 0000 0000 0000 0000 0000 1111  =====> 判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====> 0 ~ 0xff之间数
0 ~ 0xff之间数: 0xff
循环右移偶数: 40xff000000 =====> 判断的数
1111 1111 0000 0000 0000 0000 0000 0000  =====> 判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====> 0 ~ 0xff之间数
0 ~ 0xff之间数:0xff
循环右移偶数: 80x000000ff =====> 判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====> 判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====> 0 ~ 0xff之间数
0 ~ 0xff之间数:0xff
循环右移偶数: 00x1fe00000=====> 判断的数
0001 1111 1110 0000 0000 0000 0000 0000  =====> 判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====> 0 ~ 0xff之间数
0 ~ 0xff之间数:0xff
循环右移偶数: 110x1f800000 =====> 判断的数
0001 1111 1000 0000 0000 0000 0000 0000  =====> 判断的数
0000 0000 0000 0000 0000 0000 0111 1110  =====> 0x7E
0 ~ 0xff之间数:0x7E
循环右移偶数: 10

4.3 伪指令 ldr

思考:在0~4G空间,有很多数都不是立即数,那么如何进行赋值呢?
指令码:ldr
格式:ldr 寄存器,=值

ldr r0,=0xfff  @ r0 = 0xfff
ldr r1,=0xffff @ r1 = 0xffff
ldr r2,=0xfffff @ r2 = 0xfffff

4.4 移位操作指令

指令码:lsl lsr ror asr
指令格式:{cond}{s} Rd,Rn,#oprand2
lsl:逻辑左移 =====> 特点:无符号数左移,高位移出,低位补0
lsr:逻辑右移 =====> 特点:无符号数右移,低位移出,高位补0
ror:循环右移 =====> 特点:低位移出,补到高位
asr:算数右移 =====> 特点:低位移出,高位补符号位

mov r0,#0xff  @ r0 = 0xff = 0000 0000 0000 0000 0000 0000 1111 1111@1.将r0寄存器中的值,逻辑左移4位,并且存放到目标寄存器r1@ 0000 0000 0000 0000 0000 0000 1111 1111@ 0000 0000 0000 0000 0000 1111 1111 0000lsl r1,r0,#0x4  @ r1 = r0 << 4 = 0xff0@2.将r1寄存器中的值,逻辑右移4位,并且存放到目标寄存器r2@ 0000 0000 0000 0000 0000 1111 1111 0000@ 0000 0000 0000 0000 0000 0000 1111 1111lsr  r2,r1,#0x4  @ r2 = r1 >> 4 = 0x000000ff@3.将r2寄存器中的值,循环右移4位,并且存放到目标寄存器r3@ 0000 0000 0000 0000 0000 0000 1111 1111@ 1111 0000 0000 0000 0000 0000 0000 1111 ror r3,r2,#0x4  @ r3 = 0xf000000fldr r4,=0x8000000f@4.将r4寄存器中的值,算数右移4位,并且存放到目标寄存器r5@ 1000 0000 0000 0000 0000 0000 0000 1111 @ 1111 1000 0000 0000 0000 0000 0000 0000asr r5,r4,#0x4  @ r5 = 0xf8000000

4.5 位运算操作指令

指令码:and orr eor bic
格式:{cond}{s} Rd,Rn,#oprand2
and:按位与 =====> 与0清0,与1不变
orr:按位或 =====> 或0不变,或1置1
eor:按位异或 =====> 异或0不变,异或1取反(相同为0,相异为1)
bic:按位清零 =====> 第二操作哪一位写1,对应位进行清0

真值表
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
0 ^ 0 = 0
4.5.1 代码1
/*    mov r0,#0xff @ r0 = 0xff@ 31                               4 3210@ **** **** **** **** **** **** **** ****@ 0000 0000 0000 0000 0000 0000 1111 1111@ 1111 1111 1111 1111 1111 1111 1110 1111@将r0寄存器中第4位进行清0,保证其他位不变,并且存放到目标寄存器r0中@ 第一种方法:and r0,r0,#0xffffffef@ 第二种方法:推荐使用and r0,r0,#(~(0x1 << 4))@ 备注:当目标寄存器和第一操作寄存器相同,可以合并 and r0,#(~(0x1 << 4))@ 第三种方法bic r0,r0,#(0x1 << 4)
*/    mov r0,#0xEf @ r0 = 0xEf@ 0000 0000 0000 0000 0000 0000 1110 1111@                             1 1110 1111@将r0寄存器中第8位进行置1,保证其他位不变,并且存放到目标寄存器r1中orr r1,r0,#(0x1 << 8) @ r1 = 0x1efmov r2,#0xf @ r0 = 0xf@ 0000 0000 0000 0000 0000 0000 0000 1111@                                    0111@将r2寄存器中第3位进行取反,保证其他位不变,并且存放到目标寄存器r3中eor r3,r2,#(0x1 << 3) @ r3 = 0x7
4.5.2 代码2
ldr r0,=0x12345678
@ 1> 将R0寄存器中的第[4]位清0,保持其他位不变
and r0,r0,#(~(0x1 << 4))
@ 2> 将R0寄存器中的第[7]位置1,保持其他位不变
orr r0,r0,#(0x1 << 7)
@ 3> 将R0寄存器中的第[31:28]位清0,保持其他位不变
and r0,r0,#(~(0xf << 28))
@ 4> 将R0寄存器中的第[7:4]位置1,保持其他位不变
orr r0,r0,#(0xf << 4)
@ 5> 将R0寄存器中的第[15:11]位修改位10101,保持其他位不变    @ 先清零bic r0,r0,#(0x1f << 11)@ 在置1orr r0,r0,#(0x15 << 11)

4.6 算数运算指令

指令码:add adc sub sbc mul
指令格式:{cond}{s} Rd,Rn,#oprand2
add:普通加法指令
adc:带进位加法指令 ====> CPSR寄存器中C位标志位
sub:普通减法指令
sbc:带借位减法指令
mul:乘法指令 ====> 没有第二操作数,{cond}{s} Rd,Rn

    /*练习题1:实现两个64位数相加第一个64位数:高32位r0 = 0x4 低32位r1 = 0xffffffff第二个64位数:高32位r2 = 0x1 低32位r3 = 0x1两个64位数进行相加目标高32位r4表示=0x6,低32位r5表示=00000000mov r0,#0x4mov r1,#0xffffffffmov r2,#0x1mov r3,#0x1adds r5,r1,r3 @ r5 = r1 + r3adc r4,r0,r2 @ r4 = r0 + r2 + c = 0x4 + 0x1 + 1 = 0x6*//*练习题2:实现两个64位数相减第一个64位数:高32位r0 = 0x4 低32位r1 = 0x4第二个64位数:高32位r2 = 0x1 低32位r3 = 0x5两个64位数进行相减目标高32位r4表示=0x2,低32位r5表示=0xffffffff*/mov r0,#0x4mov r1,#0x4mov r2,#0x1mov r3,#0x5subs r5,r1,r3 @ r5 = r1 - r3sbc  r4,r0,r2 @ r4 = r0 - r2 - !c = 0x4 - 0x1 - 1 = 0x2/*乘法指令  ====> 没有第二操作数,<opcode>{cond}{s} Rd,Rn*/mov r0,#0x4mov r1,#0x5mul r0,r1 @ r0 = r0 * r1 = 0x14

4.7 比较指令

指令码:cmp
指令格式:{cond} Rn,#oprand2
注意点:
1)比较指令没有目标寄存器
2)比较指令本质做减法运算
3)比较指令的执行结果,会影响CPSR寄存器的NZCV位,并且不需要加s
4)比较指令和条件码搭配使用
5)前面我们所有学习的指令,都是默认无条件执行,比较指令有条件指令

mov r0,#0x4
mov r1,#0x5
cmp r0,r1     @比较r0和r1寄存器中的值
subhi r0,r0,r1 @如果r0 > r1 r0 = r0 - r1
subcc r1,r1,r0 @如果r0 < r1 r1 = r1 - r0

在这里插入图片描述

五、跳转指令

5.1 指令码

指令码:b / bl
指令格式:b / bl{cond} 标签 ====> 跳转到标签下,第一条指令执行
b:有去无回,不会保存函数返回地址到LR寄存器中
b:有去有回,会保存函数返回地址到LR寄存器中

mov r0,#0x1
mov r1,#0x2
@ b add_func @有去无回,不会保存函数返回地址到LR寄存器中
bl add_func @有去有回,会保存函数返回地址到LR寄存器中
mov r3,#0x4
b stopadd_func:
add r0,r0,r1 @ r0 = r0 + r1 = 0x1 + 0x2 = 0x3
mov pc,lr  @ 恢复现场 pc = lr

作业1

在这里插入图片描述

作业2

用for循环实现1~100之间和5050

for(i=1;i<=100;i++)
{sum = sum + i;
}

总结

特殊功能寄存器:sp lr pc cpsr spsr
基本格式:<opcode>{cond}{s} Rd,Rn,#oprand2
数据操作指令1> 数据搬移指令 mov mvn ldr2> 移位操作指令 lsl lsr asr ror3> 算数运算指令 add adc sub sbc4> 位运算操作指令 and orr eor bic5> 比较指令 cmp
跳转指令 b / bl

相关文章:

ARM02汇编指令

文章目录 一、keil软件介绍1.1 创建工程1.2 解析start.s文件(重点)1.3 乱码解决1.4 更换背景颜色1.5 C语言内存分布1.6 解析map.lds文件(重点)1.7 常见错误信息1.8 仿真 二、汇编三种符号2.1 汇编指令2.2 伪指令2.3 伪操作 三、汇编指令格式3.1 格式3.2 注意事项 四、数据操作指…...

从初学者到专家:Java方法的完整指南

目录 一.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法的调用 1.4实参和形参的关系 1.5没有返回值的方法 1.6方法的意义 二.方法重载 2.1方法重载的实现 2.2方法重载的意义 2.3方法签名 一.方法的概念及使用 1.1什么是方法 方法就是一个代码片段. 类似于 …...

【生成式AI】ProlificDreamer论文阅读

ProlificDreamer 论文阅读 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…...

C++元编程——模拟javascript异步执行

javascript有一个期约调用&#xff0c;就是利用内部的一种协程机制实现的类似并行的操作。以下是用ChatGPT搞出来的一块演示代码&#xff1a; // 异步任务 function asyncTask() {return new Promise((resolve, reject) > {setTimeout(() > {const randomNumber Math.f…...

【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL

【JavaEE】MyBatis框架要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】MyBatis框架要点总结&#xff08;3&#xff09;1. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 …...

Springboot 默认路径说明

Spring Boot基本上是Spring框架的扩展&#xff0c;它消除了设置Spring应用程序所需的样板配置&#xff0c;极大的方便了开发者&#xff0c;其默认识别路径如下&#xff1a; Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录&#xff1a; 1、classpath:/static 用于加…...

springboot注册拦截器与返回统一标准响应格式

响应对象ResultVO package com.example.poi.utils;import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** A…...

卷王特斯拉又全网降价了,卷死车企们

哈喽,大家好,今天媒介盒子小编又来跟大家分享软文推广的干货知识了,本篇分享的主要内容是&#xff1a;特斯无孔不入的营销手段。 1、特斯拉Model Y降价 车企要打架 自2023 年 8 月 14 日起&#xff0c;Model Y 长续航版起售价从 31.39 万元调整为 29.99 万元&#xff0c;Mode…...

wiley:revision 流程

1 上传修改后的word文件 注意&#xff1a;包括没标注修改位置的word文件和标注了修改位置的word文件 2 上传response回复文件 Your Author Response should include relevant comments that you have copied from the decision letter, along with your comments detailing …...

【论文阅读】基于深度学习的时序预测——Pyraformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…...

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强&#xff0c;越来越多的网站开始考虑&#xff0c;将大量数据储存在客户端&#xff0c;这样可以减少从服务器获取数据&#xff0c;直接从本地获取数据。 现有的浏览器数据储存方案&#xff0c;都不适合储存大量数据&#xff1a;Cookie 的大小不超过 4K…...

RedisDesktopManager连不上redis问题解决(小白版)

常见问题就是 redis.conf配置文件 a.将port 127.0.0.1这一行注释掉 b.protected-mode保护模式改为no 这个可以看到很多博主都说了&#xff0c;相信都搜到这里来了你们都弄了&#xff0c;我就不详细说了 防火墙开放端口 我说明我自己的问题以及解决方法 1、执行telnet 虚拟…...

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php&#xff08;CodeI…...

MyBatis and or使用列表控制or条件

背景&#xff1a;最近项目需要&#xff0c;师傅可以查找订单&#xff0c;而师傅是指定可以服务2到3个区域&#xff0c;故需要使用到and, or条件的组合&#xff0c;以下记一下代码。 最重要的代码是&#xff1a; 1、构建List<Consumer<LambdaQueryWrapper<T>>&g…...

C语言刷题训练【第11天】

大家好&#xff0c;我是纪宁。 今天是C语言笔试刷题训练的第11天&#xff0c;加油&#xff01; 文章目录 1、声明以下变量&#xff0c;则表达式: ch/i (f*d – i) 的结果类型为&#xff08; &#xff09;2、关于代码的说法正确的是&#xff08; &#xff09;3、已知有如下各变…...

正则表达式的使用

1、正则表达式-教程 正则表达式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为元字符&#xff09;。 正则表达式使用单个字符串来描述&#xff0c;匹配一系列匹配某个句法规则的字符串。 2、…...

PHP 求解两字符串所有公共子序列及最长公共子序列 支持多字节字符串

/*** 获取两字符串所有公共子序列【不连续的】 例&#xff1a;abc ac > ac** param string $str1 字符串1* param string $str2 字符串2** return array*/ function public_sequence(string $str1, string $str2): array {$data [[-1, -1, , 0, ]]; // 子序列容器【横坐标 …...

linux内核bitmap之setbit汇编实现

内核版本&#xff1a;kernel 0.12 首先看一段代码&#xff0c;下面这段代码来自内核版本0.12的mm/swap.c中&#xff1a; // mm/swap.c #define bitop(name,op) \static inline int name(char * addr,unsigned int nr) \ { \int __res; \__asm__ __volatile__("bt" …...

Golang设计模式

Golang设计模式 Golang设计模式简介Golang工厂设计模式Golang单例设计模式Golang抽象工厂设计模式Golang建造者模式 (Builder Pattern)Golang 原型模式(Prototype Pattern)Golang适配器模式Golang 桥接模式&#xff08;Bridge Pattern&#xff09;Golang装饰器模式(Decorator …...

leetcode151. 反转字符串中的单词

题目&#xff1a;leetcode151. 反转字符串中的单词 描述&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...