Map<String, MnemonicDetails> map = MnemonicsMap.getInstance().getMnemonicsMap();
// Verifica se na lista de Mnemonicos existe algum comando com o nome capturado em cmdWord[0]
if (map.containsKey(cmdWord[0])) {
MnemonicDetails m = map.get(cmdWord[0]);
// Se sim, atribui ele em "m" e faz um for em todas as expressões disponíveis desse comando
for (InstructionRegex regex : m.getRegexList()) {
// Se a expressão for vinculável (definida em MnemicsRegex) e a expressão casar com o valor da minha (cmdLinha[i])
// Quer dizer que esse comando contém vínculos e deve ser alterado
if (regex.isLinkable() && RegexMatcher.matches(regex.getRegex(true) + InstructionRegex.RX_COMMENTS, cmdLinha[i])) {
// Preciso de alguma forma identificar os comentarios e devolve-los corretamente apos a insercao do enter.
// Procurar também uma forma de fazer o backspace.
String guardaComentarios = "";
if (cmdLinha[i].contains(";")) { // Se existirem comentários
guardaComentarios = RegexMatcher.getMatch(regex.getRegex(true) + InstructionRegex.RX_COMMENTS, cmdLinha[i]);
guardaComentarios = guardaComentarios.replaceAll(regex.getRegex(true), "");
// Remove de toda a linha os comentários
cmdLinha[i] = cmdLinha[i].replace(guardaComentarios, "");
cmdWord = cmdLinha[i].split(InstructionRegex.RX_SPACES_BETWEEN);
}
// Se a palavra depois do comando tiver @, é necessário trata-lo de devolve-lo corretamente ao valor alterado.
if (cmdWord[1].substring(0, 1).equals("@")) {
// Se a posicão da linha for menor ou igual a do vínculo, então é necessário atualiza-lo.
// Se a linha for anterior, é necessário atualizar pois todas as linhas posteriores serão afetadas com o enter.
// Se for igual, ele ainda faz parte da alteração do enter e deve ser atualizado.
if (LinePos <= Integer.parseInt(cmdWord[1].substring(1))) {
int value = Integer.parseInt(cmdWord[1].substring(1)) + valueToAdd;
// Junta o JMP + o novo valor
cmdLinha[i] = m.getName() + " @" + value;
}
} // Se não, apenas acrescenta 1 ao seu valor
else {
if (LinePos <= Integer.parseInt(cmdWord[1])) {
int value = Integer.parseInt(cmdWord[1]) + valueToAdd;
// Junta o JMP + o novo valor
cmdLinha[i] = m.getName() + " " + value;
}
}
cmdLinha[i] += guardaComentarios;
}