Assembly alguem que me ajude!!

Thorax

Power Member
Boas pessoal. Sei que hoje em dia o assembly e pouco utilizado nas nossas programaçoes, mas ainda continua a ter muita importancia na nossa vida. Por tras de C++, VB, Pascal ... encontra-se sempre a linguagem assembly. Pois é, eu sou pouco novice nesta materia e gostaria que alguem me ajuda-se a fazer um pequeno programa em assembly. :003:
O programa consiste num ALARME que no qual vai avisar alguma coisa (exemplo uma mensagem que devera aparecer no monitor) assim que atingir a hora introduzida pelo utilizador.
Devo de utilizar o REAL TIME CLOCK que corresponde ao Int 70H. Sei tb que tenho de criar um programa residente mas isso nao é o meu problema. Pois é, tenho de apresentar esse programa daqui a poucas semanas nas nao estou a ver como devo de fazer. Se voces me ajudarem, fico bastante grato. :001:
 
Thorax disse:
Boas pessoal. Sei que hoje em dia o assembly e pouco utilizado nas nossas programaçoes, mas ainda continua a ter muita importancia na nossa vida. Por tras de C++, VB, Pascal ... encontra-se sempre a linguagem assembly. Pois é, eu sou pouco novice nesta materia e gostaria que alguem me ajuda-se a fazer um pequeno programa em assembly. :003:
O programa consiste num ALARME que no qual vai avisar alguma coisa (exemplo uma mensagem que devera aparecer no monitor) assim que atingir a hora introduzida pelo utilizador.
Devo de utilizar o REAL TIME CLOCK que corresponde ao Int 70H. Sei tb que tenho de criar um programa residente mas isso nao é o meu problema. Pois é, tenho de apresentar esse programa daqui a poucas semanas nas nao estou a ver como devo de fazer. Se voces me ajudarem, fico bastante grato. :001:

Assembly do 8086?


Hugs.
 
Boas.
Vais fazer isso em que compilador?

VB
Delphi
C/C++
Turbo Pascal
Debug do MS-DOS
Outro?

Diz algo.
Um grande abraço.
 
eu nas minhas aulas de microprocessadores dei assembly e usei o simulador do cpu "p3" (nao e pentium 3!!).


aconselho-te a fazeres primeiro um fluxograma asm (ou seja um fluxograma que representa todos os passos do programa a fazer e tb com analise das flags do cpu.).


busca aqui nos acetatos do grande Horta :D: http://digitais.ist.utl.pt/ec-im



fika gud.

ps: se kiseres aprender umas coisinhas de assembly avisa! :P
 
FASC -> sim o assembly e baseado no 8086.

XGLite-> o copilador que uso é o TASM seguido pelo LINK.Sao os programas que trabalho na escola.

redalert---> queres dizer algoritmo para saber todos os passos que devo de fazer com o assembly, sim eu tenho mais ou menos feito a questao tenho dificuldades em implementar o codigo. alem de mais tenho de o entregar ate ao final da proxima semana penso eu ... e ando um coxe atrapalhado com outros trabalhos em c++ etc.. tudo projectos do 1 ano de faculdade..
O meu maior problema é implementar o codigo. Como vou fazer activar o alarme a hora que o utilizador introduzir.. Como vou fazer com que ele apresente uma msg da alerta que o utilizador meteu como uma Alerta.. enfim soa essas pequenas coisas que me baralham.
Se alguem tiver alguma ideia que diga ... fico atento a isso... :)
 
Thorax disse:
Como vou fazer activar o alarme a hora que o utilizador introduzir..

para isso tem k haver um periferico (tipo relogio) que detecte se ja ta na hora. se ja ta, activa uma interrupcao defenida por ti (executa uma funcao definida). se n tens periferico é fazer à-lá "old-fashion" usando CMP (compare ou SUB (substraccao e analisar a flag ZERO)) sucessivos decrementando (ou incrementando) um registo para queimar ciclos de relogio ate chegar a hora programada.




Thorax disse:
Como vou fazer com que ele apresente uma msg da alerta que o utilizador meteu como uma Alerta..

