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

汇编学习笔记

汇编

1. debug指令

-R命令(register)

查看、改变CPU寄存器的内容

r ax 修改AX中的内容

-D命令(display)

查看内存中的内容

-E命令(enter)

改写内存中的内容

-U命令(unassenble反汇编)

将内存中的机器指令翻译成汇编指令

-T命令(trace跟踪)

执行一条机器指令

-A命令(assenble汇编)

以汇编指令的格式在内存中写入一条机器指令

2. mov、add、sub指令

1.mov(传送)

格式:mov ax, bx

注意:

1. 目标操作数与源操作数不能同时为内存操作数
2. 不能直接将立即数传送给段寄存器
3. CX不能以一切形式传送
4. 两个操作数类型必须一致, 字节、字、双字
2.add

格式:add ax, bx

若两数相加结果超过寄存器位数,舍弃超出的高位

eg1溢出:cx = F06F

add cx, cx 原: F06F + F06F = 1E0DE

cx = E0DE 最高位的 1 被舍去

eg2高位: BX = F037

add bh, 37 原: F0 + 37 = 127

BX = 2737

eg3低位: CX = E0DE

add cl, B6 原:DE + B6 = 194

CX = E094 低位计算也不会进位

3.sub

格式: sub op1,op2 ;意为:op1=op1-op2

若两数相减,被减数小于减数,则被减数从最高位的上一位借1

eg1: BX = 1303

sub bx, F

BX = 12F4

eg2借位: BX = 000F

sub bx, 10 原:1000F - 10 = FFFF

BX = FFFF 从高位借1

eg3: BX = 0000

sub bl, E 原:100 - E = 00F2

BX = 00F2 从目标操作数的高位借1

3.mul、div、and、or指令

1. mul(乘法)

(1)两个相乘数:要么都是8位,要么都是16位。

  1. 若是8位,一个默认放 AL 中,另一个放在 8位reg内存单元

  2. 若是16位, 一个默认放在 AX 中, 另一个放在 16位reg内存单元

(2)结果:如果是8位乘法,结果默认放在 AX

如果是16位乘法,结果 高位 默认放在 DX , 低位 默认放在 AX

格式:mul reg

mul 内存单元

注意:溢出同加法

2. div(除法)

(1)除数:8位 或 16位,在一个reg 或内存单元中

(2)被除数:默认放在 AXDXAX

如果除数为8位,被除数则为16位,默认放在 AX

如果除数为16位,被除数则为32位, 放在在 DXAX 中,DX放高16位,AX放低16位

(3)结果: 如果除数为8位, 则商放在 AL,余数放在 AH

如果除数为16位,则商放在 AX,余数放在 DX

格式: div reg

div 内存单元

除数8位:AX / BL = AL...AH

除数16位:DXAX / BX = AX...DX

eg132位被除数:DX = F , AX = 4240, BX = 2710

mov dx, F F4240 = 1000000 2710 = 10000 64 = 100

mov ax, 4240 原:F4240 / 2710 = 64

mov bx, 2710

div bx

AX = 64 通过高16位DX, 低16位AX组成一个32位的被除数,商放在AX

eg2有余数: DX = F, AX = 4241, BX = 2710

mov dx, F F4241 = 1000001

mov ax, 4241 原:F4241 / 2710 = 64...1

mov bx, 2710 1000001 / 10000 = 100...1

div bx

AX = 64, DX = 0001

3. and(与)

逻辑与指令,按位进行与运算

mov al, 63

and al, 3B

结果:al = 23

注意:该指令可将操作对象的相应位设为0,其他位不变

将al的第0位设为0的指令为:and al, FE(11111110B)

4. or (或)

逻辑或运算,按位进行或运算

mov al, 63

or al, 3B

结果:al = 7B

注意:该指令可将操作对象的相应位设为1,其他位不变

将al的第0位设为1的指令为:or al, 1(00000001B)

4.shl、shr、inc、dec、xchg

1.shl (左移)

