All pastes #438841 Raw Edit

Olav

public text v1 · immutable
·published 2007-04-13 21:46 UTC
rendered paste body
	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, '$'