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

📄 avr_disasm.h

📁 Avr系列单片机反汇编器源代码.GCC编译
💻 H
字号:
/* * vAVRdisasm - AVR program disassembler. * Version 1.0 - January 2007. * Written by Vanya A. Sergeev - <vsergeev@gmail.com> * * Copyright (C) 2007 Vanya A. Sergeev * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.  * * avr_disasm.h - Header file for AVR instruction disassembly into  *  disassembledInstruction structure. * */#ifndef AVR_DISASM_H#define AVR_DISASM_H#include <stdint.h>/* Total number of assembly instructions, Maximum number of operands */#define AVR_TOTAL_INSTRUCTIONS	137#define AVR_MAX_NUM_OPERANDS	2/* Enumeration for all types of AVR Operands */enum AVR_Operand_Types {	OPERAND_NONE, OPERAND_REGISTER_GHOST,	OPERAND_REGISTER, OPERAND_REGISTER_STARTR16,	OPERAND_REGISTER_EVEN_PAIR, OPERAND_REGISTER_EVEN_PAIR_STARTR24,	OPERAND_BRANCH_ADDRESS, OPERAND_RELATIVE_ADDRESS, OPERAND_LONG_ABSOLUTE_ADDRESS,	OPERAND_IO_REGISTER, OPERAND_DATA, OPERAND_COMPLEMENTED_DATA, OPERAND_BIT, OPERAND_WORD_DATA,	OPERAND_X, OPERAND_XP, OPERAND_MX,	OPERAND_Y, OPERAND_YP, OPERAND_MY, OPERAND_YPQ,	OPERAND_Z, OPERAND_ZP, OPERAND_MZ, OPERAND_ZPQ,};/* OPERAND_REGISTER_GHOST: * Some instructions, like clr, only have one one instruction when written in assembly, * such as clr R16. However, when encoded, the instruction becomes eor R16, R16. So although * OPERAND_REGISTER_GHOST has an operand mask, the actual register value is never displayed * in disassembly. *//* These defines go along with AVR_Long_Instruction, and help the program keep track of when * a long instruction has been encountered and when it is to be printed. See avrdisam.c for more * information on these variables. */#define AVR_LONG_INSTRUCTION_FOUND	1#define AVR_LONG_INSTRUCTION_PRINT	2/* Structure for each instruction in the instruction set */struct _instructionInfo {	char mnemonic[7];	/* Bitwise AND mask for just the instruction bits */	uint16_t opcodeMask;	int numOperands;	/* Bitwise AND mask for each operand in the opcode */	uint16_t operandMasks[AVR_MAX_NUM_OPERANDS];	int operandTypes[AVR_MAX_NUM_OPERANDS];};typedef struct _instructionInfo instructionInfo;/* The raw assembed instruction as extracted from the program file. */struct _assembledInstruction {	uint32_t address;	uint16_t opcode;};typedef struct _assembledInstruction assembledInstruction;/* The disassembled/decoded instruction. */struct _disassembledInstruction {	uint32_t address;	/* A convenient pointer to the instructionSet, so we can refer 	 * the general details of the instruction stored in there. */	instructionInfo *instruction;	/* Notice that operands can be signed!	 * This is in order to support the decoding of negative	 * relative branch/jump/call distances. */	int32_t operands[AVR_MAX_NUM_OPERANDS];	/* A pointer to an alternate disassembledInstruction,	 * so we can find all instructions with the same encoding. */	struct _disassembledInstruction *alternateInstruction;};typedef struct _disassembledInstruction disassembledInstruction;/* Disassembles an assembled instruction, including its operands. */int disassembleInstruction(disassembledInstruction *dInstruction, const assembledInstruction aInstruction);#endif

⌨️ 快捷键说明

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