⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d51.cpp

📁 反汇编MSC-51系列单片机源码!目前支持BIN文件,要想支持HEX格式!大家可以自己下载去修改!目前版本没有识别DATA段功能!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//=====================================================================================
//
//	模块:	反汇编 MCS-51系列代码
//
//	版本:	1.00
//
//	日期:	2007-07-10
//
//	作者:	施探宇
//
//	说明:	d51 -n rom.bin src.asm
//			d51 -Annn:nnn rom.hex src.asm
//			d51 -Annn,nnn rom.hex src.asm
//=====================================================================================
#include "stdafx.h"

//	保存标号个数
#define MAX_LABELS			(1024)

//	代码地址上限
#define MAX_ADDRESS			(0x10000)

//	最长代码字节(字节对齐)
#define CODE_MAX_BYTES		4

//  普通代码长度(字节对齐)
#define CODE_BYTES			1

//	代码位数(实际指令位数 8 - 24)
#define CODE_BITS			8

//	默认的数据格式
#define FMT_BIT				_T("0x%02x")
#define FMT_DAT				_T("#%03xH")
#define FMT_PTR				_T("0x%02x")
#define FMT_RN				_T("R%d")
#define FMT_RI				_T("@R%d")
#define FMT_LAB				_T("lab_%04x")
#define FMT_LABCR			FMT_LAB _T(":\n")

//	函数结尾处理
#define FMT_RET				_T("\n;--------------------------------------------------------------------------------------") \
							_T("\n; Function:") \
							_T("\n;--------------------------------------------------------------------------------------")

//-----------------------------------------------------------------------------------
//	长整型,所有指令都要改长,这样改成别语言就方便;
//-----------------------------------------------------------------------------------
typedef unsigned long		UINT64;
typedef unsigned int		UINT32;
typedef unsigned short		UINT16;
typedef unsigned char		UINT8;
typedef unsigned char		BYTE;

//-----------------------------------------------------------------------------------
//	反汇编转换表
//-----------------------------------------------------------------------------------
typedef struct tagDASM
{
	//	代码值
	UINT64	CodeData;
	//	代码位(比较匹配)
	UINT64	CodeMask;
	//	寄存器(专用寄存器)
	UINT64	RegsMask;
	//	比特位(内部地址)
	UINT64	BitsMask;
	//	数据位(立即数)
	UINT64	DataMask;
	//	指针位(数据指针)
	UINT64	PtrsMask;
	//	标号位(代码地址)
	UINT64	LabsMask;
	//	字节数(多字节指令)
	UINT8	nBytes;
	//	输出格式
	_TCHAR *pCodeFmt;
}DASM_TBL;

//-----------------------------------------------------------------------------------
//	寄存器名称表
//-----------------------------------------------------------------------------------
typedef struct tagREGS
{
	UINT8 uAddr;
	_TCHAR *pName;

}REGS_TBL;

