Assembler |
Pirroh
Otto Normalposter
Dabei seit: 10.10.2004
Beiträge: 110
Herkunft: Breskens / Niederlande
Level: 35 [?]
Erfahrungspunkte: 786.060
Nächster Level: 824.290
|
|
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.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
|
.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
|
|
|
|
31.05.2005 11:53 |
|
|
MoD3000
Hoffnungsloser Fall
Dabei seit: 25.09.2002
Beiträge: 3.510
Level: 56 [?]
Erfahrungspunkte: 27.699.591
Nächster Level: 30.430.899
|
|
Und was sagt uns das? gcc -S regelt ausserdem.
Wo bleibt eigentlich die ausreichende Wuerdigung fuer SPARC-Assembler. Haltet eine _grosse_ Tuete bereit.
|
|
31.05.2005 12:14 |
|
|
Goliat Skipson
ForumsGolly
Dabei seit: 07.02.2004
Beiträge: 2.012
Herkunft: The other Place
Level: 52 [?]
Erfahrungspunkte: 14.872.153
Nächster Level: 16.259.327
|
|
naja ... meiner meinung nach hat assembler in der 'alltags programmierung' so ziemlich ausgesorgt ...
natürlich könnte man diverse programme die in einer highlevel language geschrieben sind nocheinmal überarbeiten ... aber bei der komplexität heutiger programme, und der leistung der compiler ist das eigentlich nichtmehr möglich und nötig ...
assembler hat wohl noch seinen sinn ... so werden viele industriemaschinen noch direkt mit assembler abarten programmiert ... aber im 'wahren leben' braucht man assembler wohl nimmer ...
__________________
Realität, so wissen wir aus eigener vielfacher Erfahrung, Realität ist etwas für Leute, die nicht mit Science-Fiction klarkommen
|
|
31.05.2005 12:43 |
|
|
MoD3000
Hoffnungsloser Fall
Dabei seit: 25.09.2002
Beiträge: 3.510
Level: 56 [?]
Erfahrungspunkte: 27.699.591
Nächster Level: 30.430.899
|
|
Du wirst dich wundern, aber jedes gute Programm wird "nachoptimiert". Ob immer per Hand ist ne andere Frage.
Und die tausend verschiedenen DSPs dieser Welt sind ein verschwindendes Problem?
|
|
31.05.2005 13:27 |
|
|
JaWaS
Otto Normalposter
Dabei seit: 20.03.2004
Beiträge: 139
Level: 37 [?]
Erfahrungspunkte: 1.021.666
Nächster Level: 1.209.937
|
|
Wuahah die Sprache gefällt mir ned, ich mags eher entweder like Java, C++ bzw C (auch wenn ich nur Java richtig beherrsche) oder halt PHP bzw MySQL obwohl die anweißungen in PHP eh ähnlich aufgebaut sind.
__________________ Black Metal bedient sich des extremen Heavy Metal und zerreißt ihn zu giftigen, scharfkantigen Splittern hörbaren Hasses.
|
|
31.05.2005 14:20 |
|
|
Three of Five
Borg
Dabei seit: 01.06.2002
Beiträge: 4.898
Herkunft: Unimatrix 01
Level: 58 [?]
Erfahrungspunkte: 39.223.349
Nächster Level: 41.283.177
|
|
jawas, naja, asm is eh in jeder architektur anders ^^
das hier is ja x86 asm, genauer lernen wir asm des 8086
ich find es eigendlich recht gut, sehr gut für das verständniss der grundlagen
und man freut sich immer ziemlich wenn dann ein prog funktioniert
vllt sollten wir hier auch mal die fire.exe posten, ca 200zeilen asm code aber was da rauskommt is schon ziemlich nett
vllt sollte robin hier auch mal seinen in delphi geschriebenen asmide posten *g*
__________________ We are the Borg!
Resistance is futile!
the hellboard - join the community now!
maddin.org - Full Metal Pictures - Konzertbilder und mehr
|
|
31.05.2005 16:02 |
|
|
LuxY
Fingerwundschreiber
Dabei seit: 24.08.2003
Beiträge: 332
Level: 41 [?]
Erfahrungspunkte: 2.509.564
Nächster Level: 2.530.022
|
|
Ich komm auch besser mit C/Perl/PHP zurecht als mit asm muss ich sagen
__________________ D.E.L.U.X.E.: Digital Electronic Lifeform Used for Xenocide and Exploration
|
|
31.05.2005 19:36 |
|
|
Cypher
gehört zum Inventar
Dabei seit: 20.04.2003
Beiträge: 916
Level: 47 [?]
Erfahrungspunkte: 7.039.116
Nächster Level: 7.172.237
|
|
also ich fühl mich mit c ganz gut bedient, was low level programmierung angeht (sofern man es nötig hat) ^^
ansonsten gibts ja auch noch c++, perl, ....
und andere sprachen lernen sich ja auch relativ flott. assembler muss ich glaub ich nächstes jahr in der schule lernen um irgendwelche platinen zu programmieren... naja, is bestimmt ganz nützlich wenn man das kann *an deassemblieren denk* (schreibt man das so
)
__________________
Website | Blog
Meine Organe sind offenbar nicht am richtigen Platz. - Nicht am richtigen Platz? Entsprechend welchen Kriterien? aus dem FIlm "Immortal"
<Goliat> Cypher ruled ;)
|
|
31.05.2005 21:38 |
|
|
MoD3000
Hoffnungsloser Fall
Dabei seit: 25.09.2002
Beiträge: 3.510
Level: 56 [?]
Erfahrungspunkte: 27.699.591
Nächster Level: 30.430.899
|
|
Du musst zu viel Zeit haben. Am besten gleich explorer.exe deassemblieren. Den Source (moeglichst C) kannst du ja dann hier veroeffentlichen.
|
|
31.05.2005 23:08 |
|
|
SirBelial
Forenbesetzer
Dabei seit: 15.04.2004
Beiträge: 1.183
Herkunft: Bielefeld - Quelle
Level: 49 [?]
Erfahrungspunkte: 8.663.775
Nächster Level: 10.000.000
|
|
Aber man kanns auch übertreiben.
|
|
01.06.2005 06:54 |
|
|
Pirroh
Otto Normalposter
Dabei seit: 10.10.2004
Beiträge: 110
Herkunft: Breskens / Niederlande
Level: 35 [?]
Erfahrungspunkte: 786.060
Nächster Level: 824.290
|
|
Zitat: |
Original von Three of Five
[...]
vllt sollten wir hier auch mal die fire.exe posten, ca 200zeilen asm code aber was da rauskommt is schon ziemlich nett
[...] |
|
Ok, gesagt getan. Damit keine Missverständnisse aufkommen: ich habe sie nicht geschrieben und komm auch bei dem Quelltext nich hinterher (da muss ich wohl noch lange üben *seufz*)
die Kommentare ( ; ) sind übrigens auch ganz lustig
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
|
.MODEL SMALL
.STACK 100h
.DATA
Seed DW 3749h
Meldung DB 'E-Mail: BlueCobold@gmx.de',10,13,'HomePage: http://BlueCobold.18yo.de$'
Screen DB 65000 DUP (?)
.386
.CODE
;--------------- GRAFIK-MODUS -------------------
InitGraph PROC
mov ax, 13h ; kürzer!
int 10h
push 0a000h ; das ist auch cool...
pop es
ret
InitGraph ENDP
;--------------- RANDOM -------------------------
Random PROC
MOV AX, Seed ; Move the seed value into AX
MOV DX, 8407H ; Move 8405H into DX
MUL DX ; Put 8405H x Seed into DX:AX
INC AX ; Increment AX
MOV Seed, AX ; We have a new seed
RET
Random ENDP
;--------------- VIRTUELLEN SCREEN LÖSCHEN ----------------
ClearPage PROC
mov di, Offset Screen
push es
push ds
pop es
mov cx, 16250
xor eax, eax
rep stosd
pop es
ret
ClearPage ENDP
;--------------- PALETTE ------------------------
SetUpPalette PROC ;geht das nicht kürzer?
mov si, Offset Screen ;geht bestimmt!
mov cx, 64
@pal:
xor ax, ax
mov al, 64
sub al, cl
mov [si], al
mov [si+1], ah
mov [si+2], ah
mov [si+193], al
mov [si+194], ah
mov [si+386], al
mov ah, 63
mov al, ah
mov [si+192], ah
mov [si+384], ax
mov [si+576], ax
mov [si+578], ah
add si, 3
dec cx
jnz @pal
mov si, Offset Screen
xor ax, ax
mov dx, 3c8h
out dx, al
inc dx
mov cx, 768
rep outsb
ret
SetUpPalette ENDP
;------------- WAITRETRACE --------------------
WaitRetrace PROC
mov dx, 3dah
@Bildaufbau:
in al, dx
test al, 8
jnz @Bildaufbau
@Retrace:
in al, dx
test al, 8
jz @Retrace
ret
WaitRetrace ENDP
;------------ FUELLEN -------------------------
Fuellen PROC
mov si, 64003
mov cx, 80
@FuellenLoop:
call Random
and dx, 7
jz @PixelSetzen
dec dx
jz @PixelSetzen
dec dx
jnz @NichtNull
@PixelSetzen:
mov al, 255
mov ah, al
mov dx, ax
shl eax,16
mov ax, dx
mov [si+1], ax ; mit 32 Bit arbeiten!
mov [si-3], eax
mov [si-323], eax
mov [si-319], ax
mov [si+317], eax
mov [si+321], ax
@NichtNull:
add si, 4
dec cx
jnz @FuellenLoop
ret
Fuellen ENDP
;--------------- VIRTUELLE PAGE KOPIEREN -----------------
ShowPage PROC
mov cx, 16000
mov si, OFFSET Screen
xor di, di
rep movsd
ret
ShowPage ENDP
;--------------- Feuer - EFFEKT -----------------------
DoFire PROC
mov si, Offset Screen+640
mov cx, 64640
@Blur:
xor bx, bx
xor ax, ax
mov bl, [si-1]
add ax, bx
mov bl, [si+1]
add ax, bx
mov bl, [si-320]
add ax, bx
mov bl, [si+320]
add ax, bx
mov bl, [si-319]
add ax, bx
mov bl, [si+319]
add ax, bx
mov bl, [si-321]
add ax, bx
mov bl, [si+321]
add ax, bx
shr ax, 3
jz @skip
dec ax
jz @skip
dec ax
@skip:
mov ds:[si-640], al
inc si
dec cx
jnz @Blur
ret
DoFire ENDP
;--------------- HAUPTPROGRAMM -----------------------
Start:
push @data
pop ds
call InitGraph
call ClearPage
call SetUpPalette
;------------ BLUR ------------------------
cli
BlurLoop:
call Fuellen
call DoFire
call WaitRetrace
call ShowPage
in al, 60h ;das mach ich kürzer
cmp al, 1
jnz BlurLoop
sti
;------------------------------------------
mov ax, 3h
int 10h
mov dx, Offset Meldung
mov ah, 9
int 21h
mov ah, 4Ch
int 21h
END Start |
|
Dateianhang: |
fire.exe (66 KB, 933 mal heruntergeladen)
|
|
|
01.06.2005 10:44 |
|
|
|