Javascript 如何使text=整数
我有一个问题,我已经努力解决了好几天了。 我想知道是否有可能让一个文本变成一个整数。 所以每次我在文本区域(“ALC”)加载中写入,然后在文本区域(“MLC”)001上写入。最后还包括1-15到二进制 例如,负载#1将显示001 0 00001Javascript 如何使text=整数,javascript,Javascript,我有一个问题,我已经努力解决了好几天了。 我想知道是否有可能让一个文本变成一个整数。 所以每次我在文本区域(“ALC”)加载中写入,然后在文本区域(“MLC”)001上写入。最后还包括1-15到二进制 例如,负载#1将显示001 0 00001 <html> <head> <center><font size ="24"> Simple Assembler </font></center> <script type="
<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>
简单汇编程序
var Load=“001”;
var Store=“010”;
var Add=“011”;
var Sub=“100”;
var Equal=“101”;
var Jump=“110”;
var Halt=“111”;
变量#=“1”;
插入汇编语言代码
机器语言代码将显示在此处
我想我明白你想做什么。您希望使用您在“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];
}
更新:
试试这个:
<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>
简单汇编程序
var Load=“001”;
var Store=“010”;
var Add=“011”;
var Sub=“100”;
var Equal=“101”;
var Jump=“110”;
var Halt=“111”;
变量#=“1”;
插入汇编语言代码
机器语言代码将显示在此处
var Dict={'Load':“001”,'Store':“010”}//示例指令集
函数ALCtoMLC(){
var x=document.getElementById(“ALC”).value;
var instrType='';
for(在Dict中的var instr){
var ind=x.indexOf(仪表);
如果(ind>-1){
instrType=instrType+Dict[instr];
x=x。更换(仪表,);
}
}
log(instrType,:,,x);
x=parseInt(x);
var bin=x.toString(2);
bin=instrType+bin;
document.getElementById(“MLC”).innerHTML=bin;
}
我会这样做:
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);
请参见此处的演示:
输入的格式应如下:Load#15
假设您有一种获取令牌的方法。那么你的函数应该是这样的
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(" ");
var-tokens=getTokens(document.getElementById(“ALC”).value);
变量词汇={“加载”:“001”,“…”};
变量输出=[]
var i=0;
var tokensLength=tokens.length;
对于(;i
我在问题中看到Load转换为0010而不是001,所以我只需修改词汇表
说明:
- 我假设您有一种方法可以将输入拆分为令牌。(我还不清楚ALC的语法)李>
- 令牌数组将包含,例如
[“加载”、“#”、“15”、“加载”、“#”、“16”]
等等
- 然后我在代币上循环李>
- 如果一个标记是一个数字-我把它转换成二进制字符串李>
- 如果标记可以通过词汇表进行翻译,我将其切换为二进制表示李>
- 否则我会打印一个错误李>
注意:如果输出应该填充“0”-即使问题中没有指定,我也会使用“0000”。子字符串(n.length)+n
问题是我还想将文本转换为特定的数字。因此,每当我在第一个文本区域中键入时,它就会在下一个区域中弹出,显示数字。例如,上面的状态为Load=“001”,因此,如果我写了Load 15,右边的框将显示=001 1111,如果你能给出一个ALC输入(无输出)的公平示例,那就太好了。例如,是加载(15)还是加载(15)等等。。您需要的是一个解析器。一旦你拿到代币,你的工作实际上就完成了。ALC输入将是Load#15,输出将是001 0 1111问题不一致。负载为001或010。。不能两者兼而有之。如果需要4位,则应为0001或0010,但不能同时为两者。我从未见过最后用0填充,它修改了数字,这是一种非常糟糕的做法。@guymograbi-我看不出它有多么不一致。第四位始终设置为0
。仔细阅读问题。我认为他们还希望能够在输入中使用多个单词,并将单词翻译成多个数字,例如,Load Store
将变成001 010
。我认为他们想要做的是将一个数字转换为二进制附加到它,以生成一个字节。因此,一个过程是“加载15”,它将转换为“00101111”。这是常见的指令集架构。谢谢Matt,但我面临一个问题,当我输入Load时,它会显示[object object]001,看起来你走对了方向。看起来您正试图向对象添加001
。您可以发布您现在得到的代码(最好是在JSFIDLE中),或者用您的进度更新原始问题吗?TLDR-请提供更多解释。您为什么使用document.querySelector而不是document.getElementById?这很接近,但在声明操作数时不需要切片。在这之后,我得到了正确的机器代码。@MattDiamant-输入应该类似于Load#15
。我正在使用slice
删除#
@karchigh,因为querySelector
规则?没有人关心IE7。@AaditMShah ahhh,我没有输入一个“#”。如果我想包含多行,就像我在输入端彼此下面写加载、存储一样,那么另一端也会在彼此下面打印。@user2220070:必须写一些额外的行进行格式化。而且很可能会改变之前的阅读方式。因为大多数情况下,线条都是这样的,对吗?加载寄存器数据,存储寄存器数据。因此,每一行都应该被读取,它们各自的数据应该填充在右边。所有的行在每一行中只有一个操作码,也许我应该这样说