🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #497

Re: problem z przerwaniem 1ch

#497
From: Bernard
Date: Sat, 05 Aug 2006 09:07
112 lines
2916 bytes
KRUKERSradek wrote:
> Napisałem program który co jakiś czas ma wyświetlać wiadomość.Niewiem co
> jest zle bo wcale tego nie robi.

Po pierwsze - nie musi to działać pod Windows.

> Prosze o odpowiedz (proszę w odpowiedzi wysłać poprawiony cały kod i
> wyjaśnienie, jeśli można)

Oczywiście. Ile płacisz?

> program pisany pod asemblera tasm.

Asembler. Biernik, nie dopełniacz.

> .MODEL SMALL
> .STACK 256
> .DATA
> 
> OLD_ADRES DD 00000000
> LICZNIK DW 0000
> BYTE_TIMER DB 00
> MESSAGE DB 'MESSAGE','$'
> 
> .CODE
> 
> START:
>  .386
>  MOV AX,@DATA
>  MOV DS,AX
>  CALL INSTALL_TIMER
> 
> MAIN:
>          CALL DELAY
>          JMP MAIN
> 
> 
> TIMER:
>          CLI

Zbędne. IF jest już równy 0.

>          INC LICZNIK

Procesor wykonuje w tym momencie dostęp do nieznanej komórki pamięci, o 
adresie LICZNIK liczonym względem bieżącego DS, który jest dość losowy.

>          CMP LICZNIK,10
>          JE  TIMER00
>          JMP TIMER_RETURN

Te dwa skoki są równoważme jednemu JNE. To samo dalej.

> TIMER00:
>          MOV BYTE_TIMER,01
>          MOV LICZNIK,0000
>          JMP TIMER_RETURN
> TIMER_RETURN:
>          STI

Zbędne. IRET i tak zamaże IF.

>          IRET
> 
> 
> 
> 
> DELAY PROC NEAR
> DELAY_GO:
>          CMP BYTE_TIMER,01
>          JE  DELAY_RETURN
>          JMP DELAY_GO
> DELAY_RETURN:
>          MOV BYTE_TIMER,00
>          MOV AX,0900H
>          LEA DX,MESSAGE
>          INT 21H
>          RET
> DELAY ENDP

> INSTALL_TIMER PROC NEAR
> 
>          MOV AX,351CH
>          INT 21H
>          MOV WORD PTR OLD_ADRES,BX
>          MOV WORD PTR OLD_ADRES+2,ES
> 
>          MOV AX,251CH
>          LEA DX,TIMER
>          PUSH DS
>          PUSH CS
>          POP DS
>          INT 21H
>          POP DS
>          RET
> INSTALL_TIMER ENDP
> 
> 
> UNINSTALL_TIMER PROC NEAR
> 
>          PUSH DS
>          MOV AX,251CH
>          LDS DX,OLD_ADRES
>          INT 21H
>          POP DS
>          RET
> UNINSTALL_TIMER ENDP
> 
> END START
> 
> 
> 
Technical Details
Message-ID: <44d455c1$0$22595$f69f905@mamut2.aster.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.astercity.net!news.aster.pl!not-for-mail
References: <eb0iua$3dn$1@nemesis.news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.astercity.net!news.aster.pl!not-for-mail
Date: Sat, 05 Aug 2006 11:07:18 +0200
From: Bernard <bernard@earth.net>
User-Agent: Thunderbird 1.5.0.5 (Windows/20060719)
MIME-Version: 1.0
Newsgroups: pl.comp.lang.asm
Subject: Re: problem z przerwaniem 1ch
References: <eb0iua$3dn$1@nemesis.news.tpi.pl>
In-Reply-To: <eb0iua$3dn$1@nemesis.news.tpi.pl>
X-Antivirus: avast! (VPS 0631-3, 2006-08-04), Outbound message
X-Antivirus-Status: Clean
Lines: 112
Message-ID: <44d455c1$0$22595$f69f905@mamut2.aster.pl>
NNTP-Posting-Date: 05 Aug 2006 08:24:33 GMT
NNTP-Posting-Host: 82.210.165.187
X-Trace: 1154766273 mamut2.aster.pl 22595 82.210.165.187:1466
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit