|
Capítulo 3
Abra o arquivo NPLv111.asm (feito no cap. 2 com o disassembler) para podermos continuarmos a examinar o arquivo NPLv111.bin : As coisas estão começando a ficar interessantes para nós no endereço
820122h. Este endereço contêm o comando SCALL 82h:1094. Isso significa que a execução do programa continua no endereço 821094h. Uma subrotina inicia-se aí, que irá inicializar o controlador LCD. A subrotina
termina com o comando SRET e retorna para o programa principal no endereço seguinte ao comando SCALL. No endereço 82013Ah, o comando MOV, move o valor 007Eh para o registro 2. O próximo comando, move o valor
0082h (um segmento da memória !!) para o registro 3. Isso significa que R2 e R3 contêm juntos o endereço da primeira variável de saída de texto ! Toda variável de saída termina com o valor 00h (compare a área
de texto 82007Eh com 8200E2h) ! Contudo, podemos entender, que olhando para o endereço 820158h nos podemos ver o valor do endereço da segunda variável de saída... O que acontece depois ? O comando PUSH no
endereço 820142h e 820144h tranfere os valores de R3 e R2 para a estaca (pilha), definindo a área onde será escrito os valores dos registros. No endereço 820146h o valor 001Eh é movido para R2 e depois puxado para a
estaca (pilha). Este valor define a linha na tela LCD onde a variável de saída será posicionada ! No endereço 82014Ch outro valor é movido para R2. Isso define a coluna onde a variável de saída será posicionada -
pixels ! Depois de todos esses endereços, 82014Eh Scall 82h:1EE0h chama outra subro- tina que manda a variável de saída para a tela LCD ! As próximas linhas são exibidas todas do mesmo modo.
Experimento :
1. Tente modificar ligeiramente os valores das linhas (1Eh=30dec; 28h=40dec; B0h=50dec) para as variáveis de saída usando o Hexeditor.
Renomeie esses arquivos modificados para Test2.bin e baixe-o para o DV3. Veja os resultados ! Qual é o máximo valor para a última linha da tela LCD ?
2. Tente modificar da mesma maneira os valores das
coludas das variáveis de saída. Atenção: Como você pode ver, o comando MOV define o valor da coluna que é estruturada da seguinte forma:
C9 23 -> MOV R2, 03h -> C9 = MOV; 2 = R2; 3 = 03h
Qual problema encontramos à frente, se quisermos redefinir a coluna ?
3. Use o disassembler para verificar
as modificações que você fez com o Hexeditor. De fato, você deverá sempre verificar as modificações feitas com o Hexeditor usando o disassembler antes de baixar o arquivo modificado para o DV3 !
|