0

何日も解決しようとしてきた問題があります。テキストを整数に変換できるかどうか疑問に思っていました。したがって、毎回 textarea("ALC") Load に書き込み、次に textarea("MLC") 001 に書き込みます。また、最後に 1 ~ 15 をバイナリに含めます。たとえば、Load #1 は 001 0 00001 と表示されます。

<html>
<head>
<center><font size ="24"> Simple Assembler </font></center>
<script type="text/javascript">
    var Load = "001";
    var Store = "010";
    var Add = "011";
    var Sub = "100";
    var Equal = "101";
    var Jump = "110";
    var Halt = "111";
    var # = "1";


</script>
</head>
<body>

<form name="AssemblyLanguagecode" action="" method="">
<textarea Id="ALC" style="resize:none;width:35%;height:35%;margin-left:15%" value="">Insert Assembly Language Code</textarea>
<textarea Id="MLC" style="resize:none;width:35%;height:35%;" ReadOnly="True">Machine Language Code will be displayed here</textarea><br  />
<p align="center"><input type="button" value="Assemble" onclick="ALCtoMLC()";" /></p>
</form>


<script type= "text/javascript">

function ALCtoMLC() {   
    var x = document.getElementById("ALC").value;
    x = parseInt(x);
    var bin = x.toString(2);



document.getElementById("MLC").innerHTML = bin;
}

</script>

</body>
</html>
4

4 に答える 4

2

あなたのやりたいことは理解できると思います。「ALC」に入力したものを値のキーとして使用したいとします。その場合、javascript オブジェクトを使用して命令をキーとして割り当て、バイナリを値に割り当てます。そのような

var instruction_set = {
    "Load" : "001",
    "Store" : "010",
    "Add" : "011",
    "Sub" : "100",
    "Equal" : "101",
    "Jump" : "110",
    "Halt" : "111"
}

function ALCtoMLC() {
    var x = document.getElementById("ALC").value;
    x = instruction_set[x];
}
于 2013-03-29T04:12:42.450 に答える
0

トークンを取得する方法があるとしましょう。次に、関数は次のようになります

var tokens = getTokens( document.getElementById("ALC").value ) ;
var vocabulary = { "Load" : "001" , " ... " } ;
var output = []
var i = 0;
var tokensLength = tokens.length;
for ( ; i < tokensLength; i++){
     var token = tokens[i];
     if ( isNaN(token) && typeof(vocabulary[token]) != "undefined" ){
           output.push( vocabulary[token] );

     }else if ( !isNaN(token) ){
          output.push( Number(token).toString(2) );
     }else{
          console.log(["error : unknown token ", token]);
     }
}

document.getElementById("MLC").value = output.join(" "); 

Load は 001 ではなく 0010 に変換されることが質問でわかりました。そのため、ボキャブラリを変更するだけです。

説明 :

  • 入力をトークンに分割する方法があると思います。(ALC 構文はまだ不明です)。
  • トークン配列には、たとえば["Load","#","15", "Load","#","16"]などが含まれます。
  • 次に、トークンをループします。
  • トークンが数値の場合、それをバイナリ文字列に変換します。
  • トークンが語彙で翻訳可能な場合、バイナリ表現に切り替えます。
  • それ以外の場合は、エラーを出力します。

注:出力に「0」を埋め込む必要がある場合-質問で指定されていなくても、使用します"0000".substring(n.length) + n

于 2013-03-29T04:45:28.080 に答える
0

更新しました:

これを試して:

<html>
<head>
<center><font size ="24"> Simple Assembler </font></center>
<script type="text/javascript">
    var Load = "001";
    var Store = "010";
    var Add = "011";
    var Sub = "100";
    var Equal = "101";
    var Jump = "110";
    var Halt = "111";
    var # = "1";



</script>
</head>
<body>

<form name="AssemblyLanguagecode" action="" method="">
<textarea Id="ALC" style="resize:none;width:35%;height:35%;margin-left:15%" value="">Insert Assembly Language Code</textarea>
<textarea Id="MLC" style="resize:none;width:35%;height:35%;" ReadOnly="True">Machine Language Code will be displayed here</textarea><br  />
<p align="center"><input type="button" value="Assemble" onclick="ALCtoMLC();" /></p>
</form>


<script type= "text/javascript">
var Dict = { 'Load':"001",'Store':"010"}; //example Instruction set

function ALCtoMLC() {   
    var x = document.getElementById("ALC").value;
    var instrType = '';
    for (var instr in Dict){
        var ind = x.indexOf(instr);
        if( ind > -1){
            instrType = instrType + Dict[instr];
            x = x.replace(instr,'');
        }
    }
    console.log(instrType, "::", x);
    x = parseInt(x);
    var bin = x.toString(2);
    bin = instrType + bin; 
    document.getElementById("MLC").innerHTML = bin;
}

</script>

</body>
</html>
于 2013-03-29T04:40:06.090 に答える
0

これは私がそれを行う方法です:

var opcodes = {
    Load:  1,
    Store: 2,
    Add:   3,
    Sub:   4,
    Equal: 5,
    Jump:  6,
    Halt:  7
};

var assemblyTextarea = document.querySelector("#assembly");
var machineTextarea = document.querySelector("#machine");

document.querySelector("#assemble").addEventListener("click", function () {
    var instruction = assemblyTextarea.value.split(" ");
    var operand =+ instruction[1].slice(1);
    var opcode = instruction[0];

    var code = opcodes[opcode] * 16 + operand;
    var bits = ("0000000" + code.toString(2)).slice(-8);

    machineTextarea.value = bits;
}, false);

ここでデモを参照してください: http://jsfiddle.net/fs5mb/1/

入力は次のようにフォーマットする必要があります。Load #15

于 2013-03-29T04:45:16.723 に答える