Instruções Assembly diretamente no Debug
Vamos aprender novas instruções e como utiliza-las , na verdade não será aplicado todas as instruções, mas as principais; para aprender precisamos saber o básico, mesmo o básico já exige bastante, e também ficaremos um pouquinho aqui no ambiente do DEBUG.EXE para aprendermos as instruções fundamentais.
Da mesma forma, quando aprendemos a dirigir um carro sempre usamos um carrinho simples e popular, e também fazemos as aulas básicas e fundamentais, suficiente para dirigirmos mais tarde um BMW igual do Charlie Harper (two and half man), da mesma forma, estaremos aptos a dirigir em qualquer trânsito do mundo, sem precisar fazer aulas para dirigir no mundo todo para isto, é óbvio. Ficaremos aqui no “fusquinha” do ambiente assembly para aprender o fundamental, pelo menos no início.
Vamos agora ver como COMPARAR valores, e também como usar um contador para medir quantas vezes se passa por uma rotina.
O programa a seguir vai fazer o seguinte:
1- Exibir a frase “Digite a Senha”
2- Esoerar a senha pelo teclado
3- Comparar a senha (tamanho de 1 Byte) , com a letra K , vai ser necessário comparar o código do K e não o K , seu código é ASC é 75, e em hexa 4Bh
4- Se for a letra K, passo 7 para terminar o programa
5- Se não for K, verificar se chegamos a 5a. tentativa, se chegou pular para 7
6 – Voltar ao passo 1 e tentar novamente
7- Termine o Programa
Já de cara, percebemos que precisamos de um contador, ele é necessário para contar quantas vezes estamos tentando, já que na 5a. vez precisaremos terminar o programa.
Outra coisa que ainda não foi explicado, é a instrução de compração “CMP” e a instrução para puilar se a comparação for verdaderia “JZ endereço“.
Outra coisa nova que pode ser feito enquanto estamos construindo o programa é a gravação em tamanho grande (R CX=200 por exemplo), como ele é grande, também está mais sujeito a erros de programação, para isto, podemos portanto gravar nosso programa com um tamanho grande, já que não sabemos o tamanho total no final, então quando estiver testado, ajustamos o tamanho do program (com R CX=tamanho).
Aí esta o programa, as instruções novas estão destacadas em verde e são elas:
CMP AL, 4B
Esta instrução compara AL (a parte low do AX) , compara portanto com 4B , e o que será 4B ? é o código hexa de K ,
não cofunda, o código ASC de K é 75 , mas lá só vale o valor em hexa, então convertendo 75 em hexa, temos 4Bh
E de onde aparece este valor em AL ? após um Int 16 (Instrução anteriro), o sistema vai colocar em AL o valor digitado,
se for digitado a letra A, após o Int 16, AL vai valer 41h que é o código de A.
JZ 118
Esta instrução significa (Jump se Zero), ou seja, se a comparação anterior tiver sucesso, ou seja, se AL = 4B, então o Flag será setado em Zero ! então basta comprar com JZ, e se for zero mesmo, ele salta para o endereço 118, perceba que em no endereço 118 tem o INT 20 que é ? fim de programa.
INC CX
Se você pensou em Incrementation , acertou ! ele incrementa 1 valor no registrador CX , seria como (CX = CX + 1 ou CX++ como faríamos em C), e porque incrementa 1 ? para ir contando as tentativas, perceba que a instrução abaixo compara com 5.
CMP CX, 5
Esta é fácil ! já aprendemos o que faz o CMP, aqui ele compara CX co 5, e se for 5 mesmo, ele salta para o fim do programa
JNZ 103
Esta também sabemos, intuitivamente podemos perceber que se JZ salta para um endereço quando a comparação do CMP obteve sucesso, utilizando JNZ ele salta se NÂO obteve sucesso, neste caso a comparação da instrução anterior (CMP CX, 5) se CX não chegou a 5, ele salta para o inicio do programa e começa tudo de novo.
Observe também que antes da frase tem o código: a,d,”Digite a senha:” , este a é o 10 (line feed), e o d é o 13 (Return), ou seja, enquanto o 10 pula para linha de baixo, o 13 volta para o inicio, é por isto que toda vez que erramos ele pula para linha de baixo e refaz o texto.
No exemplo o programa também é gerado com o nome digite.com e gravado no disco, podemos testa-lo no windows para ver o que acontece.
Imagino que este programa começou a assustar, então está aqui uma opção de fazer download deste digite.com.
DOWNLOAD DO EXECUTÁVEL:[ digite.com ]
SE PREFERIR ( e seu anti-virus exigir ! ) PEGUE A VERSÃO COMPACTADA:[ digite.rar ]
Como alterar um programa já pronto ? vamos fazer isto utilizando o DEBUG, que tal alterar aquela frase do programa anterror ? e alterar também a senha, mudar deK para Y.
Primeiramente vamos ao código do Y maiúsculo, o código ASC é 89 decimal, então convertemos para Hexa que é 59h.
Para fazer a edição, basta digitar DEBUG digite.com , para se ver o programa, vamos utilizar a diretiva U do DEBUG , podemos vê-lo no help do DEBUG, para ver este Help pasta digitar ? no DEBUG.
Alterando o código da tecla senha de K para Y, para isto basta editar o endereço10E com a diretiva “A 10E” e digitar
a mova instrução assembly “CMP al, 59″.
O próximo passo é alterar a frase exibida, para isto basta repetir o último procedimento, porém com endereço diferente, desta vez para alterar o endereço de memória 103:
Neste último exemplo foi demonstrado como alterar também o texto do endereço119, bastando digitar DB “novo texto”.
Para gravar esta alteração basta seguir os procedimentos que usamos quando criamos, utilizar a diretiva do debug W para gravar esta alteração.