基于JavaScript編寫8086匯編指令查詢工具
前言
匯編語言還是在大學(xué)的時候?qū)W的,匯編語言有個特點是語句短、條數(shù)多,很難可以把全部指令都背熟。當(dāng)時就想編寫一個軟件可以隨時查閱匯編語言的各類指令,而且軟件不需要編譯可以隨時更新,可惜當(dāng)時用javascript語言寫只寫了一半,現(xiàn)在終于有空了,就把另一半補全了。
一、程序效果展示
輸入字母會自動出現(xiàn)匹配的下拉列表,控制鍵盤↑和↓鍵就可以上下移動選擇想查看的匯編指令解析。如下圖:
二、程序制作過程
(一)為了實現(xiàn)一個HTML文件就可以運行,因此所有的數(shù)據(jù)都使用<div></div>標(biāo)簽進行存放,并直接利用指令名作為div的id,例如:<div id="AAD">,以便后續(xù)通過id實現(xiàn)快速查找。主要代碼如下:
<div id="AAD"> AAD∶ 指令助記符——除法的ASCII調(diào)整(非壓縮的BCD碼)。在執(zhí)行除法操作前,必須利用 AAD指令將非壓縮型BCD碼表示的數(shù)轉(zhuǎn)換成二進制數(shù)送AL。步驟是,先將被除數(shù)的高位數(shù)(AH中的內(nèi)容)乘以10,然后加到AL的低位數(shù)中,接著將AH清零。 </div>
(二)使用獲取用戶在input框輸入的字符,每輸入一個字符就馬上開始字符串匹配,字符串匹配從左到右匹,程忽略字母大小寫,并把匹配到的結(jié)果用javascript的document.createElement("label")動態(tài)生成多個label標(biāo)簽作為下拉列表。主要代碼如下:
function chooseMenu() { //獲得輸入框的值 var str = document.getElementById("input").value; //獲得標(biāo)簽名為div的數(shù)組,把首地址給divs var divs = document.getElementsByTagName("div"); var div_di; var templabel; var _style_top = 0; //把choose層里面的子節(jié)點清空 clearAllNode($("choose")); if (str != "") { //如果輸入框的值不為空,執(zhí)行以下循環(huán) for (var i = 2; i < divs.length; i++) { //getAttribute方法獲得divs[i]節(jié)點屬性id的值 div_id = divs[i].getAttribute("id"); //如果字串str在主串div_id中出現(xiàn)在第0個位置則添加一個innerHTML為div_id的div到 //choose層 if (div_id.toLowerCase().indexOf(str.toLowerCase()) == 0) { templabel = document.createElement("label"); templabel.className = "suggestions"; templabel.innerHTML = div_id; templabel.style.visibility = "visible"; templabel.style.top = _style_top * 20 + "px"; templabel.style.position="absolute" $("choose").appendChild(templabel); _style_top++ } } //添加完choose層的元素后更新show層的元素 if ($("choose").firstChild) { show($("choose").firstChild.innerHTML); $("choose").firstChild.style.backgroundColor = "ccc"; count = 0; } else { show(""); $("choose").innerHTML = "couldn't find"; } } else { show(""); } }
(三)監(jiān)聽鍵盤的↑和↓事件,調(diào)用鍵盤事件處理函數(shù),在label前后兄弟節(jié)點鍵來回移動。并更新右側(cè)詳細信息頁中的內(nèi)容。
1)使用<body οnkeydοwn="handleUpAndDown()">,為整個頁面添加鍵盤監(jiān)聽事件。
<body onkeydown="handleUpAndDown()">
2)編寫handleUpAndDown(evt)鍵盤響應(yīng)函數(shù),這里需要注意的是charCode=38為鍵盤↑鍵,charCode=40為鍵盤↓鍵。當(dāng)charCode為38時調(diào)用moveUp()函數(shù),當(dāng)charCode為40時調(diào)用moveDown()函數(shù)。moveDown()和moveUp()各自實現(xiàn)左側(cè)Label上下移動效果。
function moveUp() { var labels = document.getElementsByTagName("label"); if (count != 0) { labels[count].style.backgroundColor = "#fff"; labels[count - 1].style.backgroundColor = "#ccc"; show(labels[count - 1].innerHTML); $("input").value = labels[count - 1].innerHTML; count = count - 1; } } function moveDown() { var labels = document.getElementsByTagName("label"); if (count != labels.length - 1) { labels[count].style.backgroundColor = "#fff"; labels[count + 1].style.backgroundColor = "#ccc"; show(labels[count + 1].innerHTML); $("input").value = labels[count + 1].innerHTML; count = count + 1; } } function handleUpAndDown(evt) { evt = (evt) ? evt : event; var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode); if (charCode == 38) moveUp(); if (charCode == 40) moveDown(); }
3)使用οnkeyup="handleKeyUpEvent(event),為Input輸入框綁定鍵盤事件,代碼如下:
<input type="text" name="input" id="input" maxlength="10" style="width:100px;height:20px;"onkeyup="handleKeyUpEvent(event)">
輸入你想查找的指令,可按鍵盤↑和↓移動指令
4)編寫handleKeyUpEvent(evt),避免用戶在Input輸入框輸入文字時受到剛才添加的鍵盤事件干擾。
function handleKeyUpEvent(evt) {//用來處理鍵盤事件的函數(shù) evt = (evt) ? evt : event; var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode); if (charCode == 38 || charCode == 40 || charCode == 37 || charCode == 39) { } else { chooseMenu(); } }
到此這篇關(guān)于基于JavaScript編寫8086匯編指令查詢工具的文章就介紹到這了,更多相關(guān)JavaScript匯編指令查詢工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS在可編輯的div中的光標(biāo)位置插入內(nèi)容的方法
這篇文章主要介紹了JS在可編輯的div中的光標(biāo)位置插入內(nèi)容的方法,分別用js與jQuery兩種方式加以實現(xiàn),是非常實用的特效技巧,需要的朋友可以參考下2014-11-11在Postman的腳本中如何使用pm對象獲取接口的請求參數(shù)
這篇文章主要介紹了在Postman的腳本中如何使用pm對象獲取接口的請求參數(shù),本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下2023-09-09學(xué)習(xí)javascript的閉包,原型,和匿名函數(shù)之旅
Javascript中有幾個非常重要的語言特性——對象、原型繼承、閉包。其中閉包 對于那些使用傳統(tǒng)靜態(tài)語言C/C++的程序員來說是一個新的語言特性,本文給大家介紹js的閉包,原型,和匿名函數(shù)之旅,感興趣的朋友一起學(xué)習(xí)吧2015-10-10