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

汇编语言高级编程技巧:从基础到进阶

在这里插入图片描述

前言

汇编语言作为底层编程语言,直接操作硬件,执行效率高,但编写复杂逻辑时往往显得繁琐。通过使用汇编伪指令和宏,我们可以实现类似于高级语言的结构,如条件判断、循环、结构体和函数等,从而提升代码的可读性和开发效率。本文将循序渐进地讲解这些技巧,从基础到进阶,帮助你更好地掌握汇编语言的高级编程。


1. 基础概念

在这里插入图片描述

1.1 过程定义 (PROC 和 ENDP)

在汇编中,PROC 和 ENDP 用于定义过程(函数)。过程可以将代码模块化,便于复用。

.CODE
MAIN PROCCALL PRINT_HELLO  ; 调用 PRINT_HELLO 过程RET               ; 返回
MAIN ENDPPRINT_HELLO PROCMOV AH, 09H       ; 显示字符串LEA DX, HELLO_MSGINT 21HRET
PRINT_HELLO ENDP.DATAHELLO_MSG DB 'Hello, World!', '$'

1.2 局部变量 (LOCAL)

局部变量在过程内部使用,生命周期仅限于当前过程。局部变量通过堆栈分配空间,并通过 BP 寄存器访问。

XAMPLE PROCLOCAL var1:WORD  ; 定义一个局部变量MOV var1, 10     ; 给局部变量赋值RET
EXAMPLE ENDP

1.3 变量定义 (db, dw, dd)

在 .DATA 段中,可以使用 db(字节)、dw(字)和 dd(双字)定义变量。

.DATAbyteVar DB 1       ; 定义字节变量wordVar DW 100     ; 定义字变量dwordVar DD 1000   ; 定义双字变量

2. 控制结构

2.1 条件判断 (if-else)

通过条件跳转指令(如 JZ、JNZ、JG 等)实现 if-else 逻辑。

CMP AX, 0       ; 比较 AX 和 0
JE  IF_BLOCK    ; 如果 AX == 0,跳转到 IF_BLOCK
JMP ELSE_BLOCK  ; 否则跳转到 ELSE_BLOCKIF_BLOCK:; if 代码块JMP END_IF  ; 跳过 else 代码块ELSE_BLOCK:; else 代码块END_IF:; 继续执行后续代码

2.2 循环 (for, while)

通过条件跳转指令实现循环逻辑。

MOV CX, 5       ; 初始化 CX = 5LOOP_START:CMP CX, 0   ; 比较 CX 和 0JLE LOOP_END ; 如果 CX <= 0,跳出循环; 循环体代码DEC CX      ; CX--JMP LOOP_START ; 继续循环LOOP_END:; 循环结束

3. 高级特性

在这里插入图片描述

3.1 结构体定义 (STRUC)

STRUC 用于定义结构体,类似于 C 语言中的 struct。

assembly
PERSON STRUCName DB 20 DUP('$')  ; 名字,20 字节Age  DB ?            ; 年龄,1 字节Height DW ?          ; 身高,2 字节
PERSON ENDS.DATAStudent PERSON <>    ; 定义一个 PERSON 结构体变量

3.2 宏定义 (MACRO 和 ENDM)

宏在编译时展开为实际代码,适合用于简化重复性代码。

PRINT_MSG MACRO MSGMOV AH, 09HLEA DX, MSGINT 21H
ENDM.DATAMSG1 DB 'Message 1', '$'MSG2 DB 'Message 2', '$'.CODE
MAIN PROCPRINT_MSG MSG1  ; 调用宏PRINT_MSG MSG2  ; 调用宏RET
MAIN ENDP

3.3 条件汇编 (IF, ELSE, ENDIF)

条件汇编用于根据条件选择性地汇编代码。

DEBUG EQU 1
IF DEBUG; 如果 DEBUG == 1,汇编这里
ELSE; 否则,汇编这里
ENDIF

4. 伪指令深入讲解

在这里插入图片描述
伪指令(Pseudo-Instructions)是汇编语言中用于辅助编程的特殊指令。它们并不直接生成机器码,而是为汇编器提供额外的信息或控制代码生成的方式。以下是一些常见的伪指令及其用法。

段定义伪指令