tens k definir (declarar) uma string (ou word) no inicio do programa (tipo em C: char nome[40]; ) ou entao fazes um EQU (tipo em C: #define ALERTA atencao ligou alarme)




este pseudo-codigo k apresentei é para o simulador p3 mas n deve ser muito diferente do assembly do 8086.

espero ter ajudado.

fika gud.
 
por acaso nao andas no ist? :D e k hoje a tarde ia a entrar pela porta da alameda e ouvi uns gajos k passavam a falar dum projecto kalker de um alarme blablabla (tinham pinta do ppl da leic :D)...
 
Ahahah, isto é só pessoal do ist! Microprocessadores done that! :D Mas com o Serro a dar. :)

Grande 8086, no meu último projecto era mesmo fazer um alarme...

Boa sorte com isso.
 
Uma vez que falaram sobre a linguagem assembly, pergunto-vos se sabem ou têm algum manual que explique como utilizar as mnemónicas que o Pentium 3 ou 4 possuem ?

:)brigadã:)
 
redalert---> Acho que o REAl TIME CLOCK que utiliza o IRQ 8 e é activado pelo interrupt 70H permite fazer tudo, desde activar o alarme, aos calculos em que o alarme deve de ser igual a hora do sistema etc e tal... o problema e conhecer bem o int70h etc e tal. eu ate tenho algo a explicar isso mas enfim.. acho que me faltam bases para a implementaçao do codigo.

Em relaçao de eu andar no IST ... poix acho que se eu caso anda-se ai nao teria tantos problemas e teria melhores bases. Eu estudo no Instutito politecnico da Guarda (IPG) e isto é um projecto para ARquitectura de Computadores, em que no maximo de-mos 4 aulas sobre assembly ... enfim ... agora tenho de me desenrascar!

greven--> Se caso poderes dizer algumas dicas do teu projecto agradecia-te. EU utlimamente ando atarefado com outros projectos e estou a ver este a ir pela agua abaixo!

peter alien ---> Nesse aspecto queria muito ajudar-te mas sobre P3 e P4 e mnemónicas, nao tenho mesmo nada. Espero que alguem neste forum saiba de alguma coisa e que post aqui!
 
Última edição:
peter alien disse:
Uma vez que falaram sobre a linguagem assembly, pergunto-vos se sabem ou têm algum manual que explique como utilizar as mnemónicas que o Pentium 3 ou 4 possuem ?

:)brigadã:)

Aí há uns tempos saquei do site da intel os white papers do Pentium Pro (meu antigo processador), entre as quais estavam as mnemónicas de programação suportadas pela CPU e flags. Já devem estar disponíveis para essas CPU's. Dá uma vista de olhos por lá.


Hugs.
 
redalert---> LOL eu a pensar que estava mal mas afinal de contas ja estou a ver que alguem esteve bem pior...lol :P

