FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.116 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 16-10-2004, 2:00   #1 (permalink)
Paul Phoenix
Newbie
 
Registrado em: Mar 2004
Localização: Salvador - Ba
Mensagens: 31
Reputação: 0 Paul Phoenix está indo no caminho certo
Enviar mensagem via ICQ para Paul Phoenix Enviar mensagem via MSN para Paul Phoenix Enviar mensagem via Yahoo para Paul Phoenix
Padrão Programa em Assembler. Quem dá uma luz?

Tenho q fazer um trabalho em Assembler.
O problema é q o professor ainda não explicou nada sobre o assunto, mas antecipou o trabalho para ajudar quem tirou nota baixa na primeira prova, valendo 4 pontos com a prova valendo 9. Preciso tirar leite de pedra e aprender a fazer esse programa.
Já tenho um tutorial, mas tá **** entender "na tora".
Sendo assim, resolvi colocar a questão abaixo e perguntar aos amigos se alguém já num tem algo já pronto aê para compartilhar comigo. Ou então parte do código. Qualquer ajuda serve.

Agradeço antecipadamente.


Eis a questão:

1)Elaborar um programa em linguagem assembly 8086 que apresente as seguintes funcionalidades:

a)Seja capaz de realizar a soma ou subtração de duas parcelas com números inteiros compreendidos entre zero e cem (0 – 100).
b)Pergunte ao usuário se deseja uma soma ou uma subtração.
c)Apresente o resultado da operação realizada em tela.
d)Após a apresentação do resultado, perguntar ao usuário se deseja realizar uma nova operação. Caso positivo, retornar ao inicio do processo.
__________________
Sem assinatura no momento :-)
Paul Phoenix está offline   Responder com Quote
Antigo 18-10-2004, 4:28   #2 (permalink)
DCNunes
Veterano
 
Avatar de DCNunes
 
Registrado em: Jan 2003
Localização: Juiz de Fora-MG
Mensagens: 1.341
Reputação: 81 DCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputação
Padrão

Só umas perguntas:
- o que fazer se os números digitados não estivem dentro dos limites?
- esse trabalho tem que ser desenvolvido para um montador ou vai ficar só no papel?
DCNunes está offline   Responder com Quote
Antigo 18-10-2004, 8:06   #3 (permalink)
Paul Phoenix
Newbie
 
Registrado em: Mar 2004
Localização: Salvador - Ba
Mensagens: 31
Reputação: 0 Paul Phoenix está indo no caminho certo
Enviar mensagem via ICQ para Paul Phoenix Enviar mensagem via MSN para Paul Phoenix Enviar mensagem via Yahoo para Paul Phoenix
Padrão

Citação:
Postado Originalmente por IronManDCN
Só umas perguntas:
- o que fazer se os números digitados não estivem dentro dos limites?
- esse trabalho tem que se...

Não existe a necessidade de fazer restrições ao programa, ou seja, subentende-se que o usuário SEMPRE vai colocar as informações corretas para funcionamento adequado do programa.
Não entendi a segunda pergunta, mas caso meu entendimento tenha sido correto eu preciso pelo menos saber como funciona a estrutura digitada, porque talvez o professor peça para explicar em sala.

Ainda não consegui entender direito a apostila q ele entregou. Entender Assembler "na tora" me parece impossível.... O trabalho precisa ser entregue no dia 27/10/04.

Ajudaê gente!!!!
__________________
Sem assinatura no momento :-)
Paul Phoenix está offline   Responder com Quote
Antigo 19-10-2004, 3:48   #4 (permalink)
DCNunes
Veterano
 
Avatar de DCNunes
 
Registrado em: Jan 2003
Localização: Juiz de Fora-MG
Mensagens: 1.341
Reputação: 81 DCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputação
Padrão

Citação:
Postado Originalmente por Paul Phoenix
Não entendi a segunda pergunta
Bom, fiz aquela segunda pergunta porque não sei como o seu curso é feito. Eu por exemplo no meu curso vi assembly muito rápido, a gente só implementava umas equações, e o processador não era um 8086, era um processador hipotético. Já que o programa não ia executar no mundo real, a gente não se preocupava com montadores (programas que convertem o programa fonte em assembly em um executável).

E também porque eu nunca encostei num montador, só estudei. Eu entro com os códigos em assembly dentro de programas feitos em Pascal ou C. Porém, trabalhando com o Turbo Pascal 7.0 dá pra usar assembly e depois você pode adaptar o código facilmente e usar num montador como MASM, TASM, ou outro qualquer.