段定义伪指令用于定义程序的不同段(Segment),如代码段、数据段、堆栈段等。

  • .CODE:定义代码段,存放可执行指令。
  • .DATA:定义数据段,存放全局变量和静态数据。
  • .STACK:定义堆栈段,存放临时数据和函数调用信息。

例如:

.DATAvar1 DB 10        ; 定义一个字节变量var1,初始值为10.CODEMOV AX, var1      ; 将var1的值加载到AX寄存器.STACK 100h          ; 定义一个大小为100h的堆栈段

内存模型伪指令

内存模型伪指令用于定义程序的内存模型,决定代码段、数据段和堆栈段的大小和位置。

  • .MODEL:定义程序的内存模型,如 SMALL、MEDIUM、LARGE 等。

例如:

.MODEL SMALL          ; 使用小内存模型,代码段和数据段分别位于不同的段

4.1 ORG 指令

ORG 指令用于指定程序或数据在内存中的起始地址。它告诉汇编器从哪个地址开始存放代码或数据。

示例:

ORG 100h       ; 从地址100h开始存放代码

4.2 EQU 指令

EQU 指令用于定义常量,类似于 C 语言中的 #define。它可以将一个符号与一个值关联起来。

示例:

MAX_VALUE EQU 100  ; 定义MAX_VALUE为100
MOV AX, MAX_VALUE  ; 等价于 MOV AX, 100

4.3 ASSUME 指令

ASSUME 指令用于告诉汇编器段寄存器与段的关联关系。它帮助汇编器生成正确的代码,并检查段寄存器的使用是否正确。

示例:

ASSUME CS:CODE, DS:DATA  ; 告诉汇编器CS指向CODE段,DS指向DATA段

4.4 SEGMENT 和 ENDS 指令

SEGMENT 和 ENDS 指令用于定义段。8086程序通常分为代码段、数据段、堆栈段等。

示例:

CODE SEGMENT          ; 定义代码段; 代码部分
CODE ENDS             ; 结束代码段DATA SEGMENT          ; 定义数据段; 数据部分
DATA ENDS             ; 结束数据段

4.5 INCLUDE 指令

INCLUDE 指令用于包含外部文件的内容。它类似于 C 语言中的 #include,可以将多个文件组合成一个完整的程序。

示例:

asm
INCLUDE "IO.ASM"  ; 包含IO.ASM文件

4.6 LOCAL 指令

LOCAL 指令用于在宏中定义局部变量,避免变量名冲突。局部变量的生命周期仅限于宏内部。

示例:

PRINT_NUM MACRO NUMLOCAL TEMP       ; 定义局部变量TEMPMOV TEMP, NUM    ; 使用局部变量; 其他代码
ENDM

4.7 IF、ELSE、ENDIF 指令

IF、ELSE 和 ENDIF 指令用于条件汇编。它们根据条件选择性地汇编代码,类似于 C 语言中的 #if、#else。

示例:

DEBUG EQU 1
IF DEBUG; 如果DEBUG为1,汇编这里
ELSE; 否则,汇编这里
ENDIF

4.8 MACRO 和 ENDM 指令

MACRO 和 ENDM 指令用于定义宏。宏在编译时展开为实际代码,适合用于简化重复性代码。

示例:

PRINT_MSG MACRO MSGMOV AH, 09HLEA DX, MSGINT 21H
ENDM

4.9 STRUC 和 ENDS 指令

STRUC 和 ENDS 指令用于定义结构体。结构体可以将不同类型的数据组合在一起,便于管理和访问。

示例:

PERSON STRUCName DB 20 DUP('$')  ; 名字,20字节Age  DB ?            ; 年龄,1字节Height DW ?          ; 身高,2字节
PERSON ENDS

4.10 PROC 和 ENDP 指令

PROC 和 ENDP 指令用于定义过程(函数)。过程可以将代码模块化,便于复用。

示例:

PRINT_HELLO PROCMOV AH, 09HLEA DX, HELLO_MSGINT 21HRET
PRINT_HELLO ENDP

4.11 INVOKE 指令

INVOKE 指令用于简化函数调用,自动处理参数传递和堆栈管理。它适用于高级汇编编程。

示例:

