Ich will doch mal wissen, wer hier alles schon mal Assembler geschrieben hat. Wer nur die höheren Programmiersprachen gewohnt ist, der wird Assembler hassen und sich davor zurückhalten. (Ich muss mich schin dazu zwingen ;)). Vielleicht habt ihr auch ein paar beispielprogramme? Ich hänge mal meine Bin-Watch an.
Alles anzeigen
Quellcode
- .MODEL small
- .STACK 100h
- .DATA
- Minute DB 0
- Stunde DB 0
- Sekunde DB 0
- Hintergrundfarbe DB 01100000b
- Hintergrundfarbe_2 DB 01110000b
- schriftfarbe DB 00001111b
- farbe_null DB 00110000b
- farbe_eins DB 01010000b
- balkenlaenge DB 00001101b
- .CODE
- mov ax,@data
- mov ds,ax
- ;-----
- call cls
- mov ch,20h
- mov cl,20h
- mov ah,01h
- int 10h
- @schleife:
- mov dl,1
- mov dh,1
- mov bh,0
- mov ah, 02h
- int 10h
- mov bx,040h
- mov es,bx
- mov byte ptr cx,es:[6eh]
- mov al, cl
- mov stunde, cl
- aam
- mov si,712
- mov cl, ah
- mov ch, al
- add cl, 30h
- add ch, 30h
- mov ax,0b800h
- mov es,ax
- mov dl, hintergrundfarbe
- add dl, schriftfarbe
- mov byte ptr es:[si],cl
- mov byte ptr es:[si+1],dl
- mov byte ptr es:[si+2],ch
- mov byte ptr es:[si+3],dl
- mov byte ptr es:[si+4],':'
- mov byte ptr es:[si+5],dl
- mov ax,40h
- mov es,ax
- mov ax,es:[6ch]
- mov bx,1000
- mul bx
- mov bx,18200
- div bx
- mov dx,0
- mov bl,60
- div bl
- mov minute, al
- mov sekunde, ah
- push ax
- aam
- mov cl, ah
- mov ch, al
- add cl, 30h
- add ch, 30h
- mov ax,0b800h
- mov es,ax
- mov dl, hintergrundfarbe
- add dl, schriftfarbe
- mov byte ptr es:[si+6],cl
- mov byte ptr es:[si+7],dl
- mov byte ptr es:[si+8],ch
- mov byte ptr es:[si+9],dl
- mov byte ptr es:[si+10],':'
- mov byte ptr es:[si+11],dl
- pop ax
- mov al, ah
- xor ah,ah
- aam
- mov cl, ah
- mov ch, al
- add cl, 30h
- add ch, 30h
- mov ax,0b800h
- mov es,ax
- mov byte ptr es:[si+12],cl
- mov byte ptr es:[si+13],dl
- mov byte ptr es:[si+14],ch
- mov byte ptr es:[si+15],dl
- ;beginn Binäruhr
- mov ax, 0b800h ;gilt die ganze zeit
- mov es, ax
- ;;;Beginn Stunde;;;
- mov si, 1176 ;Speicheradressen vorbereiten (für die Stunden)
- mov bl, stunde
- mov cx, 5
- @stunde:
- sub si, 6
- shr bl, 1
- jc stunde_eins
- jmp Stunden_weiter
- stunde_eins:
- mov dl, 1
- call balken_zeichnen
- jmp stunden_ende
- Stunden_Weiter:
- mov dl, 0
- call balken_zeichnen
- stunden_ende:
- loop @stunde
- ;;;Beginn Minute;;;
- add si, 74 ;Speicheradressen vorbereiten (für die Minuten)
- mov bl, Minute
- mov cx, 6
- @minute:
- sub si, 6
- shr bl, 1
- jc minute_eins
- jmp minute_weiter
- minute_eins:
- mov dl, 1
- call balken_zeichnen
- jmp minute_ende
- minute_Weiter:
- mov dl, 0
- call balken_zeichnen
- minute_ende:
- loop @minute
- ;;;Beginn Sekunde;;;
- add si, 78 ;Speicheradressen vorbereiten (für die Sekunden)
- mov bl, Sekunde
- mov cx, 6
- @sekunde:
- sub si, 6
- shr bl, 1
- jc Sekunde_eins
- jmp Sekunde_weiter
- sekunde_eins:
- mov dl, 1
- call balken_zeichnen
- jmp sekunde_ende
- Sekunde_Weiter:
- mov dl, 0
- call balken_zeichnen
- sekunde_ende:
- loop @sekunde
- mov ah,01h
- int 16h
- jnz @ende
- jmp @schleife
- @ende:
- ;-----
- mov ah,4ch
- int 21h
- ;===========
- ; Beginn der Unterprogramme
- ;===========
- ; dl "1" oder "0"
- ;
- Balken_Zeichnen proc near
- push cx
- push si
- push bx
- mov bl, farbe_eins
- mov bh, farbe_null
- shr dl, 1
- jc Balken_1
- jmp Balken_weiter
- Balken_1:
- mov ch, 0
- mov cl, balkenlaenge
- Sprung_1:
- mov byte ptr es:[si], " "
- mov byte ptr es:[si+1], bl
- add si, 160
- loop Sprung_1
- jmp ende_balken
- Balken_weiter:
- mov ch, 0
- mov cl, balkenlaenge
- Sprung_2:
- mov byte ptr es:[si], " "
- mov byte ptr es:[si+1], bh
- add si, 160
- loop Sprung_2
- ende_balken:
- pop bx
- pop si
- pop cx
- ret
- endp Balken_Zeichnen
- cls proc near
- push ax
- push si
- push dx
- mov dl, Hintergrundfarbe
- mov ax, 0b800h
- mov es, ax
- mov si, 0
- noch_eins:
- mov byte ptr es:[si], " "
- cmp si, 2080
- jge andere_farbe
- mov dl, Hintergrundfarbe
- mov byte ptr es:[si+1], dl
- jmp weiter_farbe
- andere_farbe:
- mov dl, Hintergrundfarbe_2
- mov byte ptr es:[si+1], dl
- weiter_farbe:
- add si, 2
- cmp si, 4002
- jnz Noch_eins
- ende_cls:
- pop dx
- pop si
- pop ax
- ret
- cls endp
- END