PICを作ろう ,逆アセンブラ(2) ~昼休みにまったり進めるプロジェクト~
例によって、文字数制限に引っかかるので、一部省略 //// Reverse assembeler of PIC// (c)2007 BakaOyaji// $Id////`include "../pic_instructions.h"`include "../pic_def.h"module reverse_asm ( instruction_i); input [(`Instruction_Len-1):0] instruction_i;reg [15*8-1:0] str_inst ; // string to monitorreg d ;reg [6:0] f;reg [2:0] b ;reg [7:0] k8 ;reg [10:0] k11 ; always@( instruction_i ) begin d = instruction_i[7] ; f = instruction_i[6:0] ; b = instruction_i[9:7] ; k8 = instruction_i[7:0] ; k11 = instruction_i[10:0] ; casex( instruction_i) // Byte oriented File Register Operations `INST_ADDWF : str_inst = { "ADDWF ", hex2(f), ",", hex(d) } ; `INST_ANDWF : str_inst = { "ANDWF ", hex2(f), ",", hex(d) } ; `INST_CLRF : str_inst = { "CLRF ", hex2(f) } ; `INST_CLRW : str_inst = "CLRW" ; `INST_COMF : str_inst = { "COMF ", hex2(f), ",", hex(d) } ; `INST_DECF : str_inst = { "DECF ", hex2(f), ",", hex(d) } ; `INST_DECFSZ : str_inst = { "DECFSZ ", hex2(f), ",", hex(d) } ; `INST_INCF : str_inst = { "INCF ", hex2(f), ",", hex(d) } ; `INST_INCFSZ : str_inst = { "INCFSZ ", hex2(f), ",", hex(d) } ; `INST_IORWF : str_inst = { "IORWF ", hex2(f), ",", hex(d) } ; `INST_MOVF : str_inst = { "MOVF ", hex2(f), ",", hex(d) } ; `INST_MOVWF : str_inst = { "MOVWF ", hex2(f) } ; `INST_NOP : str_inst = "NOP" ; `INST_RLF : str_inst = { "RLF ", hex2(f), ",", hex(d) } ; `INST_RRF : str_inst = { "RRF ", hex2(f), ",", hex(d) } ; `INST_SUBWF : str_inst = { "SUBWF ", hex2(f), ",", hex(d) } ; `INST_SWAPF : str_inst = { "SWAPF ", hex2(f), ",", hex(d) } ; `INST_XORWF : str_inst = { "XORF ", hex2(f), ",", hex(d) } ; // BIT-Oriented File Register Operations `INST_BCF : str_inst = { "BCF ", hex2(f), ",", hex(b) } ; `INST_BSF : str_inst = { "BSF ", hex2(f), ",", hex(b) } ; `INST_BTFSC : str_inst = { "BTFSC ", hex2(f), ",", hex(b) } ; `INST_BTFSS : str_inst = { "BTFSS ", hex2(f), ",", hex(b) } ; // Literal and control Operations : : default : str_inst = "ERROR!" ; endcase // casex end // alwaysendmodule //reverse_asm()// EOF reverse_asem.v