2013-03-29 4 views
0

У меня проблема, которую я пытался решить в течение нескольких дней. Мне было интересно, можно ли превратить текст в целое число. Так что каждый раз я пишу в своем текстовом поле («ALC») Load, затем в текстовом поле («MLC») 001. А также включая от 1-15 до двоичного кода в конце . Нагрузка №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> 
+0

Проблема заключается в том, что я также хочу, чтобы преобразовать текст в конкретных цифрах. Итак, всякий раз, когда я печатаю в первой текстовой области, он появится в следующей области, показывающей номер. E.g. состояния выше Load = "001" Так что, если я написал Load 15, то справа будет показано = 001 1111 – user2220070

+0

, если вы можете дать справедливый пример ввода ALC (без вывода), было бы здорово. например, это #Load (15) или Load # 15 и т. д. То, что вы спрашиваете, является парсером. Как только вы получите токены, ваша работа практически завершена. –

+1

Вход ALC будет Load # 15, а выход будет 001 0 1111 – user2220070

ответ

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> 
+0

О, спасибо, купите мужчину !! Я ценю это – user2220070

+0

Что делать, если я хотел включить многострочную линию, как если бы я написал Load, Store на стороне ввода под друг другом, противоположная сторона тоже будет печатать под собой. – user2220070

+0

@ user2220070: Придется писать дополнительные строки для форматирования. И, скорее всего, изменит более ранний подход к чтению. Потому что в большинстве случаев линии будут такими, как это? Загрузите данные регистра, сохраните данные регистра. Поэтому каждая строка должна быть прочитана, а соответствующие данные должны быть заполнены в правой части. – karthick

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]; 
} 
+1

Я думаю, что они также хотят иметь возможность использовать несколько слов на входе и иметь слова, переведенные на несколько номеров, например, 'Load Store' станет' 001 010'. – icktoofay

+0

Я думаю, что они хотят сделать, чтобы число, спрятанное в двоичном файле, добавлено к нему, чтобы сделать один байт. Таким образом, одна процедура будет «Load 15», которая преобразуется в «00101111». Это общая архитектура набора инструкций. – MattDiamant

+0

Спасибо Мэтту, но я сталкиваюсь с проблемой, что, когда я набираю Load, появится [object Object] 001 – user2220070

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

+0

Любая причина, по которой вы используете document.querySelector вместо document.getElementById? – karthick

+0

Это близко, но вам не нужно «вырезать» при объявлении «операнда». После этого я получил правильный машинный код. – MattDiamant

+0

@karthick - Я ленив. –

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(" "); 

Я вижу в этом вопросе, что нагрузка переводится на 0010 и не 001, так что я бы просто изменить словарь.

Объяснение:

  • Я предполагаю, что у вас есть способ, чтобы разделить входной сигнал на лексемы. (синтаксис ALC до сих пор не ясен).
  • В массиве маркеров будет содержаться, например, ["Load","#","15", "Load","#","16"] и так далее.
  • Затем я петлю на жетонах.
  • Если токен - это число, я превращаю его в двоичную строку.
  • Если токен переводится по лексике - я переключу его на его двоичное представление.
  • В противном случае я печатаю сообщение об ошибке.

Примечание: если вывод должен заполняться с «0» - даже если это не указано в вопросе, я хотел бы использовать "0000".substring(n.length) + n

+0

TLDR - больше объяснения пожалуйста. –

Смежные вопросы