shift left

1.将寄存器或内存单元中的数据向左移位

2.将最后移出的一位写入CF(进位标志)中

3.最低位用0补充

格式:mov al, 48 ;(01001000)

shl al, 1 ;将al中的数据都左移一位

结果: al = 90(10010000), CF = 0

2.shr(右移)

shift right

同shl

3.inc(加一)

值加一,不影响CF

4.dec(减一)

5.nop(空)

空指令,先占位

6.xchg(交换)

交互两操作数的值

格式:xchg ax, bx

7.neg(求补)

运算法一:用零减去操作数,然后结果返回操作数

运算法二:将操作数按位取反后加1

8.退出

格式:mov ax, 4c00H

int 21H

安全退出程序

5.寄存器

AX:累加寄存器 OF:溢出标志(超过机器所能表示的有符号数范围)

BX:基址寄存器 ZF:零标志(运算结果为0,ZF=1)

CX:计数寄存器 CF:进位标志

DX:数据寄存器 AF:辅助进位标志(第3位向第4位进位时位1,否则为0)

SP:堆栈指针寄存器 PF:奇偶标志(计算结果为1个数为偶则为1,否则为0)

BP:基址指针寄存器 DF:方向标志(串处理,DF=1时,每次操作后SI和DI减小,DF=0时增大)

SI:源变址寄存器 SF:符号标志(运算结果为负时SF=1)

DI:目的变址寄存器 IF:中断标志(IF=1,允许CPU响应可屏蔽中断,否则关闭中断)

CS:代码段寄存器 TF:陷阱标志(用于调试单步操作)

DS:数据段寄存器

SS:堆栈段寄存器

ES:附加段寄存器

5.CS:ip代码段寄存器、jmp

CS:IP指示了CPU当前要读取指令的地址

CS 为代码段寄存器,IP 为指令指针寄存器

jmp

功能:用寄存器中的值修改IP

格式:jmp ax ;等同于mov IP, ax 等同但不可以这样用 修改IP

jmp ax:bx ;等同于mov CS, ax mov IP, bx 修改CS:IP

6.ss:sp寄存器、栈的push、pop指令

栈底是高地址

1.push

push指令的完成,需要以下两个步骤

  1. SP = SP - 2:因为SS:SP指向前栈顶,既然需要push 数据,自然需要获取新栈顶

  2. 将 push 后面跟的寄存器中的内容写入刚开辟出的内存中,此时的SS:SP指向新栈顶

入栈时,栈顶从高地址向低地址增长

2.pop

pop指令的完成,需要以下两个步骤

  1. 将栈顶元素送入pop后面跟的寄存器中

  2. SP = SP + 2,SS:SP指向下一个元素

出栈时,栈顶从低地址向高地址增长

ss:sp 指向栈顶元素

7.bp,si、di变址寄存器

1. SI 、DI是变址寄存器

SIDI 是功能与 bx相近的寄存器,不能分成8位寄存器来使用,但是可以直接作为偏移地址(有效地址)

[BX+SI][BX+DI] 可亦作为偏移地址,但是不可加ax、cx、dx这些寄存器

2. BP寄存器

BP默认的段寄存器是SS,bx默认的段寄存器是DS

8.cmp、adc、sbb、

1. adc(进位加法)

adc 是带进位加法指令,利用 CF 位上记录的进位值

格式:adc 操作数1, 操作数2

功能:操作数1 = 操作数1+操作数2 + CF

常用于32位、48位数的相加,可实现进位

2. sbb(借位减法)

sbb 是带借位减法指令,利用 CF 位上记录的借位值

格式:sbb 操作数1, 操作数2

功能:操作数1 = 操作数1- 操作数2 - CF

利用sbb指令可以对任意大的数据进行减法运算

3. cmp(比较)

cmp是比较指令,功能相当于减法指令,只是不保存结果,但是影响标志寄存器

格式:cmp 操作数1, 操作数2

