import util from "./util.js";
let originBin = `
,50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F,40,41,42,43,44,45,\
46,47,48,49,4A,4B,4C,4D,4E,4F,B0,11,B1,22,B2,00,B3,33,B8,01,02,03,04,B4,78,\
90,91,92,93,94,95,96,97,
`;
let originBinArr = originBin.split(",").filter(item => item !== '\n');
let asmString = resolve(originBinArr);
console.log(asmString);
function resolve(input) {
let asmString = "";
for (let index = 0; index < input.length; ) {
const element = input[index];
let tmp = '';
let step = 1;
if (['5', '4'].includes(element[0])) {
tmp = `${util.codeMap[element]}\n`;
} else if (element[0] === 'B') {
if (['0', '1', '2', '3', '4', '5', '6', '7'].includes(element[1])) {
step = 2;
tmp = `${util.codeMap[element]}${input[index + 1]}\n`;
} else {
step = 5;
tmp = `${util.codeMap[element]}${input[index + 4]}${input[index + 3]}${input[index + 2]}${input[index + 1]}\n`;
}
} else if (element[0] === '9') {
if(['0', '1', '2', '3', '4', '5', '6', '7'].includes(element[1])){
tmp = `${util.codeMap[element]}\n`;
}else{
}
}
asmString += tmp;
index += step;
}
return asmString;
}
// 引入 readline 模块
import readline from 'readline';
export default{
name:"util",
promptUser:async (hint)=>{
// 创建 readline 接口
const rl = readline.createInterface({
input: process.stdin, // 输入流
output: process.stdout // 输出流
});
const input = await new Promise((resolve, reject) => {
rl.question(hint, (input) => {
resolve(input);
});
});
rl.close();
return input;
},
codeMap : {
"50":"PUSH EAX",
"51":"PUSH ECX",
"52":"PUSH EDX",
"53":"PUSH EBX",
"54":"PUSH ESP",
"55":"PUSH EBP",
"56":"PUSH ESI",
"57":"PUSH EDI",
"58":"POP EAX",
"59":"POP ECX",
"5A":"POP EDX",
"5B":"POP EBX",
"5C":"POP ESP",
"5D":"POP EBP",
"5E":"POP ESI",
"5F":"POP EDI",
"40":"INC EAX",
"41":"INC ECX",
"42":"INC EDX",
"43":"INC EBX",
"44":"INC ESP",
"45":"INC EBP",
"46":"INC ESI",
"47":"INC EDI",
"48":"DEC EAX",
"49":"DEC ECX",
"4A":"DEC EDX",
"4B":"DEC EBX",
"4C":"DEC ESP",
"4D":"DEC EBP",
"4E":"DEC ESI",
"4F":"DEC EDI",
"B0":"MOV AL,",
"B1":"MOV CL,",
"B2":"MOV DL,",
"B3":"MOV BL,",
"B4":"MOV AH,",
"B5":"MOV CH,",
"B6":"MOV DH,",
"B7":"MOV BH,",
"B8":"MOV EAX,",
"B9":"MOV ECX,",
"BA":"MOV EDX,",
"BB":"MOV EBX,",
"BC":"MOV ESP,",
"BD":"MOV EBP,",
"BE":"MOV ESI,",
"BF":"MOV EDI,",
"90":"NOP",
"91":"XCHG EAX,ECX",
"92":"XCHG EAX,EDX",
"93":"XCHG EAX,EBX",
"94":"XCHG EAX,ESP",
"95":"XCHG EAX,EBP",
"96":"XCHG EAX,ESI",
"97":"XCHG EAX,EDI",
}
}