Assembly no começo é meio difícil mesmo, tem que ir com calma.

De manhã eu posto os códigos, já esqueci como se usa umas funções que o seu programa precisa.

Falou!
DCNunes está offline   Responder com Quote
Antigo 19-10-2004, 10:45   #5 (permalink)
aylons
General de Pijama
 
Avatar de aylons
 
Registrado em: Mar 2004
Localização: São Paulo
Idade: 27
Mensagens: 3.740
Reputação: 21 aylons possui ótimo potencial
Enviar mensagem via ICQ para aylons Enviar mensagem via MSN para aylons Enviar mensagem via Yahoo para aylons Enviar mensagem via Skype para aylons
Padrão

A interface é um PC? Como o usuário lê e insere os dados?
__________________
Ayloиs Hazzud, com N invertido
aylons está offline   Responder com Quote
Antigo 23-10-2004, 10:26   #6 (permalink)
DCNunes
Veterano
 
Avatar de DCNunes
 
Registrado em: Jan 2003
Localização: Juiz de Fora-MG
Mensagens: 1.341
Reputação: 81 DCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputação
Padrão

Citação:
Postado Originalmente por Paul Phoenix
Não existe a necessidade de fazer restrições ao programa, ou seja, subentende-se que o usuário SEMPRE vai colocar as ...
Aí, não pude postar antes. Vou colocar uma parte do código porque não curto muito a idéia de postar tudo. Mas se você precisar, tamos aí. Eu usei umas interrupções de DOS e BIOS. Se precisar de alguma explicação, vou aparecer aqui de novo mais tarde. Usei principios básicos, os parametros são passados por registrador.

Como eu disse, esse código é para Turbo Pascal. Os números precedidos de um cifrão estão em hexadecimal. Os nomes precedidos de arroba são rótulos. O que estiver entre chaves, são comentários. Tudo que está aqui foi testado.

A parte mais intrincada é a da leitura de um número inteiro. Qualquer dúvida pergunta aí.

Eu só acho que seu professor não devia cobrar um programa desses em cima da hora, já que ele não tinha explicado nada. Falou.

Código:
{Esta rotina imprime o caracter em AL e avanca o cursor} procedure imprime_char; assembler; asm push ax push bx mov ah,$0E mov bx,0 int $10 pop bx pop ax end; procedure salta_linha; assembler; asm push ax mov al,10 call imprime_char mov al,13 call imprime_char pop ax end; {A rotina a seguir imprime uma null-terminated string, cujo endereco esta em SI} procedure imprime_nts;assembler; asm push ax push si jmp @primeiro_char @imprime: call imprime_char inc si {aponta para o proximo caracter} @primeiro_char: mov al,[si] cmp al,0 {string acabou?} jne @imprime {se nao, imprime o caracter} pop si pop ax end; {Esta rotina le um caracter do teclado, e nao imprime na tela. Nao aceita codigos extendidos. Caracter em AL} function le_tecla : char; assembler; asm mov ah,$8 @inicio: int $21 cmp al,0 jne @fim int $21 jmp @inicio @fim: end; {Esta rotina le um inteiro de ate 3 digitos decimais O numero fica em AL. Se o usuário pressionar <enter> sem ter digitado nada, a funcao retorna 0} function le_inteiro : byte; assembler; asm push dx push cx push bx mov cx,3 {cx=caracteres restantes} mov bx,0 {bx vai guardar o valor temporario} mov dl,10 @inicio: call le_tecla cmp al,13 {teclou <enter>?} je @finalizar {se sim, salta} cmp al,$30 jb @inicio {se ASCII < $30, caracter invalido} cmp al,$39 ja @inicio {se ASCII > $39, caracter invalido} call imprime_char {imprimir!, digitaram algo q presta} xchg ax,bx mul dl {multiplica o valor antigo por 10} xchg ax,bx sub al,$30 {converte ASCII para decimal} add bl,al dec cx jnz @inicio {se cx <> 0, pode digitar mais} jmp @fim @finalizar: cmp cx,3 {usuario digitou algo valido?} jne @fim {sim, foi digitado algo} mov al,$30 call imprime_char @fim: mov al,bl pop bx pop cx pop dx call salta_linha end;
DCNunes está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 13:12.