Ja fiz muitas pesquisas pela google e o maximo que consegui encontrar foi um relogio em assembly...encontrei tb muita informação sobre o int 70H e ate me pode ser util. mas em relaçao como fazer um alarme poix isso esta mesmo complicado. :(
 
Heyas all...

Um programa em assembly que introduzindo uma hora ele tenha que dar um alarme quando chegar a essa hora...

Tirando a parte do int 70h que eu não dei nada este semestre só dei int 21h..

Penso que já tenhas o algortimo para isso feito..ou seja uma coisa do género:

(Pseudo-código)
Código:
hour = 2:30:25
while ( hour != Real Time clock )
{
     chama o int 70h;
}
salta fora do while e mostra a mensagem de erro;

O que em assembly de 8086 deve ficar algo do género:

Código:
        mov ax,hour;digamos que em ax temos o valor da hora de alarme
        ;digamos que em bx fica o valor da hora do Real Time clock
        int 70h;chamas o int 70h para ficares com o valor da hora no bx
loop: cmp (ax, bx)
        jne loop
        ;aqui mostras a mensagem de erro com o int 21h ou com o int 10h
        ;a partir daqui já dependes se o programa deve pedir outra hora depois
        ;de mostrar o alarme...ou prosseguir com com o progama
        jmp loop ;se for para prosseguir com o progama

O que deves ficar é com uma coisa deste género...pelo menos a mim é o que me parece mais lógico...

Mas atenção, há que ter em conta o tempo que demoras a executar esse o ciclo em que vês se a hora é igual á aquela que introduzis-te, porque se demoras muito tempo pode acontecer o caso de não acertares na hora que queres, por exemplo:

Se introduzires a hora 1:30:50.
Se começares às 1:30:45, e se o ciclo te demorar 6 segundos a fazer, o que acontece é que quando ele te for fazer a verificação a hora local já está nas 1:30:51, ou seja perdeste a hora em que era suposto ele dar o alarme...

Em principio não deves ter problemas porque os ciclos de relógio do processador são suficientemente rápidos para não perderes a hora...mas nunca se sabe...

Alguma coisa...pergunta que logo se vê se dá para ajudar...Mas como disse o Sky Fox tens de ser tu a fazer o trabalho...até porque só deste 4 aulas de assembly o professor era capaz de estranhar se saísses com um programa demasiado "bom" digamos....

Alguns link's que são capazes de ajudar:

Art of Assembly

Norton Guides-Linguagem

Norton Guides-Interrputs

Hasta all e espero ter ajudado...

PS:Somos 2 que utilizamos este nick(eu mais para ver o fórum)...o Swordfish "real" não percebe nada disto(disto de asm do 8086 )....eu é que estou na FCT a tirar Engº Electro. e tive uma cadeira que é apenas Assembly de 8086 este semestre (Microprocessadores) link aqui
 
Última edição:
Sky Fox--->obrigado pelo teu apoio, assim que poder contacto-te!

Swordfish --> deste-me uma grande ajuda! :) Obrigado. vou começar a preparar o trabalho, assim que tiver ja alguma coisa feita eu coloco a ver as vossas opinioes.
 
Thorax disse:
Swordfish --> deste-me uma grande ajuda! :) Obrigado. vou começar a preparar o trabalho, assim que tiver ja alguma coisa feita eu coloco a ver as vossas opinioes.

É o que é preciso...depois posta aí que é para ver se não precisamos de fazer correções a isso :)

Hasta all [[]]
 
Alarme Real time clock

