registerinput.html

来自「MIPS Simulator assembly languge.」· HTML 代码 · 共 499 行 · 第 1/2 页

HTML
499
字号
<!--		     File: Registers.html	
----
----	   Page for managing Register input and display 
----   Author:  Dr. D. Hunkins
----   Date:    August 2004
----   Modified:   4 June 05
---->
<html>
<head>
<LINK HREF="pathsim.css" REL="stylesheet" type="text/css">
<title>Register Input</title>
<script>

// Communication of a register index from this script to the Java applet
// is as a decimal integer BUT coming back, it is a decimal string
// since calls to the Java Script from the applet can only pass 
// String parameters

   function isRegisterNumber(registerNumber) {
     for (var i=0; i<registerNumber.length; i++)
       if ((registerNumber.charAt(i) < "0") ||
           (registerNumber.charAt(i) > "9")) return false;
     var value = decimalStringToUnsigned(new String(registerNumber));
     if ((value < 0) || (value > 31)) return false;
     return true;
   }

   function valueOf(c) {
     if (("0" <= c) && (c <= "9")) return (c-"0");
   }
          
   function decimalStringToUnsigned(registerNumber) {
     var value = 0;
     for (var i=0; i<registerNumber.length; i++) 
       value = 10*value + valueOf(registerNumber.charAt(i));
     return value;
   }

   function unsignedToDecimalString(number, numberOfDigits) {
      var result  = "";
	var intermediateValue = number;
	var digitValue;
	var digitCount = 0;
      var temp;
	while (true){
	  digitValue = (intermediateValue % 10);
	  switch (digitValue){
	    case  0: result = "0" + result;
	 		 break;
	    case  1: result = "1" + result;
		       break;
	    case  2: result = "2" + result;
		       break;               
	    case  3: result = "3" + result;
		       break;
	    case  4: result = "4" + result;
			 break;
	    case  5: result = "5" + result;
			 break;
	    case  6: result = "6" + result;
			 break;
	    case  7: result = "7" + result;
			 break;
	    case  8: result = "8" + result;
			 break;
	    case  9: result = "9" + result;
			 break;
	  }

	  digitCount++;
	  temp = "" + (intermediateValue /= 10); 
        if (temp.indexOf(".") == 0)
           intermediateValue = 0;
        else if (temp.indexOf(".") == -1) {
            temp = temp.substr(0);
            intermediateValue = Number(temp);
        }
        else {
           temp = temp.substr(0, temp.indexOf("."));
           intermediateValue = Number(temp);
        }
	  if ((intermediateValue == 0) || (digitCount == numberOfDigits)) break;
	}

	while (result.length < numberOfDigits)
	   result = "0" + result;
	return result;
   }

   function load(registerValues)  {
 	var temp  = new Array();
	var temp2 = new Array();
      var index = 0;
	var word;
	var registerNumber;
	var registerNumberValue;

      if (registerValues.length == 0) return;

      while (temp.length > 0) 
        temp.pop();
      while (temp2.length > 0)
         temp2.pop();

      if (top.getBrowserName() == "Microsoft Internet Explorer") 
         temp = registerValues.split(/\n/);		// For IE: split on newline
      else {						// For Netscape: replace \n with space\n and split on \n
         var valueString = "";
         for(i=0; i<registerValues.length; i++)
           if (registerValues.charAt(i) == "\n")
              valueString = valueString + " \n";
           else
              valueString = valueString + registerValues.charAt(i)
         temp = valueString.split(/\n/);		
      }

	for (var i=0; i<temp.length; i++) {
         temp[i] = temp[i].substr(0, temp[i].length-1);
         var line = "";
         var index = 0;
         while ((index < temp[i].length) && (temp[i].charAt(index) == " "))
            index++
         if (temp[i].substr(index).length > 0)
             temp2.push(temp[i].substr(index));
      }

      for (var i=0; i<temp2.length; i++)
        temp2[i] = temp2[i].toUpperCase();

	for (var i=0; i<temp2.length; i++) {
         index = temp2[i].indexOf(":");
         if ((index == -1) || (index == 0)) {
            alert("ERROR: Register value " + temp2[i] + 
                  "\nMust be given with a register number" +
                  "\nRegister Loading Terminated!");
            return;
         }

         registerNumber = temp2[i].substr(0, index);
         if (!isRegisterNumber(registerNumber)) {
           alert("ERROR: Register Number " + registerNumber + 
                 "\nmust be an decimal number between 1 and 31.\nRegister Loading Terminated!");
           return;   
         }
         else if (decimalStringToUnsigned(new String(registerNumber)) == 0) {
            alert("ERROR: Register 0 is Constant Holding 00000000" +
                "\n       Its Value CANNOT be Changed!" +
                "\nRegister Loading Terminated!");
            return;   
         }
      }

      for (var i=0; i < temp2.length; i++) {
        index = temp2[i].indexOf(":");
        word = temp2[i].substr(index+1);
        if (word.length != 8) {
          alert("ERROR: " + word +
                "\nMust have 8 hex digits!!\nRegister Loading Terminated!");
          return;
        }
        for (var j=0; j<word.length; j++) {
          var digit = word.charAt(j);
          if (((digit < "0") || (digit > "9")) &&
              ((digit < "A") || (digit > "F"))) {
              alert("ERROR: " + word + 
                    "\nHas an ILLEGAL character (not a Hex digit)!!\nRegister Loading Terminated!");
              return;
          }
        }
      } 

      this.zeroRegisters();

      for (var i=0; i < temp2.length; i++) {
        index = temp2[i].indexOf(":");
        var register      = temp2[i].substr(0, index);
        var registerIndex = decimalStringToUnsigned(new String(register));
        if (registerIndex != 0) {
           word = temp2[i].substr(index+1);
	     top.DataPath.setRegister(word, registerIndex);
           this.registerValues[registerIndex] = word;
           this.lastLoaded[registerIndex] = word;
        }
      }

      this.showRegisters00();
      alert("Registers Successfully Loaded!");
   }

  function zeroRegisters() {
    for (var i=0; i<this.numberOfRegisters; i++) {
      this.registerValues[i] = "00000000";
      this.lastLoaded[i]     = "00000000";
    }
    top.DataPath.zeroRegisters();
  }

  function setRegister(registerIndex, value) {
     this.registerValues[registerIndex] = value;
  }

  function reLoad() {
     registerList.reLoad();
  }

  function listReload() {
     for (var i=0; i<this.numberOfRegisters; i++) {
        this.registerValues[i] = this.lastLoaded[i];
        if (this.lastLoaded[i] != 0)
           top.DataPath.setRegister(this.lastLoaded[i], i);
     }
     this.showRegisters00();
  }

  function returnedRegisterAccess(read1, read2, write, value) {
     var read1Index = decimalStringToUnsigned(new String(read1));
     var read2Index = decimalStringToUnsigned(new String(read2));
     var writeString = new String(write);
     if (writeString.length > 0) {
        var writeIndex = decimalStringToUnsigned(writeString);
        registerList.setRegister(writeIndex, value);
        if (read1Index == read2Index) {
           if (writeIndex == read1Index) {
              registerList.showRegisters01(writeIndex);
           }
           else {
              registerList.showRegisters11(read1Index, writeIndex);        
           }
        }
        else if (writeIndex == read1Index) {
           registerList.showRegisters11(read2Index, writeIndex);
        }
        else if (writeIndex == read2Index) {
           registerList.showRegisters11(read1Index, writeIndex);
        }
        else {
           registerList.showRegisters21(read1Index, read2Index, writeIndex);
        }
     }
     else {
        if (read1Index == read2Index) {
           registerList.showRegisters10(read1Index);
        }
        else if (read1Index < read2Index) {
           registerList.showRegisters20(read1Index, read2Index);
        }
        else {
           registerList.showRegisters20(read2Index, read1Index);
        }
     }

⌨️ 快捷键说明

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