Ir ao conteúdo
  • Cadastre-se

Interrupções em Assembly


Posts recomendados

Tenho uma questão para a faculdade, usando a interrupção INT10,  que diz o seguinte:

 

"Um monitor está sendo usado para ler um texto em padrão 80x40 (80 linhas por 40 colunas) na primeira linha (linha 0) você deve procurar pela seguinte palavra e mostrar na tela um “S” se ela existe ou um “N” caso não exista:

Seu primeiro nome tem até 6 letras , você deve procurar pela última, pela segunda e pela primeira.

Ex: seu primeiro nome é Carlos (Contém 6 letras) então deve-se procurar por “SAC” nesta ordem."

 

ok, meu nome é Paulo, então eu deveria procurar por "OAP", então eu setaria o o cursor no começo da matriz

 

MOV AH,02MOV DH,0MOV DL,0INT 10
Atribuiria esse valor ao cursor:
 
MOV AH,08INT10
E depois começaria a fazer a comparação, no caso, se a primeira letra é "O"
SUB AL,4FJZ LETRAO...LETRAO:MOV AH,0AMOV AL,4FINT 10
 
Ok até (eu acho) porém, como faço para o cursor ir para a próxima posição? tenho que repetir o código novamente? E como farei a comparação no final, se a palavra formada é "OAP"? Ta difícil caras  :(
Link para o comentário
Compartilhar em outros sites

sinceramente nao entendi muito o problema com o que voce ta tentando fazer..

porém quanto a sua pergunta
 

Ok até (eu acho) porém, como faço para o cursor ir para a próxima posição? tenho que repetir o código novamente? E como farei a comparação no final, se a palavra formada é "OAP"? Ta difícil caras

 

pra avançar ou retroceder a posição do cursor usa a própria função 02h,incrementa ou decrementa o registro DL(posição da coluna)(ps:nao sei se ja ta setado em outra parte do programa,mas geralmente voce tambem que passar o valor da pagina de video no reg BH)e pra pegar o valor do caractere na posição atual usa a função 08h(código ascii retorna em al)

 

 

pra fazer a comparação é um algoritmo como qualquer outro,procura pela ultima letra de cada palavra "n*tamanhodaletra" compara com o caractere que voce ta procurando,se der jogo,diminui o valor no reg DL pra alcançar o 2º caractere da palavra,compara com a letra que deveria se o 2º caractere que voce quer,se der jogo,decrementa DL e compara com o 3º caractere da sua string..

Link para o comentário
Compartilhar em outros sites

sinceramente nao entendi muito o problema com o que voce ta tentando fazer..

porém quanto a sua pergunta

 

pra avançar ou retroceder a posição do cursor usa a própria função 02h,incrementa ou decrementa o registro DL(posição da coluna)(ps:nao sei se ja ta setado em outra parte do programa,mas geralmente voce tambem que passar o valor da pagina de video no reg BH)e pra pegar o valor do caractere na posição atual usa a função 08h(código ascii retorna em al)

 

 

pra fazer a comparação é um algoritmo como qualquer outro,procura pela ultima letra de cada palavra "n*tamanhodaletra" compara com o caractere que voce ta procurando,se der jogo,diminui o valor no reg DL pra alcançar o 2º caractere da palavra,compara com a letra que deveria se o 2º caractere que voce quer,se der jogo,decrementa DL e compara com o 3º caractere da sua string..

 

Obrigado cara, acho que consegui fazer a parte da contagem, mais abaixo coloco o código. Acho que está certo, porém, a verificação ainda não consegui entender. Vou tentar explicar o enunciado da questão, que realmente é bem confuso.

 

Bem, eu tenho uma matriz de 80x40 (80 linhas, 40 colunas), e tenho que verificar se na linha zero existe a combinação de letras "OAP" (então na verdade essa matriz é só pra complicar, pois na verdade vou trabalhar só com um vetor). Bom, mas porque "OAP"? porque como diz o enunciado, tenho que achar a ultima letra do meu nome, a segunda e a primeira. No caso, o vetor de 40 colunas ficaria assim:

 

PAULOPAULOPAULOPAULOPAULOPAULOPAULOPAULO

 

Então nessa string teria que achar o padrão "OAP", que no caso não existe, então teria que exibir "N" na tela.

Aí que está, não to entendendo como verificar esse padrão nesse vetor.

Bom, esse é o codigo comentado:

 

MOV BH,0  //SETA O VALOR 0 NA VARIAVEL BHCOMECO:           //LOOP PRO COMEÇOMOV AH,02         //padrão DA INT 10MOV DH,0           //SETA O VALOR 0 PARA A LINHAMOV DL,BH         //SETA O VALOR DE BH PARA A COLUNAINT 10                  //padrão DA INT 10MOV AH,08          //COLETA O VALOR NA POSIÇÃO DO CURSORINT 10                  //padrão DA INT 10SUB AL,4F           //SUBTRAI O VALOR DA LETRA O PARA A VERIFICAÇÃOJZ LETRAO          //PULA PARA A "FUNÇÃO" LETRA O SE FOR 0ADD AL,4F           //ADICIONA O VALOR DA LETRA O SE NAO FOI 0 NA LINHA ANTERIORSUB AL,41           //SUBTRAI O VALOR DA LETRA A PARA A VERIFICAÇÃOJZ LETRAA          //PULA PARA A "FUNÇÃO" LETRA A SE FOR 0ADD AL,41          //ADICIONA O VALOR DA LETRA A SE NAO FOI 0 NA LINHA ANTERIORSUB AL,50          //SUBTRAI O VALOR DA LETRA P PARA A VERIFICAÇÃOJZ LETRAP         //PULA PARA A "FUNÇÃO" LETRA P SE FOR 0ADD BH,1           //ADICIONA 1 NA VARIAVEL DA COLUNASUB BH,29         //SUBTRAI 41 DA MATRIZ PARA VERIFICAÇÃO DE FIMJZ FIM                //PULA PARA FIMADD BH,29         //ADICONA 41 PARA RESTAURAR VALOR DA COLUNAJMP COMECO    //PULA PARA O COMEÇOFIM:                    //FUNÇAO FIMRET                   //FIM
 
Como você pode ver, coloquei os jumps para as salvar as letras que preciso, porém, não sei como fazer esse salvamento na memoria.
Obrigado pela paciencia desde já. 
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!