功能:计算 (操作数1 - 操作数2) 但不保存结果,仅改变标志寄存器

9.源程序

assume cs:codesg
​
codesg segment
​mov ax, 0123Hadd bx, 0456Hadd ax,bxadd ax,axmov ax,4c00Hint 21H
codesg ends
end

10.Loop指令

格式:loop 标号

CPU执行loop指令的时候要进行两步操作:

  1. (cx) = (cx) - 1

  2. 判断 cx 中的值,不为零则转至标号处执行程序,如果为零则向下执行

用loop指令实现循环功能,cx中存放循环次数

assume cs:codesg
codesg segmentmov  ax, 2mov  cx, 11    ;循环11次,输入多少,就循环多少次s:     add  ax, axloop s
​int  21H
codesg ends
end

如果 cx = 0,loop指令会陷入死循环:

因为Loop指令会先减一,即cx = 0 - 1 = FFFF,需要在运行65535次

#include<stdio.h>
int x = 0;
int sum = 0;
for (int i = 1; i <= 100; i++) {x++;sum += x;
}
return sum;

上述C语言转换为汇编语言: ​

assume cs:codesg
codesg segmentmov  ax, 0mov  bx, 0mov  cx, 100s:     inc  axadd  bx, axloop s
​int  21H
codesg ends
end

11.ret、call指令

call ==> func()

ret ==> return

assume cs:codesg
codesg segmentmov  ax, 2mov  cx, 11call s         ;调用函数sint  21H       ;若不退出,会执行下一指令,陷入死循环s:     add  ax, axloop sret            ; 封装函数s,等于return
​
codesg ends
end
1. ret 和 retf

ret 指令用栈中的数据,修改 IP,实现近转移

执行后,进行操作:

(1) IP = SS * 16 + SP

(2) SP = SP + 2

等同于: pop IP

retf指令用栈中的数据,修改 CS 和 IP ,实现远转移

(1) IP = SS * 16 + SP

(2) SP = SP + 2

(3) CS = SS * 16 + SP

(4)SP = SP + 2

等同于: pop IP

pop CS

2.call

格式: call 标号

执行后,进行操作:

(1)将当前的 IPCS 和 IP 压入栈中

(2)转移

3.call far ptr

格式:call far ptr 标号

实现段间转移

12.代码段、数据段、栈段、dup

16进制不能以字母开头

1.在代码段使用数据
assume cs:codesg
codesg segmentdw   123H, 456H, 789H, ABCHstart: mov  ax, 3mov  cx, 11call sinc  bxint  21H
​s:     add  ax,axloop s
​
codesg ends
end start

start 相当于事先把ip跳到第一行代码的有效地址上,避免了定义的数据与执行代码之间的混乱

2.数据、代码、栈放入不同的段
assume cs:code,ds:data,ss:stack
data segmentdw   123H, 456H, 789H, ABCH
data ends
​
stack segmentdb   0, 0, 0, 0, 0, 0;等价于 6 dup(0) 即重复6个;dup 'hello world'  db 3 dup('abc', 'def')
stack ends
​
code segmentstart: mov  ax, 3mov  cx, 11call sinc  bxint  21H
​s:     add  ax,axloop s
​
code ends
end start

dup 的使用格式:

db 重复次数 dup (重复的字节型数据)

dw 重复次数 dup (重复的字型数据)

dd 重复次数 dup (重复的双字型数据)

代码段、数据段、栈段的地址空间的连续的

每个段为避免冲突,至少占用16个字节,(即段地址不同?)

13.offset、jmp

1.操作符offset

功能:取得标号的偏移地址

2.jmp

jmp 为无条件转移指令,可以只修改IP,也可以同时修改CS和IP

1.jmp short 标号

实现段内短转移,对IP修改范围为 -128~127

2.jmp far ptr 标号

实现段间转移,或远转移,修改CS:IP

3.jmp word ptr 内存单元地址(段内地址)

从内存单元地址处开始取一个字,作为转移的目的偏移地址