INVOKE PRINT_HELLO, MSG1  ; 调用PRINT_HELLO函数,传递MSG1参数

4.12 EXTERN 和 PUBLIC 指令

EXTERN 指令用于声明外部符号,PUBLIC 指令用于将符号导出给其他模块使用。

示例:

EXTERN PRINT_HELLO  ; 声明PRINT_HELLO为外部符号
PUBLIC MAIN         ; 将MAIN导出给其他模块

5. 综合示例

以下是一个综合示例,展示了如何使用伪指令和宏实现复杂逻辑。

.MODEL SMALL
.STACK 100H.DATAMSG1 DB 'Hello', '$'MSG2 DB 'World', '$'.CODE
MAIN PROCMOV AX, 10.IF AX == 10PRINT_MSG MSG1.ELSEPRINT_MSG MSG2.ENDIFMOV CX, 5.WHILE CX > 0PRINT_MSG MSG1DEC CX.ENDWRET
MAIN ENDPPRINT_MSG MACRO MSGMOV AH, 09HLEA DX, MSGINT 21H
ENDMEND MAIN

6. 总结

通过使用汇编伪指令和宏,我们可以实现类似于高级语言的结构,如条件判断、循环、结构体和函数等。这些技巧不仅提高了代码的可读性和开发效率,还使得复杂逻辑的实现变得更加简单。希望本文的内容能够帮助你更好地掌握汇编语言的高级编程技巧。

相关文章:

汇编语言高级编程技巧:从基础到进阶

前言 汇编语言作为底层编程语言&#xff0c;直接操作硬件&#xff0c;执行效率高&#xff0c;但编写复杂逻辑时往往显得繁琐。通过使用汇编伪指令和宏&#xff0c;我们可以实现类似于高级语言的结构&#xff0c;如条件判断、循环、结构体和函数等&#xff0c;从而提升代码的可读…...

Android Studio常见问题解决

一、环境配置问题 1. 安装失败 问题描述&#xff1a;在安装过程中&#xff0c;可能会遇到硬件要求不符合、网络问题、安装包损坏、权限不足或安装路径问题等&#xff0c;导致安装失败。 解决方法&#xff1a; 硬件要求&#xff1a;确保设备满足最低硬件要求。 网络问题&…...

【RHCE】LVS-NAT模式负载均衡实验

目录 题目 IP规划 配置IP RS1 RS2 RS3 LVS client 配置RS 配置LVS 安装lvs软件 启动ipvsadm服务 lvs规则匹配 ipvsadm部分选项 客户端测试 总结 题目 使用LVS的 NAT 模式实现 3 台RS的轮询访问&#xff0c;IP地址和主机自己规划。 IP规划 主机IP地址RS1-nat模…...

MacOS下的IntelliJ IDEA突然无法访问本机的虚拟机

今天在开发的过程中&#xff0c;突然遇到一个怪事&#xff0c;之前运行的好好的程序&#xff0c;突然间报无法连接redis服务器&#xff0c;一开始以为是网络问题&#xff0c;在OS的terminal里又是ping 又是telnet的&#xff0c;一切正常&#xff0c;可是程序就是连不上。 挠了半…...

【渗透测试】Fastjson 反序列化漏洞原理(一)

目录 一、Fastjson 是什么二、Fastjson 工作原理三、反序列化漏洞原理1. 反序列化漏洞的定义2. Fastjson 的反序列化机制3. 漏洞成因关注以下几点(1) 动态类型解析(2) 自动调用方法(3) 信任用户输入 4. 漏洞利用过程(1) 寻找可利用的类&#xff08;也称为 "Gadget"&a…...

BM100-K系列开关量输入信号隔离器

1. 产品概述 BM100-K系列开关量输入信号隔离器是一款高性能的信号处理设备&#xff0c;专为工业自动化控制系统设计。该产品支持干接点或NAMUR型接近开关输入&#xff0c;并通过继电器或晶体管实现隔离输出。其核心功能包括输入输出逻辑控制&#xff08;同相/反相可调&#xf…...

c++11 | 细说智能指针

&#x1f493;个人主页&#xff1a;mooridy &#x1f493;专栏地址&#xff1a;C 关注我&#x1f339;&#xff0c;和我一起学习更多计算机的知识 &#x1f51d;&#x1f51d;&#x1f51d; 什么是智能指针&#xff1f; 智能指针是 C 中一种用于管理动态内存的机制。它提供了一…...

