← 返回目录课程:《MSP430单片机汇编指令与固件逆向工程教程》
04

04 MSP430核心指令集:数据传送与算术逻辑指令

梳理MOV、ADD、SUB等指令的二进制编码与执行行为
章节导航 难度:入门类型:概念框架
目标结果

把MSP430核心指令集落到MSP430核心指令集的触发条件、可观察状态和复查材料上,先判断问题从哪里收窄。

关键线索
接口配置流程状态日志
交付材料
架构图代码片段排障表检查清单

指令编码与执行行为:从MOV到ADD

指标对照卡:核心指令集

  • 关键对象:实际技术应用场景里的MSP430核心指令集
  • 问题现象:实际技术应用场景里MSP430核心指令集一开始改动很快,输入需求增加后日志记录显示状态外泄、循环依赖和接口膨胀。
  • 验证动作:先标出谁持有状态、谁发起调用、谁记录日志和失败返回,再按输入条件、阈值标准和处理动作决定接口是否需要拆分。第04节记录前后变化点时,优先确认示例片段、状态记录和MSP430核心指令集是否指向同一个原因。
  • 工程判断:调整前后调用方向更清楚,失败返回、日志记录和输出结果可追踪,旧入口仍可回退,才说明边界收住了。

MSP430核心指令集落地前要同时核对MSP430核心指令集的数据传送、失败路径和算术逻辑指令。

概念块:MSP430核心指令集

MSP430核心指令集用MSP430核心指令集、数据传送、算术逻辑指令连接到MSP430核心指令集的调试、验证和交付动作。

  • MSP430核心指令集
  • 数据传送
  • 算术逻辑指令
  • SUB等指令的二进制编码
MSP430核心指令集:数据传送与算术逻辑指令
抓包视图MSP430核心指令集:数据传送与算术逻辑指观察对象参数变化验证记录MSP430单片机汇编指令与固件逆向MSP430单片机汇编指MSP430工程教程MSP430数据传送与算MOVProtocol Decode: ADDR → CMD → DATA → CRCProtocol…

在MSP430单片机固件逆向工程中,数据传送与算术逻辑指令是最频繁出现的操作码。理解MOV、ADD、SUB等指令的二进制编码结构及其执行行为,是定位关键变量、还原算法逻辑和识别固件边界的前提。本节将围绕这三条核心指令,拆解其机器码格式、寻址模式组合以及执行周期中的典型陷阱

关键判断

逆向MSP430固件时,MOV指令的编码模式直接暴露了操作数来源(寄存器/内存/立即数),而ADD与SUB的进位/借位标志位(C、V、N、Z)是判断循环边界和条件分支的“信号灯”

数据传送指令MOV:编码结构与寻址模式解析

MSP430核心指令集的验收口径

MSP430的MOV指令(操作码0x4xxx)采用双操作数格式,其二进制编码中的源操作数(src)和目标操作数(dst)各占4位,分别指定寄存器编号或寻址模式。逆向分析时,需要重点关注以下三种常见编码变体:

在固件逆向中,MOV指令的步骤(即指令执行后的状态变化)决定了数据流的走向。例如,MOV #0x00, &0x0200会将立即数0写入外设控制寄存器,这通常是初始化或复位动作的信号

实操步骤

在IDA Pro或Ghidra中,对MSP430固件进行反汇编后,优先筛选所有MOV指令中目标操作数为&0x0200-0x025F(通用I/O寄存器地址范围)的条目,这些位置往往是固件与外设交互的“枢纽”

算术逻辑指令ADD与SUB:标志位影响与固件算法还原

ADD(操作码0x5xxx)和SUB(操作码0x8xxx)指令的编码结构与MOV类似,但执行后会影响状态寄存器(SR)中的进位(C)、溢出(V)、零(Z)和负(N)标志位。这些标志位是后续条件跳转指令(如JNZ、JC)的判断依据,因此还原算法时必须追踪标志位的变化

以ADD #0x0001, R10(编码0x50 0x3A 0x01 0x00)为例,执行后若R10原值为0xFFFF,则结果0x0000并置位C标志(进位)。逆向时若看到ADD后紧跟JNC(无进位跳转),即可判断该段代码正在处理无符号数加法溢出。对于SUB指令,其行为等价于ADD加上补码,但标志位C在减法中表示借位(Borrow),即SUB后C=0表示发生借位

常见误区:有符号与无符号运算的混淆

在逆向过程中,容易将ADD和SUB的溢出标志(V)与进位标志(C)混淆。V标志仅在有符号数运算中有效,表示结果超出了有符号数的表示范围(-32768~32767);而C标志用于无符号数运算。判断固件中变量是有符号还是无符号类型,需要观察其后续使用的跳转指令:若使用JN(负跳转)或JGE(大于等于跳转),则变量很可能是有符号类型;若使用JC或JNC,则是无符号类型

常见误区

不要仅凭ADD或SUB指令本身判断变量类型。必须结合其后的条件跳转指令(如JN vs JC)以及上下文中的比较指令(CMP)来综合推断

操作核对

复查MSP430核心指令集时,可以先问一个简单问题:如果只保留指标对照卡和关键对象,别人能不能判断操作已经完成。答案不清楚时,优先补核心指令集与上下游对象的关系,避免把异常归因到模糊的环境差异。下一次执行前先对照关键对象,确认对象、参数、套用条件和输出没有偏离,再决定继续推进还是回到前置条件。复盘顺序可以固定为MSP430核心指令集、核心指令集、关键对象三步,但每一步都要回到命令核对的当前条件,确认结论没有被旧场景带偏。第04节留下的风险提示是现场判断不要脱离命令核对单独判断,否则容易把现象误当成原因。