bits 16 ; 16-bits instruksjoner takk ;-)
org 100h ; start 256 bytes ut i COM-fila
mov ah, 9 ; Gir AH (argumentet for APIet til DOS) funksjonsnummeret til funksjonen
; vi vil ha, der 9 er printmodus
mov ah, 0x2C ; Henter ut time/minutt/sekund til CH (time), CL (minutt) og DH ([sekund) fra adressen 0x2C
int 0x21 ; Kaller DOS med argumentene.. (9, printmodus)
mov al, dh ; Gir AL verdien til DH (husk, sekund)
sjekk: ; Typisk label, ikke noe spesielt
int 0x21 ; Kaller DOS igjen - få nye verdier i CH osv. Husk at argumentene fortsatt er de samme
cmp dh, al ; Er AL (gamle DH-verdi) det samme som den nye verdien til DH (sekund)?
je sjekk ; Nei nei, vi må vente litt til! :-)
jmp ferdig1 ; Ja, det er den. Hopp til ferdig1
ferdig1:
mov si, strengen ; Gir SI verdien til første byte i "strengen"
mov di, 0x1420 ; Tenk deg en peker, jeg lar DI starte på minneadressen 0x1420 (strengen)
kopier:
mov al, [si] ; Gir AL det som minneadressen SI inneholder
mov [di], al ; Gir minneadressen DI verdien til AL
cmp al, '$' ; Inneholder AL (minneadressen til DI, en indeks) ascii'en $?
je ferdig2 ; Ja, har vi truffet siste byte i strengen, som er "$" (sluttegn for streng)
inc si ; Ikke ferdig, inkrementer verdien til SI
inc di ; ---- || -----
jmp kopier ; $ har vi ikke sett! La oss prøve en gang til
ferdig2:
mov ah, 9 ; Vi bruker 9 som API-argument igjen; printmodus
mov dx, 0x1420 ; DX får en verdi som er adressen der strengen starter
int 0x21 ; Kom til meg, DOS! Vi har argumenter
mov ah, 0x4C ; Gir AH argumentet for å avslutte programmet
int 0x21 ; Kall DOS!
strengen:
db "Denne strengen tok ca. 1 sek aa printe ut, pga. klokkesjekking + kopieringsfunksjon!", 13, 10, '$'