谷歌大型推理模型曝光!击败Claude-3.7-Thinking

哎&#xff01;最近推特上的网友在LMSYS Arena 发现了个泄漏的大模型 Nebula&#xff0c;效果据说特别好&#xff0c;打败了o1、o3-mini、Claude 3.7 Thinking等模型&#xff1a; 网友们通过询问和分析 API&#xff0c;发现这似乎是谷歌正在秘密测试的新推理模型&#xff01;推…...

Python FastAPI面试题及参考答案

目录 FastAPI 的优缺点是什么?列举典型应用场景。 解释 FastAPI 的路由机制,如何定义路径参数和查询参数? Pydantic 模型在 FastAPI 中的作用是什么?如何进行数据验证与序列化? FastAPI 如何自动生成 OpenAPI 文档?Swagger UI 和 ReDoc 的区别? 什么是 ASGI?FastAP…...

C++(初阶)(八)——string

string string遍历下标[]迭代器iterator反向迭代器 范围for修改 Capacitysize和lengthmax_sizecapacityclearcapacity的扩容reserveresize Element accessoperator[]和at **Modifiers**:appendinserterasereplace String operationsc_strsubstr和findfind_first_ofgetline 题目…...

计算机操作系统处理机调度(1)

系列文章目录 第三章&#xff1a;处理机调度与死锁 文章目录 系列文章目录前言一、作业和资源&#xff1a;二、处理机调度的层次&#xff1a; 1.高级调度2.初级调度3.中级调度 三、作业调度算法举例&#xff1a;总结 前言 在多道程序的环境下&#xff0c;内存中存在着多个进…...

ctfshow REVERSE re2 萌新赛 内部赛 七夕杯 WP

目录 re2 萌新赛 flag白给 签退 数学不及格 内部赛 批量生产的伪劣产品 来一个派森 好好学习 天天向上 屏幕裂开了 七夕杯 逆向签到 easy_magic re2 ida分析主函数&#xff0c;将flag.txt内容加密写入enflag.txt 这是密钥加密过程 标准rc4加密 简单异或解…...

云服务器怎么设置端口禁用呢?

在云服务器上禁用特定端口是提升安全性的重要措施&#xff0c;可通过云平台安全组和服务器本地防火墙双重配置实现。以下是详细操作指南&#xff1a; 一、通过云平台安全组禁用端口&#xff08;优先推荐&#xff09; 1. 莱卡云/腾讯云/华为云等操作步骤 登录云控制台 进入ECS实…...

V8引擎源码编译踩坑实录

背景 为了解决 view8 代码没有指定版本的 v8 引擎问题GitHub - suleram/View8: View8 - Decompiles serialized V8 objects back into high-level readable code. 但是打出来了exe文件也没啥用&#xff0c;不清楚这个view8是解决啥逆向用的&#xff0c;如果想逆向electron的j…...

享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享技术来高效地支持大量细粒度对象的复用。 一、基础 1 意图 运用共享技术有效地支持大量细粒度的对象 减少内存中对象的数量,节省系统资源 2 适用场景 一个应用程序使用了大量对象 由于对象数量庞大造成很大的…...

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…...

搭建小程序该如何选择服务器?

当企业选择开发属于自己的小程序&#xff0c;则需要服务器的支持&#xff0c;服务器可以帮助加速小程序的上线速度&#xff0c;影响小程序后面的运行是否流畅&#xff0c;同时还会影响用户访问网站时的速度&#xff0c;所以&#xff0c;企业在搭建小程序时该如何选择合适的服务…...

【腾讯云架构师技术沙龙2025.03.22】

大模型技术演进与行业影响分析 日期&#xff1a;2025年3月22日 主讲人&#xff1a;李建忠 《DeepSeek实战驱动行业智变—AI应用寒武纪》 整理&#xff1a;飞书语音转化DeepSeek分析汇总 一、技术演进&#xff1a;从快思考到慢思考 1. 早期争议与能力局限&#xff08;2022-202…...

【jvm】垃圾回收的并行和并发