Caros amigos pois bem aqui estou eu de novo, nesta vez estou dedicado a 100% ao meu trabalho de assembly pois para quem ja nao se lembra :P trata-se de um Alarme. pois eu acabei de criar um codigo mas nao me esta a trabalhar como eu queria. >(
So uma pequena nota, o alarme tem de ficar num programa residente.

.386
cseg segment use16
main proc far
assume cs:cseg
mov dx,offset int4a
mov ax, seg int4a
mov ds,ax
mov ah,25h
mov al,4ah
int 21h ;coloca o endereço da rotina int4a no vector de interrupt 4AH
;/////////////////////////////////////////////////////////////////////////////////

;DEFENIR O FORMATO A TRABALHAR (BCD)

mov al,0bh
out 70H,al
in al,71h
and al,00000010B
out 71H,al

;PERGUNTAR A HORA DO ALARME

mov ah,1 ;Fica a espera que o utilizador prime numa tecla
int 21H
sub al,'0' ;Converte o codigo ASCII em binario
mov bl,al ;Coloca o valor de al no bl
shl bl,4 ;Converte o codigo binario para BCD



mov ah,1 ;Fica a espera que prime outra tecla
int 21H
sub al,'0'

add bl,al ; 12 d = 0001 0010 bcd

;Acrescentar a Hora ao Real Time Clock

mov al,05H
out 70H,al ;Coloquei a hora do formato BCD no
mov al,bl ; Real Time Clock corresondente as
out 71H,al ; horas do Alarme = 05H

;Perguntar os Minutos do Alarme

mov ah,1 ;Fica a espera que o utilizador prime numa tecla
int 21H
sub al,'0' ;Converte o codigo ASCII em binario
mov bl,al ;Coloca o valor de al no bl
shl bl,4 ;Converte o codigo binario para BCD



mov ah,1 ;Fica a espera que prime outra tecla
int 21H
sub al,'0'


add bl,al ; 12 d = 0001 0010 bcd

;Acrescentar os minutos ao Real Time Clock

mov al,03H
out 70H,al ;;Coloquei os minutos do formato BCD no
mov al,bl ;; Real Time Clock corresondente as
out 71H,al ;; horas do Alarme = 05H

;Defenir os Segundos do Alarme


mov bl,00000000b

;Neste ultimo caso, o codigo BCD de 0 e igual ao binario

;Acrescentar os segundos ao Real Time Clock

mov al,01H
out 70H,al ;;Coloquei os segundos do formato BCD no
mov al,bl ;; Real Time Clock corresondente as
out 71H,al ;; horas do Alarme = 01H



;Colocar o Bit 5 do Status B a 1

mov al,0bH
out 70H,al ;; Activamos o Interrupt do Alarme
in al,71H
add al,00100010B
out 71H,al

;IR ao Interrupt Mask Register e garantir k nao esta MASCARADO IRQ8 =A1H

in al,0a1h
and al,11111110B
out 0a1h,al


;/////////////////////////////////////////////////////////////////////////////////
mov dx,zseg
mov ax,es
sub dx,ax ;determina o numero de paragrafos para deixar em memoria
mov ah,31h
int 21h ;termina o programa deixando o residente em memoria
main endp
int4a proc far ; rotina de atendimento ao interrupt
push ax
push bx
push cx
push di
push es ;faz o push de todos os registos que utiliza
;////////////////////////////////////////////////////////////////////////////

;sinal sonoro

in al,61h
add al, 11111111b
out 61h,al


;/////////////////////////////////////////////////////////////////////////////
pop es
pop di
pop cx
pop bx
pop ax ; restaura todos os registos usados
iret ; termina a rotina de interrupt
int4a endp
cseg ends
zseg segment use16
zseg ends ; segmento para calcular o tamanho do programa
end


Ora bem, como o meu prof neste momento nao vai aparecer no instituto politecnico da guarda ate ao dia da entrega do trabalho, entao eu começei a tirar algumas duvidas pelo email. So que agora neste ultimo email que ele me mandou epa... fiquei mesmo as arranhas.... :007:
Por isso vou postar o email que enviei ao prof e a seguinte resposta dele.


----------------email ------------


Caro professor Luis Figueiredo
Tenho alguns problemas no programa Alarme utilizando o Real Time Clock. Eu
criei o programa mas gostava que o professor me desse uma ajuda uma vez que copilado nao existe erro mas quando chega a altura de chamar a mensagem de alarme ele nao executa. presumo que seja algum erro meu e por isso preciso que o professor dê uma revisao do programa e me diga o que estou a fazer mal e se estou a fazer mal, como he-de fazer para corrigir.
Junto envio um ficheiro chamado residente1.ASM e o metodo de implementaçao das horas e minutos no dos é a seguinte:
c:\hhmm
Fico atento a sua resposta.
Obrigado.

-------resposta ao email---------

1º Simplifique o código dos segundos
2º Reveja o código da activação do interrupt de alarme. Olha bem para a tabela e para as instruções que usa.
3º Na rotina de atendimento ao interrupt não invente. Não ponha nada que não saiba ou não entende o que faz. Faça primeiro o algoritmo e depois o código de acordo com esse algoritmo. :die:
4º Pode acontecer em alguns sistemas que após a activação do interrupt de alarme este volte a ser activado em cada segundo que passa até ao fim do primeiro minuto. Pode resolver este problema se na rotina de atendimento desactivar o interrupt de alarme (bit5 do status B a 0).

----------------------------------

Ok pessoal eu tenho de entregar este trabalho ate 3 feira e ainda nao esta a funcionar por isso peço a vossa ajuda para tentar resolver os problemas do meu codigo :)
 
Última edição:
Back
Topo