Assembler

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • 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.



      Quellcode

      1. .MODEL small
      2. .STACK 100h
      3. .DATA
      4. Minute DB 0
      5. Stunde DB 0
      6. Sekunde DB 0
      7. Hintergrundfarbe DB 01100000b
      8. Hintergrundfarbe_2 DB 01110000b
      9. schriftfarbe DB 00001111b
      10. farbe_null DB 00110000b
      11. farbe_eins DB 01010000b
      12. balkenlaenge DB 00001101b
      13. .CODE
      14. mov ax,@data
      15. mov ds,ax
      16. ;-----
      17. call cls
      18. mov ch,20h
      19. mov cl,20h
      20. mov ah,01h
      21. int 10h
      22. @schleife:
      23. mov dl,1
      24. mov dh,1
      25. mov bh,0
      26. mov ah, 02h
      27. int 10h
      28. mov bx,040h
      29. mov es,bx
      30. mov byte ptr cx,es:[6eh]
      31. mov al, cl
      32. mov stunde, cl
      33. aam
      34. mov si,712
      35. mov cl, ah
      36. mov ch, al
      37. add cl, 30h
      38. add ch, 30h
      39. mov ax,0b800h
      40. mov es,ax
      41. mov dl, hintergrundfarbe
      42. add dl, schriftfarbe
      43. mov byte ptr es:[si],cl
      44. mov byte ptr es:[si+1],dl
      45. mov byte ptr es:[si+2],ch
      46. mov byte ptr es:[si+3],dl
      47. mov byte ptr es:[si+4],':'
      48. mov byte ptr es:[si+5],dl
      49. mov ax,40h
      50. mov es,ax
      51. mov ax,es:[6ch]
      52. mov bx,1000
      53. mul bx
      54. mov bx,18200
      55. div bx
      56. mov dx,0
      57. mov bl,60
      58. div bl
      59. mov minute, al
      60. mov sekunde, ah
      61. push ax
      62. aam
      63. mov cl, ah
      64. mov ch, al
      65. add cl, 30h
      66. add ch, 30h
      67. mov ax,0b800h
      68. mov es,ax
      69. mov dl, hintergrundfarbe
      70. add dl, schriftfarbe
      71. mov byte ptr es:[si+6],cl
      72. mov byte ptr es:[si+7],dl
      73. mov byte ptr es:[si+8],ch
      74. mov byte ptr es:[si+9],dl
      75. mov byte ptr es:[si+10],':'
      76. mov byte ptr es:[si+11],dl
      77. pop ax
      78. mov al, ah
      79. xor ah,ah
      80. aam
      81. mov cl, ah
      82. mov ch, al
      83. add cl, 30h
      84. add ch, 30h
      85. mov ax,0b800h
      86. mov es,ax
      87. mov byte ptr es:[si+12],cl
      88. mov byte ptr es:[si+13],dl
      89. mov byte ptr es:[si+14],ch
      90. mov byte ptr es:[si+15],dl
      91. ;beginn Binäruhr
      92. mov ax, 0b800h ;gilt die ganze zeit
      93. mov es, ax
      94. ;;;Beginn Stunde;;;
      95. mov si, 1176 ;Speicheradressen vorbereiten (für die Stunden)
      96. mov bl, stunde
      97. mov cx, 5
      98. @stunde:
      99. sub si, 6
      100. shr bl, 1
      101. jc stunde_eins
      102. jmp Stunden_weiter
      103. stunde_eins:
      104. mov dl, 1
      105. call balken_zeichnen
      106. jmp stunden_ende
      107. Stunden_Weiter:
      108. mov dl, 0
      109. call balken_zeichnen
      110. stunden_ende:
      111. loop @stunde
      112. ;;;Beginn Minute;;;
      113. add si, 74 ;Speicheradressen vorbereiten (für die Minuten)
      114. mov bl, Minute
      115. mov cx, 6
      116. @minute:
      117. sub si, 6
      118. shr bl, 1
      119. jc minute_eins
      120. jmp minute_weiter
      121. minute_eins:
      122. mov dl, 1
      123. call balken_zeichnen
      124. jmp minute_ende
      125. minute_Weiter:
      126. mov dl, 0
      127. call balken_zeichnen
      128. minute_ende:
      129. loop @minute
      130. ;;;Beginn Sekunde;;;
      131. add si, 78 ;Speicheradressen vorbereiten (für die Sekunden)
      132. mov bl, Sekunde
      133. mov cx, 6
      134. @sekunde:
      135. sub si, 6
      136. shr bl, 1
      137. jc Sekunde_eins
      138. jmp Sekunde_weiter
      139. sekunde_eins:
      140. mov dl, 1
      141. call balken_zeichnen
      142. jmp sekunde_ende
      143. Sekunde_Weiter:
      144. mov dl, 0
      145. call balken_zeichnen
      146. sekunde_ende:
      147. loop @sekunde
      148. mov ah,01h
      149. int 16h
      150. jnz @ende
      151. jmp @schleife
      152. @ende:
      153. ;-----
      154. mov ah,4ch
      155. int 21h
      156. ;===========
      157. ; Beginn der Unterprogramme
      158. ;===========
      159. ; dl "1" oder "0"
      160. ;
      161. Balken_Zeichnen proc near
      162. push cx
      163. push si
      164. push bx
      165. mov bl, farbe_eins
      166. mov bh, farbe_null
      167. shr dl, 1
      168. jc Balken_1
      169. jmp Balken_weiter
      170. Balken_1:
      171. mov ch, 0
      172. mov cl, balkenlaenge
      173. Sprung_1:
      174. mov byte ptr es:[si], " "
      175. mov byte ptr es:[si+1], bl
      176. add si, 160
      177. loop Sprung_1
      178. jmp ende_balken
      179. Balken_weiter:
      180. mov ch, 0
      181. mov cl, balkenlaenge
      182. Sprung_2:
      183. mov byte ptr es:[si], " "
      184. mov byte ptr es:[si+1], bh
      185. add si, 160
      186. loop Sprung_2
      187. ende_balken:
      188. pop bx
      189. pop si
      190. pop cx
      191. ret
      192. endp Balken_Zeichnen
      193. cls proc near
      194. push ax
      195. push si
      196. push dx
      197. mov dl, Hintergrundfarbe
      198. mov ax, 0b800h
      199. mov es, ax
      200. mov si, 0
      201. noch_eins:
      202. mov byte ptr es:[si], " "
      203. cmp si, 2080
      204. jge andere_farbe
      205. mov dl, Hintergrundfarbe
      206. mov byte ptr es:[si+1], dl
      207. jmp weiter_farbe
      208. andere_farbe:
      209. mov dl, Hintergrundfarbe_2
      210. mov byte ptr es:[si+1], dl
      211. weiter_farbe:
      212. add si, 2
      213. cmp si, 4002
      214. jnz Noch_eins
      215. ende_cls:
      216. pop dx
      217. pop si
      218. pop ax
      219. ret
      220. cls endp
      221. END
      Alles anzeigen
      Dateien
      • Binwatch.exe

        (3 kB, 1.057 mal heruntergeladen, zuletzt: )
    • 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
    • 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.
    • 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*
    • 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 :think: )

      Website | Blog

      Meine Organe sind offenbar nicht am richtigen Platz. - Nicht am richtigen Platz? Entsprechend welchen Kriterien? aus dem FIlm "Immortal"

      <Goliat> Cypher ruled ;)
    • 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 ;)



      Brainfuck-Quellcode

      1. .MODEL SMALL
      2. .STACK 100h
      3. .DATA
      4. Seed DW 3749h
      5. Meldung DB 'E-Mail: BlueCobold@gmx.de',10,13,'HomePage: http://BlueCobold.18yo.de$'
      6. Screen DB 65000 DUP (?)
      7. .386
      8. .CODE
      9. ;--------------- GRAFIK-MODUS -------------------
      10. InitGraph PROC
      11. mov ax, 13h ; kürzer!
      12. int 10h
      13. push 0a000h ; das ist auch cool...
      14. pop es
      15. ret
      16. InitGraph ENDP
      17. ;--------------- RANDOM -------------------------
      18. Random PROC
      19. MOV AX, Seed ; Move the seed value into AX
      20. MOV DX, 8407H ; Move 8405H into DX
      21. MUL DX ; Put 8405H x Seed into DX:AX
      22. INC AX ; Increment AX
      23. MOV Seed, AX ; We have a new seed
      24. RET
      25. Random ENDP
      26. ;--------------- VIRTUELLEN SCREEN LÖSCHEN ----------------
      27. ClearPage PROC
      28. mov di, Offset Screen
      29. push es
      30. push ds
      31. pop es
      32. mov cx, 16250
      33. xor eax, eax
      34. rep stosd
      35. pop es
      36. ret
      37. ClearPage ENDP
      38. ;--------------- PALETTE ------------------------
      39. SetUpPalette PROC ;geht das nicht kürzer?
      40. mov si, Offset Screen ;geht bestimmt!
      41. mov cx, 64
      42. @pal:
      43. xor ax, ax
      44. mov al, 64
      45. sub al, cl
      46. mov [si], al
      47. mov [si+1], ah
      48. mov [si+2], ah
      49. mov [si+193], al
      50. mov [si+194], ah
      51. mov [si+386], al
      52. mov ah, 63
      53. mov al, ah
      54. mov [si+192], ah
      55. mov [si+384], ax
      56. mov [si+576], ax
      57. mov [si+578], ah
      58. add si, 3
      59. dec cx
      60. jnz @pal
      61. mov si, Offset Screen
      62. xor ax, ax
      63. mov dx, 3c8h
      64. out dx, al
      65. inc dx
      66. mov cx, 768
      67. rep outsb
      68. ret
      69. SetUpPalette ENDP
      70. ;------------- WAITRETRACE --------------------
      71. WaitRetrace PROC
      72. mov dx, 3dah
      73. @Bildaufbau:
      74. in al, dx
      75. test al, 8
      76. jnz @Bildaufbau
      77. @Retrace:
      78. in al, dx
      79. test al, 8
      80. jz @Retrace
      81. ret
      82. WaitRetrace ENDP
      83. ;------------ FUELLEN -------------------------
      84. Fuellen PROC
      85. mov si, 64003
      86. mov cx, 80
      87. @FuellenLoop:
      88. call Random
      89. and dx, 7
      90. jz @PixelSetzen
      91. dec dx
      92. jz @PixelSetzen
      93. dec dx
      94. jnz @NichtNull
      95. @PixelSetzen:
      96. mov al, 255
      97. mov ah, al
      98. mov dx, ax
      99. shl eax,16
      100. mov ax, dx
      101. mov [si+1], ax ; mit 32 Bit arbeiten!
      102. mov [si-3], eax
      103. mov [si-323], eax
      104. mov [si-319], ax
      105. mov [si+317], eax
      106. mov [si+321], ax
      107. @NichtNull:
      108. add si, 4
      109. dec cx
      110. jnz @FuellenLoop
      111. ret
      112. Fuellen ENDP
      113. ;--------------- VIRTUELLE PAGE KOPIEREN -----------------
      114. ShowPage PROC
      115. mov cx, 16000
      116. mov si, OFFSET Screen
      117. xor di, di
      118. rep movsd
      119. ret
      120. ShowPage ENDP
      121. ;--------------- Feuer - EFFEKT -----------------------
      122. DoFire PROC
      123. mov si, Offset Screen+640
      124. mov cx, 64640
      125. @Blur:
      126. xor bx, bx
      127. xor ax, ax
      128. mov bl, [si-1]
      129. add ax, bx
      130. mov bl, [si+1]
      131. add ax, bx
      132. mov bl, [si-320]
      133. add ax, bx
      134. mov bl, [si+320]
      135. add ax, bx
      136. mov bl, [si-319]
      137. add ax, bx
      138. mov bl, [si+319]
      139. add ax, bx
      140. mov bl, [si-321]
      141. add ax, bx
      142. mov bl, [si+321]
      143. add ax, bx
      144. shr ax, 3
      145. jz @skip
      146. dec ax
      147. jz @skip
      148. dec ax
      149. @skip:
      150. mov ds:[si-640], al
      151. inc si
      152. dec cx
      153. jnz @Blur
      154. ret
      155. DoFire ENDP
      156. ;--------------- HAUPTPROGRAMM -----------------------
      157. Start:
      158. push @data
      159. pop ds
      160. call InitGraph
      161. call ClearPage
      162. call SetUpPalette
      163. ;------------ BLUR ------------------------
      164. cli
      165. BlurLoop:
      166. call Fuellen
      167. call DoFire
      168. call WaitRetrace
      169. call ShowPage
      170. in al, 60h ;das mach ich kürzer
      171. cmp al, 1
      172. jnz BlurLoop
      173. sti
      174. ;------------------------------------------
      175. mov ax, 3h
      176. int 10h
      177. mov dx, Offset Meldung
      178. mov ah, 9
      179. int 21h
      180. mov ah, 4Ch
      181. int 21h
      182. END Start
      Alles anzeigen
      Dateien
      • fire.exe

        (67,51 kB, 1.181 mal heruntergeladen, zuletzt: )