目录 1. 说明2. 并行&#xff08;Parallel&#xff09;2.1 定义2.2 特点2.3 示例 3. 并发&#xff08;Concurrent&#xff09;3.1 定义3.2 特点3.3 示例 4. 并行与并发的比较 1. 说明 1.在JVM&#xff08;Java虚拟机&#xff09;的垃圾回收机制中&#xff0c;并行&#xff08;…...

Flowable基础表结构

工作流程的相关操作都是操作存储在对应的表结构中&#xff0c;为了能更好的弄清楚Flowable的实现原理和细节&#xff0c;我们有必要先弄清楚Flowable的相关表结构及其作用。在Flowable中的表结构在初始化的时候会创建相关表结构&#xff0c;具体如下&#xff1a; ACT_EVT&…...

为什么不同的损失函数可以提升模型性能?

不同的损失函数可以提升模型性能的原因在于&#xff0c;损失函数是模型优化的核心目标&#xff0c;它直接定义了模型在训练过程中需要最小化的误差或偏差。通过设计不同的损失函数&#xff0c;可以针对具体任务的特点、数据分布的特性以及模型的目标需求进行更精确的优化&#…...

git上传文件到远程库

1.git init 把这个目录变成git可以管理的仓库 2.git status查看文件追踪的情况&#xff08;工作区的文件是红色&#xff09; 3.git add . 添加工作区所有文件到暂存区 再git status&#xff08;此时文件都变成绿色&#xff09; 4.git commit -m 描述性文字 5.git push -u o…...

【产品小白】需求分析的进阶

在产品经理的职业发展中&#xff0c;需求分析能力的提升至关重要。普通和进阶在需求分析层面&#xff0c;往往存在从表面需求到本质问题的认知差异。以下从几个方面探讨这一进阶过程&#xff1a; 1. 需求理解的深度 普通&#xff1a;​通常停留在用户表达的显性需求层面&#…...

机试题汇总

万能头文件 #include<bits/stdc.h> 输入一个年份和月份&#xff0c;输出该月的天数 1.3.5.7.8.10.12 -- 31天 闰年判断&#xff1a; year % 400 0 || (year % 4 0 && year % 100 ! 0&#xff09; 输入字符串&#xff0c;反转输出 #include<iostream&g…...

软件公司高新技术企业代办:机遇与陷阱并存-优雅草卓伊凡

软件公司高新技术企业代办&#xff1a;机遇与陷阱并存-优雅草卓伊凡 在科技飞速发展的当下&#xff0c;软件公司如雨后春笋般涌现&#xff0c;众多企业渴望通过申请高新技术企业来获得政策支持与发展助力。随之而来的&#xff0c;是高新技术企业代办业务的兴起。然而&#xff…...

C#中3维向量的实现

c#中默认不带库三维向量&#xff0c;需要自己安装第三方库&#xff0c;或者可以手动实现一个简易的三维向量。 public struct Vector3D {public double X { get; set; }public double Y { get; set; }public double Z { get; set; }public Vector3D(double x, double y, doubl…...

使用腾龙边缘计算网关内置的AIoTedge+NodeRED接入西门子PLC

腾龙边缘计算网关一体机凭借其强大的性能和丰富的功能&#xff0c;为企业提供了一种高效、灵活的解决方案。本文将详细介绍如何使用腾龙边缘计算网关一体机内置的AIoTedgeNodeRED接入西门子PLC&#xff0c;实现数据的采集、处理与传输。 一、硬件准备与环境搭建 在开始之前&am…...

基于MLA的人类语音情感分类

《DeepSeek大模型高性能核心技术与多模态融合开发&#xff08;人工智能技术丛书&#xff09;》(王晓华)【摘要 书评 试读】- 京东图书 随着信息技术的不断发展&#xff0c;如何让机器识别人类情绪&#xff0c;这个问题受到了学术界和工业界的广泛关注。目前&#xff0c;情绪识…...

Codeforces Round 1012 (Div. 2)

AB略 C 没看懂题意&#xff0c;翻译的问题。t0代表这个人必须找一个没有人的桌子且座位离他最近&#xff0c;t1代表这个人只要找一个空座位就可以了。一个桌子四个座位&#xff0c;t0肯定会坐左下角的那个。首先建立两个小根堆q1代表左下角的座位&#xff0c;q2代表一个桌子的…...