//-----------------------------------------------------------------------------------
//	代码转换有优先顺序:格式为 printf("CODE %S,%S,%S",REG,BIT,DAT)
//-----------------------------------------------------------------------------------
//	MCS-51 指令
//	共256指令.
//	所有指令宽度需要转换为64位宽.
//
// Lab11 ->code_addr(11位地址)
// Lab   ->code_addr(16位地址)
// Deret ->code_addr(08位地址)
// Ptr   ->data_addr(16位指针)
// Bit   ->data_addr(8位指针)
//
//-----------------------------------------------------------------------------------
DASM_TBL tblCode[]=
{
	//	操作码		有效位		寄存器		比特位		数据位		指针位		标号位		字节	格式
	//------------------------------------------------------------------------------------------------------------------------------------------------
	//  CODE-ID		CODE-MASK	REGS-MASK	BITS-MASK	DATS-MASK	PTRS-MASK	LABS-MASK	BYTES,	FORMAT
	//------------------------------------------------------------------------------------------------------------------------------------------------
	{	0x000000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("NOP")},				// NOP
	{	0x010000,	0x1f0000,	0x000000,	0x000000,	0x000000,	0x000000,	0xe0ff00,	0x2,	_T("AJMP    %s")},		// AJMP Lab11
	{	0x020000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ffff,	0x3,	_T("LJMP    %s")},		// LJMP Lab16
	{	0x030000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("RR      A")},		// RR	A
	{	0x040000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("INC     A")},		// INC	A
	{	0x050000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("INC     %s")},		// INC	Ptr
	{	0x060000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("INC     %s")},		// INC	@Ri
	{	0x080000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("INC     %s")},		// INC	Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x100000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x0000ff,	0x3,	_T("JBC     %s,%s")},	// JBC	Bit,Lab8
	{	0x110000,	0x1f0000,	0x000000,	0x000000,	0x000000,	0x000000,	0xe0ff00,	0x2,	_T("ACALL   %s")},		// ACALL Lab11
	{	0x120000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ffff,	0x3,	_T("LCALL   %s")},		// LCALL Lab
	{	0x130000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("RRC     A")},		// RRC	A
	{	0x140000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("DEC     A")},		// DEC	A
	{	0x150000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("DEC     %s")},		// DEC	Ptr
	{	0x160000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("DEC     %s")},		// DEC	@Ri
	{	0x180000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("DEC     %s")},		// DEC	Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x200000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x0000ff,	0x3,	_T("JB      %s,%s")},	// JB	Bit,Lab8
	{	0x220000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("RET") FMT_RET},		// RET
	{	0x230000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("RL      A")},		// RL	A
	{	0x240000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("ADD     A,%s")},	// ADD	A,#data
	{	0x250000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("ADD     A,%s")},	// ADD	A,Ptr
	{	0x260000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ADD     A,%s")},	// ADD	A,@Ri
	{	0x280000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ADD     A,%s")},	// ADD	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x300000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x0000ff,	0x3,	_T("JNB     %s,%s")},	// JNB	bit,Lab8
	{	0x320000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("RETI") FMT_RET},	// RETI
	{	0x330000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("RLC     A")},		// RLC	A
	{	0x340000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("ADC     A,%s")},	// ADC	A,#data
	{	0x350000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("ADC     A,%s")},	// ADC	A,Ptr
	{	0x360000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ADC     A,%s")},	// ADC	A,@Ri
	{	0x380000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ADC     A,%s")},	// ADC	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x400000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x2,	_T("JC      %s")},		// JC	Lab
	{	0x420000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("ORL     %s,A")},	// ORL	Ptr,A
	{	0x430000,	0xff0000,	0x000000,	0x000000,	0x0000ff,	0x00ff00,	0x000000,	0x3,	_T("ORL     %s,%s")},	// ORL	Ptr,#data
	{	0x440000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("ORL     A,%s")},	// ORL	A,#data
	{	0x450000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("ORL     A,%s")},	// ORL	A,Ptr
	{	0x460000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ORL     A,%s")},	// ORL	A,@Ri
	{	0x480000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ORL     A,%s")},	// ORL	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x500000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x2,	_T("JNC     %s")},		// JNC	Lab
	{	0x520000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("ANL     %s,A")},	// ANL	Ptr,A
	{	0x530000,	0xff0000,	0x000000,	0x000000,	0x0000ff,	0x00ff00,	0x000000,	0x3,	_T("ANL     %s,%s")},	// ANL	Ptr,#data
	{	0x540000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("ANL     A,%s")},	// ANL	A,#data
	{	0x550000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("ANL     A,%s")},	// ANL	A,Ptr
	{	0x560000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ANL     A,%s")},	// ANL	A,@Ri
	{	0x580000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("ANL     A,%s")},	// ANL	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x600000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x2,	_T("JZ      %s")},		// JZ	Lab
	{	0x620000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("XRL     %s,A")},	// XRL	Ptr,A
	{	0x630000,	0xff0000,	0x000000,	0x000000,	0x0000ff,	0x00ff00,	0x000000,	0x3,	_T("XRL     %s,%s")},	// XRL	Ptr,#data
	{	0x640000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("XRL     A,%s")},	// XRL	A,#data
	{	0x650000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("XRL     A,%s")},	// XRL	A,Ptr
	{	0x660000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("XRL     A,%s")},	// XRL	A,@Ri
	{	0x680000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("XRL     A,%s")},	// XRL	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x700000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x2,	_T("JNZ     %s")},		// JNZ	Lab
	{	0x720000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x2,	_T("ORL     C,%s")},	// ORL	C,Bit
	{	0x730000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("JMP     @A + DPTR")},// JMP	@A+DPTR
	{	0x740000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("MOV     A,%s")},	// MOV	A,#data
	{	0x750000,	0xff0000,	0x000000,	0x000000,	0x0000ff,	0x00ff00,	0x000000,	0x3,	_T("MOV     %s,%s")},	// MOV	Ptr,#data
	{	0x760000,	0xfe0000,	0x010000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("MOV     %s,A")},	// MOV	@Ri,#data
	{	0x780000,	0xf80000,	0x070000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("MOV     %s,%s")},	// MOV	Rn,#data
//----------------------------------------------------------------------------------------------------------------------------------	
	{	0x800000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x2,	_T("SJMP    %s")},		// SJMP Lab
	{	0x820000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x2,	_T("ANL     C,%s")},	// ANL	C,bit
	{	0x830000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOVC    A,@A + PC")},// MOVC A,@A+PC
	{	0x840000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("DIV     AB")},		// DIV	AB
	{	0x850000,	0xff0000,	0x000000,	0x000000,	0x0000ff,	0x00ff00,	0x000000,	0x3,	_T("MOV     %s,%s")},	// MOV	Ptr,Ptr // 两个指针
	{	0x860000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("MOV     %s,%s")},	// MOV	Ptr,@Ri //
	{	0x880000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("MOV     %s,%s")},	// MOV	Ptr,Rn  // 
//----------------------------------------------------------------------------------------------------------------------------------
	{	0x900000,	0xff0000,	0x000000,	0x000000,	0x00ffff,	0x000000,	0x000000,	0x3,	_T("MOV     DPTR,%s")},	// MOV	DPTR,#data
	{	0x920000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x2,	_T("MOV     %s,C")},	// MOV	Bit,C
	{	0x930000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOVC    A,@A + DPTR")},//MOVC	A,@A+DPTR
	{	0x940000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x2,	_T("SUBB    A,%s")},	// SUBB A,#data
	{	0x950000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("SUBB    A,%s")},	// SUBB A,Ptr
	{	0x960000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("SUBB    A,%s")},	// SUBB A,@Ri
	{	0x980000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("SUBB    A,%s")},	// SUBB A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0xa00000,	0xff0000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x000000,	0x2,	_T("ORL     C,%s")},	// ORL	C,bit
	{	0xa20000,	0xff0000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x000000,	0x2,	_T("MOV     C,%s")},	// MOV	C,bit
	{	0xa30000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("INC     DPTR")},	// INC	DPTR
	{	0xa40000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MUL     AB")},		// INC	DPTR
	//  0xa50000 -- 保留指令
	{	0xa60000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("MOV     %s,%s")},	// MOV	@Ri,Ptr	// 注意跟86反向
	{	0xa80000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("MOV     %s,%s")},	// MOV	Rn,Ptr	// 注意跟88反向
//----------------------------------------------------------------------------------------------------------------------------------
	{	0xb00000,	0xff0000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x000000,	0x2,	_T("ANL     C,%s")},	// MOV	C,bit
	{	0xb20000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x2,	_T("CPL     %s")},		// CPL	bit
	{	0xb30000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("CPL     C")},		// CPL	C
	{	0xb40000,	0xff0000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x0000ff,	0x3,	_T("CJNE    A,%s,%s")}, // CJNE A,#data,Lab
	{	0xb50000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x0000ff,	0x3,	_T("CJNE    A,%s,%s")},	// CJNE A,Ptr,Lab
	{	0xb60000,	0xfe0000,	0x010000,	0x000000,	0x00ff00,	0x000000,	0x0000ff,	0x3,	_T("CJNE    %s,%s,%s")},// CJNE @Ri,#data,Lab
	{	0xb80000,	0xf80000,	0x070000,	0x000000,	0x00ff00,	0x000000,	0x0000ff,	0x3,	_T("CJNE    %s,%s,%s")},// CJNE Rn,#data,Lab
//----------------------------------------------------------------------------------------------------------------------------------
	{	0xc00000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("PUSH    %s")},		// PUSH	Ptr
	{	0xc20000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("CLR     %s")},		// CLR	Ptr
	{	0xc30000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("CLR     C")},		// CLR	C
	{	0xc40000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("SWAP    A")},		// SWAP	A
	{	0xc50000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("XCH     A,%s")},	// XCH	A,Ptr
	{	0xc60000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("XCH     A,%s")},	// XCH	A,@Ri
	{	0xc80000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("XCH     A,%s")},	// XCH	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0xd00000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("POP     %s")},		// POP	Ptr
	{	0xd20000,	0xff0000,	0x000000,	0x00ff00,	0x000000,	0x000000,	0x000000,	0x2,	_T("SETB    %s")},		// SETB	Bi
	{	0xd30000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("SETB    C")},		// SETB	C
	{	0xd40000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("DA      A")},		// DA	A
	{	0xd50000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x0000ff,	0x3,	_T("DJNZ    %s,%s")},	// DJNZ	Ptr,Lab
	{	0xd60000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("XCHD    A,%s")},	// XCHD	A,@Ri
	{	0xd80000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x2,	_T("DJNZ    %s,%s")},	// DJNZ	Rn,Lab
//----------------------------------------------------------------------------------------------------------------------------------
	{	0xe00000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOVX    A,@DPTR")},	// MOVX	A,@DPTR
	{	0xe20000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOVX    A,%s")},	// MOVX	A,@Ri
	{	0xe40000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("CLR     A")},		// CLR	A
	{	0xe50000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("MOV     A,%s")},	// MOV	A,Ptr
	{	0xe60000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOV     A,%s")},	// MOV	A,@Ri
	{	0xe80000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOV     A,%s")},	// MOV	A,Rn
//----------------------------------------------------------------------------------------------------------------------------------
	{	0xf00000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOVX    @DPTR,A")},	// MOV	A,Rn
	{	0xf20000,	0xff0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOVX    %s,A")},	// MOV	@Ri,A
	{	0xf40000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("CPL     A")},		// CPL	A
	{	0xf50000,	0xff0000,	0x000000,	0x000000,	0x000000,	0x00ff00,	0x000000,	0x2,	_T("MOV     %s,A")},	// MOV	Ptr,A
	{	0xf60000,	0xfe0000,	0x010000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOV     %s,A")},	// MOV	@Ri,A
	{	0xf80000,	0xf80000,	0x070000,	0x000000,	0x000000,	0x000000,	0x000000,	0x1,	_T("MOV     %s,A")},	// MOV	Rn,A
};

//-----------------------------------------------------------------------------------
//	寄存器名称,和地址
//-----------------------------------------------------------------------------------
REGS_TBL arrRegs[]=
{
	{0xE0,_T("ACC")},
	{0xF0,_T("B")},
	{0xD0,_T("PSW")},
	{0xF0,_T("SP")},
	{0x82,_T("DPL")},
	{0x83,_T("DPH")},
	{0x80,_T("P0")},
	{0x90,_T("P1")},
	{0xA0,_T("P2")},
	{0xB0,_T("P3")},
	{0xB8,_T("IP")},
	{0xA8,_T("IE")},
	{0x89,_T("TMOD")},
	{0x88,_T("TCON")},
	{0xA8,_T("T2CON")},
	{0x8C,_T("TH0")},
	{0x8A,_T("TL0")},
	{0x8D,_T("TH1")},
	{0x8B,_T("TL1")},
	{0xCD,_T("TH2")},
	{0xCC,_T("TL2")},
	{0xCB,_T("RCAP2H")},
	{0xCA,_T("RCAP2L")},
	{0x98,_T("SCON")},
	{0x99,_T("SBUF")},
	{0x87,_T("TR1")},
	{0x8e,_T("PCON")},
};

//-----------------------------------------------------------------------------------
//	默认文件名称
//-----------------------------------------------------------------------------------
_TCHAR *pStart = _T("");
_TCHAR *pBinFile = _T("rom.bin");
_TCHAR *pSrcFile = _T("src.asm");
_TCHAR buff[]=_T("0x0000");

//	文件指针
FILE *fpBin;
FILE *fpSrc;

//	默认起始地址:
int iCodeStart = 0;

//	参数序号
int idArgv = 1;

//	指令缓冲区
BYTE pCodeBuff[CODE_MAX_BYTES];

//	存储标号和函数地址
UINT64 useLabels[MAX_LABELS];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -