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

📄 assembler.pl

📁 system C源码 一种替代verilog的语言
💻 PL
字号:
#!/usr/local/bin/perl#/******************************************************************************#    Copyright (c) 1996-1999 Synopsys, Inc.    ALL RIGHTS RESERVED# #  The contents of this file are subject to the restrictions and limitations#  set forth in the SystemC(TM) Open Community License Software Download and#  Use License Version 1.0 (the "License"); you may not use this file except#  in compliance with such restrictions and limitations. You may obtain#  instructions on how to receive a copy of the License at#  http://www.systemc.org/. Software distributed by Original Contributor#  under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF#  ANY KIND, either express or implied. See the License for the specific#  language governing rights and limitations under the License.# #******************************************************************************/#/******************************************************************************# #    assembler.pl -- Simple Assembler in Perl# #    Original Author: Martin Wang. Synopsys, Inc. (mwang@synopsys.com)# #******************************************************************************/# #/******************************************************************************# #    MODIFICATION LOG - modifiers, enter your name, affliation and#    changes you are making here:# #    Modifier Name & Affiliation:#    Description of Modification:# # #******************************************************************************/# #/***************************************************************************# #   Copyright (c) 1998-1999 Synopsys, Inc.#   ALL RIGHTS RESERVED# #*****************************************************************************/##Change the above line for your perlif ($ARGV[1] eq "-code") {	$CODEGEN = 1;}else {	$CODEGEN = 0;}#print "Input source name = $ARGV[0]\n";$pc = 5;$filename = $ARGV[0];open(FP,"$filename"); printf ("0x00000000\n");printf ("0x00000000\n");printf ("0x00000000\n");printf ("0x00000000\n");printf ("0x00000000\n");while(<FP>){	chop($_);	$_ =~ s/\s+/ /g;	($opcode, $destC, $sourceA, $sourceB) = split(/ /,$_);	$destC =~ s/R//g;	$sourceA =~ s/R//g;	$sourceB =~ s/R//g;	if ($opcode =~ /\badd\b/) {		printf ("0x01");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmod\b/) {		printf ("0x0e");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\baddi\b/) {		printf ("0x02");		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\baddc\b/) {		printf ("0x03");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bsub\b/) {		printf ("0x04");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bsubi\b/) {		printf ("0x05");		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bsubc\b/) {		printf ("0x06");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmul\b/) {		printf ("0x07");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bdiv\b/) {		printf ("0x08");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bnand\b/) {		printf ("0x09");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\band\b/) {		printf ("0x0a");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bor\b/) {		printf ("0x0b");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bxor\b/) {		printf ("0x0c");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bnot\b/) {		printf ("0x0d");		printf ("%01x%01x0000",$destC, $sourceA);	}	if ($opcode =~ /\blw\b/) {		printf ("0x4d");		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bsw\b/) {		printf ("0x4e");		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmov\b/) {		printf ("0x0f");		printf ("%01x%01x%01x000",$destC, $sourceA, 0);	}	if ($opcode =~ /\bmovi\b/) {		printf ("0xf1");		printf ("%01x%05x",$destC, $sourceA);	}	if ($opcode =~ /\bbeq\b/) {		printf ("0x10");                $sourceB = 0x0000ffff & $sourceB;		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bbne\b/) {		printf ("0x11");                $sourceB = 0x0000ffff & $sourceB;		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bbgt\b/) {		printf ("0x12");                $sourceB = 0x0000ffff & $sourceB;		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bbge\b/) {		printf ("0x13");                $sourceB = 0x0000ffff & $sourceB;		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bblt\b/) {		printf ("0x14");                $sourceB = 0x0000ffff & $sourceB;		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bble\b/) {		printf ("0x15");                $sourceB = 0x0000ffff & $sourceB;		printf ("%01x%01x%04x",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bj\b/) {		printf ("0x16");                $sourceB = 0x0000ffff & $sourceB;		printf ("%06x",$destC);	}	if ($opcode =~ /\bfadd\b/) {		printf ("0x29");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bfsub\b/) {		printf ("0x2a");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bfmul\b/) {		printf ("0x2b");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bfdiv\b/) {		printf ("0x2c");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmmxadd\b/) {		printf ("0x31");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmmxadds\b/) {		printf ("0x32");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmmxsub\b/) {		printf ("0x33");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmmxsubs\b/) {		printf ("0x34");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bpmadd\b/) {		printf ("0x35");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bpack\b/) {		printf ("0x36");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bmmxck\b/) {		printf ("0x37");		printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB);	}	if ($opcode =~ /\bldpid\b/) {		printf ("0xf0");		printf ("%06x",$destC);	}	if ($opcode =~ /\bflush\b/) {		printf ("0xe0000000");	}	if ($CODEGEN) {		printf ("\n");	} else {		printf("\t/* %s * pc = 0x%x=%d/\n",$_, $pc, $pc);	}	$pc ++;	if ($CODEGEN) {		printf ("0x00000000\n");	} else {		printf ("0x00000000");		printf("\t\t\t\t\t/* REGISTER DUMP * pc = %d/\n", $pc);	}	$pc ++;			}printf ("0xffffffff\n");

⌨️ 快捷键说明

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