FPGA时钟约束

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Create_clock 前言 时钟周期约束&#xff0c;就是对时钟进行约束。 一、Create_clock create_clock -name <name> -period <period> -waveform …...

二分查找------练习3

1. 题目 2. 思路和题解 这道题看到这个复杂度&#xff0c;就想到应该是使用二分查找进行求解。为了使二分查找的次数尽可能的少&#xff0c;我们需要对较短的数组进行查找&#xff0c;假设就在nums1上进行操作&#xff0c;因此在开始时&#xff0c;要对两个数组的长度进行一个…...

拆解美团2024年报,业务协同、生态共赢、科技创新

从早期的千团大战开始&#xff0c;到后来外卖和社区团购们的激烈角逐&#xff0c;再到现在即时零售战场的群雄争霸&#xff0c;本地生活的硝烟从来都没有真正消散过。 作为本地生活服务领域的“领头羊”——美团&#xff0c;也一直都是其他平台们的挑战目标&#xff0c;几乎所…...

EMS小车技术特点与优势:高效灵活的自动化输送解决方案

北成新控伺服技术丨EMS小车调试视频 EMS小车是一种基于单轨运行的电动输送系统&#xff0c;通过电力驱动实现物料的高效搬运和输送&#xff0c;具有高效灵活、节能环保、多功能集成、行业适配性强等特性&#xff0c;广泛应用于汽车制造、工程机械、家电生产、仓储物流等行业自动…...

GESP2025年3月认证解析

GESP一级 一、单选题 答案&#xff1a;D 解析&#xff1a;DeepSeek 是字节跳动公司开发的人工智能&#xff0c;它具备生成文本的能力&#xff0c;所以可以根据《哪吒 2》的场景生成剧情脚本。A 选项中《哪吒 2》是贺岁片&#xff0c;并非新型操作系统&#xff1b;B 选项 Deep…...

尝试在软考62天前开始成为软件设计师-信息系统安全

安全属性 保密性:最小授权原则(能干活的最小权限)、防暴露(隐藏)、信息加密、物理保密完整性(防篡改):安全协议、校验码、密码校验、数字签名、公证 可用性:综合保障( IP过滤、业务流控制、路由选择控制、审计跟踪)不可抵赖性:数字签名 对称加密 DES :替换移位 3重DESAESR…...

Dify - 架构、部署、扩展与二次开发指南

本文详细解析 Dify 的架构、部署流程、高可用中间件的独立部署方法&#xff0c;以及二次开发流程&#xff0c;帮助开发者更高效地管理和扩展 Dify。 1. 本地DEMO部署 安装Docker&#xff0c;执行下面脚本&#xff0c;可能需要配置镜像。 git clone https://github.com/langge…...

用DrissionPage升级网易云音乐爬虫:更稳定高效地获取歌单音乐(附原码)

一、传统爬虫的痛点分析 原代码使用requests re的方案存在以下局限性&#xff1a; 动态内容缺失&#xff1a;无法获取JavaScript渲染后的页面内容 维护成本高&#xff1a;网页结构变化需频繁调整正则表达式 反爬易触发&#xff1a;简单请求头伪造容易被识别 资源消耗大&am…...

详细Linux中级知识(不断完善)

Nginx服务配置 基于主机名配置 映射IP和主机名 [rootlocalhost ~]# vim /etc/hosts 192.168.72.135 www.chengke.com chengke[rootlocalhost ~]# echo "192.168.72.135 www.xx.com" >> /etc/hosts以上是两种方法&#xff0c;前面是你的IP地址&#xff0c;后…...

Softmax温度调节与注意力缩放:深度神经网络中的平滑艺术

Softmax温度调节与注意力缩放&#xff1a;深度神经网络中的平滑艺术 在深度学习的精密机械中&#xff0c;有些细微的调整机制往往被视为理所当然&#xff0c;却实际上蕴含着深刻的数学洞察和巧妙的工程智慧。今天&#xff0c;我们将探讨两个看似独立却本质相通的机制&#xff…...

python打包辅助工具

python打包辅助工具 PyInstaller 是一个非常流行的 Python 应用程序打包工具&#xff0c;它可以将 Python 脚本及其依赖项打包成独立的可执行文件&#xff0c;方便在没有 Python 环境的机器上运行。关于PyInstaller&#xff0c;可参见&#xff1a;https://blog.csdn.net/cnds1…...

jangow靶机攻略

配置网卡 VMware需要配置&#xff0c;不配置扫不到ip,VirtualBox正常打开ip会直接显示出来 网卡配置都改成NAT 打开虚拟机&#xff0c;第一个框选第二行&#xff0c;回车 选第二个&#xff0c;按e键 进入下一个框后&#xff0c;将ro 后面的修改为 rw signin init/bin/bash 按…...

【大模型LLM第十四篇】Agent学习之anthropic-quickstarts Agent

前言 对于anthropic api的快速使用&#xff0c;在github上有几个example Customer Support Agent&#xff1a;由 Claude 提供支持的客户支持代理。该项目演示了如何利用 Claude 的自然语言理解和生成功能来创建可访问知识库的 AI 辅助客户支持系统。Financial Data Analyst &…...

MonIo部署

1、命令行安装 访问monio官网下载应用程序 # wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250228095516.0.0-1.x86_64.rpm -O minio.rpm # sudo dnf install minio.rpm # mkdir ~/minio # minio server ~/minio --console-address :90012、dock…...

深入理解智能家居领域中RS485、Modbus、KNX 和 Zigbee协议概念

首先详细介绍一下 RS485 和 Modbus 这两个在工业自动化和数据通讯领域中非常重要的概念。 RS485 1. 定义与特点 RS485 标准&#xff1a;RS485 是一种串行通信标准&#xff0c;也称为TIA-485标准&#xff0c;主要用于数据传输。它规定了物理层的电气特性&#xff0c;与数据格式…...

Spring Boot深度解析:从核心原理到最佳实践

一、Spring Boot概述 Spring Boot作为Spring生态中的"游戏规则改变者",自2014年发布以来彻底改变了Java企业级应用的开发方式。它通过四大核心特性显著提升了开发效率: 自动配置:基于类路径和已有Bean的智能默认配置起步依赖:简化Maven/Gradle依赖管理的Starter…...

MapReduce过程中reduce task的数量是如何确定的?

在Hadoop MapReduce及Hive中&#xff0c;numReduceTasks&#xff08;Reduce任务数量&#xff09;的确定由用户显式设置、框架自动估算、作业特性约束三方面共同决定。以下是详细解析及示例&#xff1a; 1. 用户显式设置 用户可以通过代码或配置参数直接指定Reduce任务数&#…...

【euclid】21 3D包围盒模块(box3d.rs)

box3d.rs文件定义了一个三维轴对齐的矩形框&#xff08;Box3D&#xff09;&#xff0c;使用最小和最大坐标来表示。矩形框在坐标类型&#xff08;T&#xff09;和单位&#xff08;U&#xff09;上是泛型的。代码提供了多种方法来操作和查询矩形框&#xff0c;包括求交集、并集、…...

用selenium+ChromeDriver豆瓣电影 肖申克的救赎 短评爬取(pycharm 爬虫)

一、豆瓣电影 肖申克的救赎 短评url=https://movie.douban.com/subject/1292052/comments 二、基本知识点讲解 1. Selenium 的基本使用 Selenium 是一个用于自动化浏览器操作的库,常用于网页测试和爬虫。代码中使用了以下 Selenium 的核心功能: webdriver.Chrome: 启动 Chr…...

mysql入门操作

目录 一&#xff0c;MySQL简述 1&#xff0c;什么是MySQL 2&#xff0c;什么是SQL 3&#xff0c;SQL的分类 二&#xff0c;数据库的数据存储类型 1&#xff0c;数值类型 2&#xff0c;字符串类型 3&#xff0c;时间和日期类型 三&#xff0c;数据库的基本操作 1&…...

机械臂【逆运动学】

回顾正运动学fk&#xff1a; IK&#xff1a; 几何法 代数法 六轴 456轴交再同一点 有解析解 下列公式为正运动学部分结论 a和d是长度 &#xff0c;theta和alfa是角度 **疑问&#xff1a;alfa00&#xff1f; Z轴互相平行 ** 已知末端要在空间XYZ处如下 绿色项&#x…...