4.jmp dword ptr 内存单元地址(段间地址)

从内存单元地址处开始取两个字,高地址作为转移的段地址,低地址作为转移的目的偏移地址

14.数组

定义字符串: db ”字符串“

1.arr 数组
assume cs:code,ds:data,ss:stack
data segmentarr  dw 12,34            ;定义数组arr2 db "hello world"
data ends
stack segmentdb 10 dup(0)
stack ends
code segmentstart:mov ax, type arr     ;type arr  可以查看数组的类型mov ax, type arr2    ;0001是字节,0002是字
code ends
end start
2.数据标号

代码段内定义:

assume cs:code,ds:data,ss:stack
data segment
data ends
stack segmentdb 10 dup(0)
stack ends
code segmentarr  dw 12,34            ;定义数组arr2 db "hello world"start:mov ax, arr[2]       ;可以通过下标,访问数组,下标增加1,偏移地址增加1字节,不与定义同步;arr[2] <==> cs:[arr+2]   mov ax, word ptr arr[2]   ;从cs:[arr+2]处开始取一个字的内容,放进axmov si, offset arr    ;可以找到数组的有效/偏移地址
code ends
end start

其他段定义:

assume cs:code,ds:data,ss:stack
data segmentarr  db 10H,20H,30H,40H            ;定义数组arr2 db "hello world"
data ends
stack segmentdb 10 dup(0)
stack ends
code segmentstart:mov ax, datamov ds, ax           ;没有上面两行,会找不到data;设置ds指向data段;即 assume处的data与定义了数组的data不同步,导致寻址不同,而找不到定义的数组;默认访问单元的段地址在ds中,而实际要访问的段为datamov ax, arr[2]       ;等价于;mov si, offset arr;mov al, ds:[si+2]mov ax, type arr2    ;
code ends
end start

15.实战1.0

输出hello world:

assume cs:codesg,ds:data,ss:stack
data segmentstring db "hello world",10,'123','$'    ;$表示终止符,避免向内存后面继续;10是换行的ASCII的值,实现换行功能。32-->空格
data ends
stack segmentdb 10 dup(0)
stack ends
codesg segmentstart: mov ax, datamov ds, axmov dx, offset stringmov ah, 09Hint 21H
​mov ah, 4CHint 21H
codesg ends
end start

大写转小写:

ASSUME CS:CODE,DS:DATA,SS:STACK
DATA SEGMENTSTR  DB "HeLlo woRLd",'$'
DATA ENDS
STACK SEGMENTDB 10 DUP(0)
STACK ENDS
CODE SEGMENTSTART:MOV  AX, DATAMOV  DS, AXMOV  BX, 0MOV  CX, 11
​S:    MOV  AL, [BX]CMP  AL, 'A'JB   NEXTCMP  AL, 'Z'JA   NEXTOR   AL, 20HMOV  [BX], ALNEXT: INC  BXLOOP S;C语言:;for(int i=0;i<strlen(str);i++)if(大写)转小写
​MOV  DX, OFFSET STR;LEA DX, STRMOV  AH, 09H             ;9号功能参数入口为DXINT  21H
​MOV  AH, 4CHINT  21Hcode ends
end start

找最大值:

ASSUME CS:CODE, DS:DATA, SS:STACK
DATA SEGMENTSTRING DB 10, 15, 22, 80, 50, 39,'$'MAX    DB 0
DATA ENDS
STACK SEGMENTDB 10 DUP(0)
STACK ENDS
CODE SEGMENTSTART:   MOV  AX, DATAMOV  DS, AXLEA  BX, STRINGMOV  CX, 5MOV  AL, [BX]S:       MOV  AH, [BX+1]CMP  AL, AHJA   CONTINUEMOV  AL, AHCONTINUE:INC  BXLOOP SMOV  [MAX], ALMOV  AH, 4CHINT  21H
CODE ENDS
END START

参考:《汇编语言》速成指南(全程敲代码)_哔哩哔哩_bilibili

相关文章:

汇编学习笔记

汇编 1. debug指令 -R命令(register) 查看、改变CPU寄存器的内容 r ax 修改AX中的内容 -D命令(display) 查看内存中的内容 -E命令(enter) 改写内存中的内容 -U命令(unassenble反汇编) 将内存中的机器指令翻译成汇编指令 -T命令(trace跟踪) 执行一条机器指令 -A命令…...

混合并行训练框架性能对比

混合并行训练框架性能对比 1. 框架类型 DeepSpeed、Megatron - LM、Colossal - AI、SageMaker、Merak、FasterMoE、Tutel、Whale、Alpa、DAPPLE、Mesh - TensorFlow 2. 可用并行性(Available parallelisms) DNN framework(深度神经网络框架)DP(数据并行,Data Parallelis…...

基于Docker+模拟器的Appium自动化测试(二)

模拟器的设置 打开“夜神模拟器”的系统设置&#xff0c;切换到“手机与网络”页&#xff0c;选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框&#xff0c;而后选择“静态IP”单选框&#xff0c;在IP地址中输入“192.168.0.105”&#xff0c;网关等内容不再赘述…...

数据结构之线性表之链表(附加一个考研题)

链表的定义 链表的结构&#xff1a; 单链表-初始化 代码实现&#xff1a; 单链表-头插法 代码实现&#xff1a; 这里我给大家分析一下 我们每创建一个新的节点都要插在头节点的后面&#xff0c;我们一定要注意顺序 一定要先让新节点指向头节点指向的下一个节点&#xff0c;…...

etmem

title: 聚焦 Etmem&#xff1a;高效内存管理的新引擎 date: ‘2024-12-31’ category: blog tags: Etmem内存管理性能优化系统资源 sig: storage archives: ‘2024-12’ author:way_back summary: Etmem 是一款专注于内存管理优化的创新工具&#xff0c;通过智能的内存分配、回…...

LangChain4j与Elasticsearch:构建高效的语义嵌入存储

LangChain4j与Elasticsearch&#xff1a;构建高效的语义嵌入存储 一、LangChain4j与Elasticsearch集成概述 1.1 LangChain4j简介 LangChain4j是一个为Java开发者设计的开源库&#xff0c;旨在简化大型语言模型&#xff08;LLM&#xff09;在Java应用程序中的集成。它提供了与…...

黄河小浪底水利枢纽泄洪预警广播系统正式上线

24小时站岗、危险自动报警、远程喊话驱离……近日&#xff0c;小浪底水利枢纽和西霞院水利枢纽的泄洪预警广播系统正式上线&#xff0c;通过数字化设施赋能管控水域日常监管&#xff0c;将危险水域各个角落“尽收眼底”&#xff0c;涉水危险行为“无处可藏”。 “前方船只请注意…...

理解生成协同促进?华为诺亚提出ILLUME,15M数据实现多模态理解生成一体化

多模态理解与生成一体化模型&#xff0c;致力于将视觉理解与生成能力融入同一框架&#xff0c;不仅推动了任务协同与泛化能力的突破&#xff0c;更重要的是&#xff0c;它代表着对类人智能&#xff08;AGI&#xff09;的一种深层探索。通过在单一模型中统一理解与生成&#xff…...

[文献阅读]ReAct: Synergizing Reasoning and Acting in Language Models

文章目录 摘要Abstract:思考与行为协同化Reason(Chain of thought)ReAct ReAct如何协同推理 响应Action&#xff08;动作空间&#xff09;协同推理 结果总结 摘要 ReAct: Synergizing Reasoning and Acting in Language Models [2210.03629] ReAct: Synergizing Reasoning an…...

摄像头监视脚本

摄像头监视脚本&#xff0c;若检测到摄像头画面有变化&#xff0c;保存这一段视频 一、使用方法 1.运行脚本 默认参数Threshold3, Period3, path./recordings python cam.py --threshold30 --period3 --path./recordings 2.参数说明 threshold:摄像头捕获到的画面变化量阈值…...

FreeRTOS的内存管理(选择heap4.c文件的理由)

目录 1. 了解FreeRTOS内存管理 2. 了解内存碎片 3.了解各个heap.c的内存分配方法 1.heap1.c 2.heap2.c 3.heap3.c 4.heap4.c 5.heap5.c 总结&#xff1a; 内存管理是一个系统基本组成部分&#xff0c;FreeRTOS 中大量使用到了内存管理&#xff0c;比如创建任务、信号量…...

SQL-leetcode-183. 从不订购的客户

183. 从不订购的客户 Customers 表&#xff1a; -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | -------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都表示客户的 ID 和名称。 Orders 表&#…...

苹果系统MacOS下ObjectC建立的App程序访问opencv加载图片程序

前言 苹果系统下使用opencv感觉还是有些不太方便&#xff0c;总是感觉有点受到限制。本博客描述的是在MacOS下建立App程序然后调用opencv显示图片时出现的一些问题并最后解决的一个过程。 一、程序的建立 选择程序的类型&#xff1a; 选择界面模式和编程语言&#xff1a; 其余…...

《代码随想录》Day21打卡!

写在前面&#xff1a;祝大家新年快乐&#xff01;&#xff01;&#xff01;2025年快乐&#xff0c;2024年拜拜~~~ 《代码随想录》二叉树&#xff1a;修剪二叉搜索树 本题的完整题目如下&#xff1a; 本题的完整思路如下&#xff1a; 1.本题使用递归进行求解&#xff0c;所以分…...

Dell服务器升级ubuntu 22.04失败解决

ubuntu系统原版本20.04&#xff0c;服务器dell T40. 执行apt update后&#xff0c;再执行apt upgrade。 apt update执行成功&#xff0c;但apt upgrade执行中断&#xff0c;提示如下&#xff1a; Checking package manager Reading package lists... Done Building dependen…...

构建全志 T113 Tina SDK

1、环境配置&#xff1a; 准备一个 Ubuntu 系统&#xff0c;可以是 WSL&#xff0c;虚拟机等&#xff0c;建议版本是 20.04。 1.1、安装必要的软件 进入系统后&#xff0c;输入下方命令安装需要的工具 &#xff1a; sudo apt update -y sudo apt full-upgrade -y sudo apt i…...

(推荐)【通用业务分发架构】1.业务分发 2.rpc调用 3.Event事件系统

一.Reflections和SpringUtil完成扫描包的(反射缓存) 二.id与class的映射泛型上下文(玩家是否登录&#xff0c;rpc调用SeqId&#xff0c;class类名)反射调用 1.netty层的 AccountMsgParam // 登录前 OnlineMsgParam // 登录后 SceneMsgParam // 发到场景层的 2.跨进程rpc调用的…...

最近的一些事情

正义不会缺席 这家公司违法辞退不给工资乱开离职证明。严重影响个人发展。 今天终于收到法院的判决书。 警醒自身发展与社会之间密切交流&#xff0c;敲响警钟。 虽然最终得到的法院的支持&#xff0c;但过程举步维艰。 这其中的过程&#xff0c;也让我对律师、法院和中国…...

CP AUTOSAR标准之FlexRayDriver(AUTOSAR_SWS_FlexRayDriver)(更新中……)

1 简介和功能概述 FlexRay驱动程序(Fr)抽象了特定FlexRay通信控制器(CC)的硬件相关实现细节。本规范主要依赖于符合FlexRay规范[13]的FlexRay CC。此外,本规范还支持符合FlexRay规范[14]的旧版FlexRay控制器。本SWS中因支持的FlexRay规范不同而导致的不同行为在适用的情况下以…...

Cesium 实战 27 - 三维视频融合(视频投影)

Cesium 实战 27 - 三维视频融合(视频投影) 核心代码完整代码在线示例在 Cesium 中有几种展示视频的方式,比如墙体使用视频材质,还有地面多边形使用视频材质,都可以实现视频功能。 但是随着摄像头和无人机的流行,需要视频和场景深度融合,简单的实现方式则不能满足需求。…...

告别重训练!用Upsample Anything (UPA) 给SAM、DINOv2的特征图无损放大,实测教程

告别重训练&#xff01;用Upsample Anything (UPA) 给SAM、DINOv2的特征图无损放大&#xff0c;实测教程 视觉基础模型&#xff08;如SAM、DINOv2&#xff09;在提取图像特征时&#xff0c;通常会输出低分辨率的特征图。这对于需要像素级精度的下游任务&#xff08;如分割、检测…...

PptxGenJS:重新定义JavaScript驱动的演示文稿自动化

PptxGenJS&#xff1a;重新定义JavaScript驱动的演示文稿自动化 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS 在当今数据驱动…...

告别‘看图说话’:实战中雷达脉内调制信号的自动化特征提取与识别思路

雷达脉内调制信号自动化特征提取实战指南 在电子侦察和频谱监测领域&#xff0c;人工判读雷达信号的时频图正逐渐成为效率瓶颈。当面对海量采集数据时&#xff0c;如何从STFT生成的时频矩阵中自动提取具有判别力的特征&#xff0c;成为提升分析效率的关键突破点。本文将分享一套…...

别再怕环路!手把手教你用锐捷RG-IS2700G交换机配置ERPS环网(附完整命令)

锐捷RG-IS2700G交换机ERPS环网实战&#xff1a;从零搭建高可靠企业网络 第一次接手企业园区网核心交换机的运维工作时&#xff0c;看到拓扑图上那个醒目的环形结构&#xff0c;我的手指在键盘上方悬停了整整十分钟——毕竟谁都不想成为"那个让全公司断网的新人"。直到…...

三步解锁:突破限制的浏览器插件全攻略

三步解锁&#xff1a;突破限制的浏览器插件全攻略 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 在当今数字化办公环境中&#xff0c;许多用户面临着…...

SEGGER J-Flash V8.94添加芯片方法

1.打开J-Flash安装路径&#xff08;一般为\SEGGER\JLink_V894&#xff09; 在此路径下新建文件JLinkDevices.xml2.编辑xml文件 <DataBase><Device><ChipInfo Vendor"Renergy" /*厂家*/Name"RN8213B_SOC_V2" /*芯片型号*/WorkRAMAddr&q…...

GCP 成本优化指南

5 分钟速览 我想… 用什么 预期效果 看钱花在哪了 Billing Reports + Cost Table 按服务/项目/标签拆分费用 费用超了自动告警 Budget Alerts 50%/80%/100% 阈值通知 深度分析费用趋势 BigQuery 费用导出 自定义 SQL 分析任意维度 降低计算成本 CUD / Spot VM 计算费用降 30%-7…...

别再只用WPF自带的DragDrop了!手把手教你从零封装一个可拖拽合并数据的自定义控件

突破WPF原生拖拽限制&#xff1a;构建高定制化数据合并控件的实战指南 在构建现代企业级桌面应用时&#xff0c;拖拽交互已成为提升用户体验的关键要素。WPF虽然提供了基础的DragDrop API&#xff0c;但当我们需要实现类似看板系统中卡片合并、数据聚合等复杂交互时&#xff0c…...

NeuroKit2深度解析:Python神经生理信号处理的进阶实战指南

NeuroKit2深度解析&#xff1a;Python神经生理信号处理的进阶实战指南 【免费下载链接】NeuroKit NeuroKit2: The Python Toolbox for Neurophysiological Signal Processing 项目地址: https://gitcode.com/gh_mirrors/ne/NeuroKit 在当今神经科学和生物医学工程领域&a…...

如何15分钟搞定黑苹果配置:OpCore-Simplify零代码自动化终极指南

如何15分钟搞定黑苹果配置&#xff1a;OpCore-Simplify零代码自动化终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置头…...