📄 eval_disasm.c
字号:
/*
**********************************************************************************
*
* Project Name: AT89C5131 MCU and Hi-Tech 8051 compiler evaluation
*
* File Name: eval_disasm.c
*
* Copyright 2004++ by Michael J Bauer [www.hotkey.net.au/~mjbauer/free_IP.htm]
*
* Date Created: 2004.08.26
*
* This source module implements a one-pass 8051 code disassembler customised to
* recognise the AT89c5131 SFR enhancements and to output SFR symbollic names in
* place of the respective direct addresses. All other address and data
* operands are output as hex numbers prefixed by a dollar sign ($xx).
*
* The disassembler module takes about 5.5KB of program memory.
*
**********************************************************************************
*/
#include "a89c5131.h" /* MCU-specific definitions */
#include "intrpt.h" /* Compiler-specific interrupt support defs (Hi-Tech C 8051) */
#include "eval_defs.h" /* Eval common definitions */
#include "usb_vuart_lib.h"
#include "usb_drv.h"
#include "usb_cdc_enum.h"
#if DISASM_INCLUDED /* Module compiled if TRUE... see eval_defs.h */
const char * pkszMnemonic[256] =
{
/* 0 */
"NOP",
"AJMP %s",
"LJMP %s",
"RR A",
"INC A",
"INC %s",
"INC @R0",
"INC @R1",
"INC R0",
"INC R1",
"INC R2",
"INC R3",
"INC R4",
"INC R5",
"INC R6",
"INC R7",
/* 1 */
"JBC %s, %s",
"ACALL %s",
"LCALL %s",
"RRC A",
"DEC A",
"DEC %s",
"DEC @R0",
"DEC @R1",
"DEC R0",
"DEC R1",
"DEC R2",
"DEC R3",
"DEC R4",
"DEC R5",
"DEC R6",
"DEC R7",
/* 2 */
"JB %s, %s",
"AJMP %s",
"RET",
"RL A",
"ADD A, #%s",
"ADD A, %s",
"ADD A, @R0",
"ADD A, @R1",
"ADD A, R0",
"ADD A, R1",
"ADD A, R2",
"ADD A, R3",
"ADD A, R4",
"ADD A, R5",
"ADD A, R6",
"ADD A, R7",
/* 3 */
"JNB %s, %s",
"ACALL %s",
"RETI",
"RLC A",
"ADDC A, #%s",
"ADDC A, %s",
"ADDC A, @R0",
"ADDC A, @R1",
"ADDC A, R0",
"ADDC A, R1",
"ADDC A, R2",
"ADDC A, R3",
"ADDC A, R4",
"ADDC A, R5",
"ADDC A, R6",
"ADDC A, R7",
/* 4 */
"JC %s",
"AJMP %s",
"ORL %s, A",
"ORL %s, #%s",
"ORL A, #%s",
"ORL A, %s",
"ORL A, @R0",
"ORL A, @R1",
"ORL A, R0",
"ORL A, R1",
"ORL A, R2",
"ORL A, R3",
"ORL A, R4",
"ORL A, R5",
"ORL A, R6",
"ORL A, R7",
/* 5 */
"JNC %s",
"ACALL %s",
"ANL %s, A",
"ANL %s, #%s",
"ANL A, #%s",
"ANL A, %s",
"ANL A, @R0",
"ANL A, @R1",
"ANL A, R0",
"ANL A, R1",
"ANL A, R2",
"ANL A, R3",
"ANL A, R4",
"ANL A, R5",
"ANL A, R6",
"ANL A, R7",
/* 6 */
"JZ %s",
"AJMP %s",
"XRL %s, A",
"XRL %s, #%s",
"XRL A, #%s",
"XRL A, %s",
"XRL A, @R0",
"XRL A, @R1",
"XRL A, R0",
"XRL A, R1",
"XRL A, R2",
"XRL A, R3",
"XRL A, R4",
"XRL A, R5",
"XRL A, R6",
"XRL A, R7",
/* 7 */
"JNZ %s",
"ACALL %s",
"ORL C, %s",
"JMP @A+DPTR",
"MOV A, #%s",
"MOV %s, #%s",
"MOV @R0, #%s",
"MOV @R1, #%s",
"MOV R0, #%s",
"MOV R1, #%s",
"MOV R2, #%s",
"MOV R3, #%s",
"MOV R4, #%s",
"MOV R5, #%s",
"MOV R6, #%s",
"MOV R7, #%s",
/* 8 */
"SJMP %s",
"AJMP %s",
"ANL C, %s",
"MOVC A, @A+PC",
"DIV AB",
"MOV %s, %s",
"MOV %s, @R0",
"MOV %s, @R1",
"MOV %s, R0",
"MOV %s, R1",
"MOV %s, R2",
"MOV %s, R3",
"MOV %s, R4",
"MOV %s, R5",
"MOV %s, R6",
"MOV %s, R7",
/* 9 */
"MOV DPTR, #%s",
"ACALL %s",
"MOV %s, C",
"MOVC A, @A+DPTR",
"SUBB A, #%s",
"SUBB A, %s",
"SUBB A, @R0",
"SUBB A, @R1",
"SUBB A, R0",
"SUBB A, R1",
"SUBB A, R2",
"SUBB A, R3",
"SUBB A, R4",
"SUBB A, R5",
"SUBB A, R6",
"SUBB A, R7",
/* A */
"ORL C, /%s",
"AJMP %s",
"MOV C, %s",
"INC DPTR",
"MUL AB",
"???", /* A5 is an undefined opcode */
"MOV @R0, %s",
"MOV @R1, %s",
"MOV R0, %s",
"MOV R1, %s",
"MOV R2, %s",
"MOV R3, %s",
"MOV R4, %s",
"MOV R5, %s",
"MOV R6, %s",
"MOV R7, %s",
/* B */
"ANL C, /%s",
"ACALL %s",
"CPL %s",
"CPL C",
"CJNE A, #%s, %s",
"CJNE A, %s, %s",
"CJNE @R0, #%s, %s",
"CJNE @R1, #%s, %s",
"CJNE R0, #%s, %s",
"CJNE R1, #%s, %s",
"CJNE R2, #%s, %s",
"CJNE R3, #%s, %s",
"CJNE R4, #%s, %s",
"CJNE R5, #%s, %s",
"CJNE R6, #%s, %s",
"CJNE R7, #%s, %s",
/* C */
"PUSH %s",
"AJMP %s",
"CLR %s",
"CLR C",
"SWAP A",
"XCH A, %s",
"XCH A, @R0",
"XCH A, @R1",
"XCH A, R0",
"XCH A, R1",
"XCH A, R2",
"XCH A, R3",
"XCH A, R4",
"XCH A, R5",
"XCH A, R6",
"XCH A, R7",
/* D */
"POP %s",
"ACALL %s",
"SETB %s",
"SETB C",
"DA A",
"DJNZ %s, %s",
"XCHD A, @R0",
"XCHD A, @R1",
"DJNZ R0, %s",
"DJNZ R1, %s",
"DJNZ R2, %s",
"DJNZ R3, %s",
"DJNZ R4, %s",
"DJNZ R5, %s",
"DJNZ R6, %s",
"DJNZ R7, %s",
/* E */
"MOVX A, @DPTR",
"AJMP %s",
"MOVX A, @R0",
"MOVX A, @R1",
"CLR A",
"MOV A, %s",
"MOV A, @R0",
"MOV A, @R1",
"MOV A, R0",
"MOV A, R1",
"MOV A, R2",
"MOV A, R3",
"MOV A, R4",
"MOV A, R5",
"MOV A, R6",
"MOV A, R7",
/* F */
"MOVX @DPTR, A",
"ACALL %s",
"MOVX @R0, A",
"MOVX @R1, A",
"CPL A",
"MOV %s, A",
"MOV @R0, A",
"MOV @R1, A",
"MOV R0, A",
"MOV R1, A",
"MOV R2, A",
"MOV R3, A",
"MOV R4, A",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -