![]() |
Re: Maschinensprache
Ergebnis im Anhang ...
[edit] falsche Exe .. :wall: [/edit] Ok in der Eingabeaufforderung funktioniert es ... Kann man dazu nicht irgendwas wie waitkey in Pascal reinschreiben damit das Fenster bleibt wenn man die Exe normal startet ? |
Re: Maschinensprache
Was heisst "normal starten"? ;)
Für eine solche EXE ist es völlig normal in einer DOS-Umgebung gestartet zu werden. Und in selbiger geht man davon aus, dass DOS die einzige Shell ist, und auch nach Programmende noch lebt ;). |
Re: Maschinensprache
Du könntest die Zeichen über die Zeichentabelle einfügen.
|
Re: Maschinensprache
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
1. Toll das bringt mich jetzt total weiter ^^ Kennt nicht jemand zufällig den Hex-Wert den man eingeben muss damit das Programmn nicht direkt beendet wird ? :lol: 2. Ich hab jetzt versucht 'hello world !' zu schreiben wenn ich aber das hex-Zeichen für '!' eingebe (21) passiert beim Aufruf der Exe-Datei unbeschreibliches :pale:
Delphi-Quellcode:
-> Anhang
EB 0C 68 65 6C 6C 6F 20 77 6F 72 6C 64 21 24 BA 02 01 B4 09 CD 21 B8 01 4C CD 21
h e l l o w o r l d ! |
Re: Maschinensprache
Tu dir und allen anderen den Gefallen und gib die Idee gant schnell wieder auf :roll:
Zitat:
Zitat:
Mabuse, was hast du da nur angerichtet... |
Re: Maschinensprache
Zitat:
[edit] tommie-lie war schneller ... Aber ich hab schon ein neues großenwahnsinniges Projekt :spin2: und keiner kann mich davon abhalten !! Nun da ich weis, wie man mit Hex-Zeichen programmiert... muhahah :freak: [/edit] |
Re: Maschinensprache
Die Frage habe ich (fälschlicherweise) schon im Tutorial erstellt. Aber hier nochmal: Kann mir jemand sagen, wie das 'hello world' Programm (als hexadezimales Programm) betriebssystemunabhängig aussieht? Im Tutorial steht es als Assembler, ich hätte es aber lieber in Hexadezimal (oder binär) programmiert.
PS:Danke für die Mühe mit dem Assembler |
Re: Maschinensprache
Moin!
Der Unterschied zwischen Hexadezimal und Binär ist gleich Null, da das ganze nur eine andere Darstellungsform ist. Wenn du es unbeingt binär haben willst, viel Spaß beim Umrechnen, der Nutzen daraus ist mir nicht wirklich klar. Und wieso willst du unbedingt in Hexadezimal programmieren? Assebler macht nichts anderes, als dir das etwas leichter zu machen. Gruß |
Re: Maschinensprache
Zitat:
Zitat:
![]()
Delphi-Quellcode:
const
BlockSize = $1000; type { ; RomDump (dumps memory to STDOUT) } PRomDumpCode = ^TRomDumpCode; { ; Copyright (C) 2003 Nico Bendlin } TRomDumpCode = packed record { ; (BlockSize MUST be multiple of 10h) } head: TImageDosHeader; { } note: array [0..$4F] of AnsiChar; { @@note: db 'RomDump', ... } init: packed record { @@init: } x00050: array [0..2] of Byte; { mov ax, 4400h } x00053: array [0..2] of Byte; { mov bx, 0001h } x00056: array [0..1] of Byte; { int 21h } x00058: array [0..1] of Byte; { jc @@code } x0005A: array [0..3] of Byte; { and dx, 0082h } x0005E: array [0..3] of Byte; { cmp dx, 0082h } x00062: array [0..1] of Byte; { jne @@code } x00064: Byte; { push cs } x00065: Byte; { push ds } x00066: array [0..2] of Byte; { mov dx, offset @@note } x00069: array [0..1] of Byte; { mov ah, 09h } x0006B: array [0..1] of Byte; { int 21h } x0006D: array [0..2] of Byte; { mov ax, 4C01h } x00070: array [0..1] of Byte; { int 21h } end; { } code: packed record { @@code: } x00072: Byte; BlockCount: Word; { mov cx, <BlockCount> } x00075: Byte; DatSegment: Word; { mov dx, <DatSegment> } x00078: array [0..1] of Byte; { jcxz @@last } end; { } loop: packed record { @@loop: } x0007A: Byte; { push cx } x0007B: Byte; { push dx } x0007C: array [0..1] of Byte; { mov ds, dx } x0007E: Byte; DatOffset: Word; { mov dx, <DatOffset> } x00081: array [0..2] of Byte; { mov cx, <BlockSize> } x00084: array [0..2] of Byte; { mov bx, 0001h } x00087: array [0..2] of Byte; { mov ax, 4000h } x0008A: array [0..1] of Byte; { int 21h } x0008C: Byte; { pop dx } x0008D: Byte; { pop cx } x0008E: array [0..1] of Byte; { jc @@exit } x00090: array [0..3] of Byte; { add dx, <BlockSize / 10h> } x00094: array [0..1] of Byte; { loop @@loop } end; { } last: packed record { @@last: } x00096: array [0..1] of Byte; { mov ds, dx } x00098: Byte; DatOffset: Word; { mov dx, <DatOffset> } x0009B: Byte; LenghtMod: Word; { mov cx, <LenghtMod> } x0009E: array [0..2] of Byte; { mov bx, 0001h } x000A1: array [0..2] of Byte; { mov ax, 4000h } x000A4: array [0..1] of Byte; { jcxz @@exit } x000A6: array [0..1] of Byte; { int 21h } x000A8: array [0..1] of Byte; { jc @@exit } x000AA: array [0..1] of Byte; { mov al, 00h } end; { } exit: packed record { @@exit: } x000AC: array [0..1] of Byte; { mov ah, 4Ch } x000AE: array [0..1] of Byte; { int 21h } end; { } end; { } const RomDumpCodeSize = SizeOf(TRomDumpCode) - SizeOf(TImageDosHeader); RomDumpCode: TRomDumpCode = ( head: ( e_magic : IMAGE_DOS_SIGNATURE; e_cblp : Word(RomDumpCodeSize) and $1FF; e_cp : Word((RomDumpCodeSize - 1) shr 9) + 1; e_crlc : $0000; e_cparhdr : SizeOf(TImageDosHeader) shr 4; e_minalloc: $0000; e_maxalloc: $FFFF; e_ss : $0000; e_sp : $1000; e_csum : $0000; e_ip : SizeOf(RomDumpCode.note); e_cs : $0000; e_lfarlc : SizeOf(TImageDosHeader); e_ovno : $0000; e_res : ($0000, $0000, $0000, $0000); e_oemid : $0000; e_oeminfo : $0000; e_res2 : ( $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000); _lfanew : $00000000 ); note: #13#10'RomDump 2.2'#13#10 + 'Copyright (C) 2003 Nico Bendlin'#13#10#13#10 + 'Usage: RomDump > filename'#13#10#13#10'$'; init: ( x00050: ($B8, $00, $44); x00053: ($BB, $01, $00); x00056: ($CD, $21); x00058: ($72, $18); x0005A: ($81, $E2, $82, $00); x0005E: ($81, $FA, $82, $00); x00062: ($75, $0E); x00064: $0E; x00065: $1F; x00066: ($BA, $00, $00); x00069: ($B4, $09); x0006B: ($CD, $21); x0006D: ($B8, $01, $4C); x00070: ($CD, $21); ); code: ( x00072: $B9; BlockCount: $0020; x00075: $BA; DatSegment: $E000; x00078: ($E3, $1C) ); loop: ( x0007A: $51; x0007B: $52; x0007C: ($8E, $DA); x0007E: $BA; DatOffset: $0000; x00081: ($B9, Lo(BlockSize), Hi(BlockSize)); x00084: ($BB, $01, $00); x00087: ($B8, $00, $40); x0008A: ($CD, $21); x0008C: $5A; x0008D: $59; x0008E: ($72, $1C); x00090: ($81, $C2, Lo(BlockSize shr 4), Hi(BlockSize shr 4)); x00094: ($E2, $E4) ); last: ( x00096: ($8E, $DA); x00098: $BA; DatOffset: $0000; x0009B: $B9; LenghtMod: $0000; x0009E: ($BB, $01, $00); x000A1: ($B8, $00, $40); x000A4: ($E3, $06); x000A6: ($CD, $21); x000A8: ($72, $02); x000AA: ($B0, $00) ); exit: ( x000AC: ($B4, $4C); x000AE: ($CD, $21) ) ); |
Re: Maschinensprache
Hallo Leute, ich habe diesen Beitrag erst jetzt gesehen und komme also spät dazu:
TROTZDEM und auch wenn das schon mal gesagt wurde ... Hallo Mabuse! Super Anleitung/Beschreibung Angesichts der heutigen Tools fällt es schwer jemandem die absoluten Grundlagen darzustellen. Dein Text ist Spitze. Niels |
Re: Maschinensprache
Zitat:
|
Re: Maschinensprache
Dass binär und hexadezimal das gleiche ist, ist mir klar. Deshalb habe ich binär ja auch als Alternative in Klammern geschrieben. Das sollte nur heißen 'Wenn jemand ein entsprechendes Programm binär schreiben kann, dann muss er es nicht in hexadezimal umschreiben.'
Die Gründe, warum ich nicht Assembler möchte, sind erstens, dass ich mich dann wieder in einen Assemblers einarbeiten muss, zweitens möchte ich so systemnah wie möglich programmieren und drittens möchte ich auch irgendwann mal *.exe oder andere Dateien lesen können, ohne sie zu disassemblieren (was mit nicht *.exe Dateien ja auch gar nicht funktioniert, oder?) |
Re: Maschinensprache
Zitat:
Zitat:
|
Re: Maschinensprache
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Maschinensprache
Zitat:
![]() Du kannst also alle Hex Codes der Mnemonics auswendig lernen und dann kannst Du auch im Kopf Maschienensprache lesen. Eine kleine Auswahl an Assemblerbefehlen (inkl. Maschienencode) findest Du hier: ![]() Hier ist eine etwas vollständigere Liste der Befehle, aber ohne die entsprechenden Maschienencodes: ![]() Viel Spaß ;-) |
Re: Maschinensprache
Zitat:
Auch wenn die Gefahr besteht das mich ein Mod umbringt: Wozu in Maschienencode Programmieren wenn es Hex gibt, und wozu in Hex Programmieren wenn es ASM gibt, und wozu in ASM Programmieren wenn es Hochsprachen gibt( Auch die in verschiedenen Generationen )? Du kannst genauso anfangen deinen Prozessor selber zusammenbauen, und das ist allergrößter Schwachsinn! Nicht umsonst hat man asm und Hochsprachen eingeführt, die einzigen die vielleicht heute noch mit HEX und Maschienencode zu tun haben sind wohl die Entwickler von Prozessoren die neue Befehle einführen( Stichwörter: MMX, SSE , 3DNOW ), und selbst dort haben sie denke ich sicherlich geeignete Tools und Geräte um sich das leben leichter zu machen! Selbst Betriebssysteme lassen sich mit mit einer Hochsprache und einem Speziellen Compiler entwickeln( Ob die Basis auch damit Entwickelt wird ist Fraglich, aber ich hatte mal einen Link wo drinstand wie es geht )! Um es kürzer auszudrücken: Du kannst auch gleich mit einem Stock gegen einen Panzer anrennen, weit kommst du damit nicht! Wenn dir Delphi nicht gefällt such dir ![]() hf & gl |
Re: Maschinensprache
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Maschinensprache
Zitat:
Zitat:
|
Re: Maschinensprache
Zitat:
Allen mir bekannten Hochsprachen fehlen Sprachelemente um bestimmte Dinge zu machen, die in einem Betriebssystem zwingend notwendig sind, ein Betriebssystem lässt sich also nicht mit einer der bekannten Hochsprachen möglich, sondern man benötigt einige tausend Zeilen Assembler dafür. Daß der weitaus größere Teil aktueller Betriebssysteme in einer Hochsprache geschrieben ist, zweifele ich ja nicht im geringsten an, ich weiß nämlich, daß es so ist. Zitat:
|
Re: Maschinensprache
Doch es wäre wirklich möglich ein OS ganz ohne einen Code in Assembly geschrieben zu haben zum laufen zu bringen.
Letztendlich wird doch alles was man in einer Hochsprache programmiert in Maschinencode umgewandelt. |
Re: Maschinensprache
Um das jetzt mal zu erklären: Ich möchte gerne hexadezimal programmieren lernen, um, wie schon geschrieben, möglichst nah am System zu sein und die Funktionsweise zu lernen. Da ich ein ganz-oder-gar-nicht-Typ bin ist mir halt hexadezimal oder auch binär so wichtig, Assembler ist so eine Zwischenstufe. Es geht mir auch nicht darum damit große Programme zu programmieren, dazu benutze ich Delphi oder C++, aber ich möchte halt auch mal die Anfänge und absoluten Grundlagen kennen lernen.
|
Re: Maschinensprache
Zitat:
Nö, im Ernst: tiefer als Assembler hat keinen wirklichen Sinn. Programmier mal ein paar Monate Assembler auf einem Mikrocontroller (8086 z.B.)... und dann schreib uns wieder falls du "hexadezimal" programmieren willst :mrgreen: Dust Signs |
Re: Maschinensprache
Zitat:
Entweder Betriebssystem ansteuern oder - wenn du eben eins programmierst - Assembler-Code einbinden. |
Re: Maschinensprache
Zitat:
Zitat:
|
Re: Maschinensprache
Zitat:
Beim Lesen dieses Themas fiel mir nur eines ein: Aua! :wall: :mrgreen: :mrgreen: Aber danke fuer die Ablenkung *g*, schliesslich habe ich jetzt meine erste "Driver License" und meine zweite bekomme ich morgen. Da ist's schoen mal wieder was aus Userland zu lesen :mrgreen: |
Re: Maschinensprache
Zitat:
Wie ein Vorredner schon schrieb : Ehrgeiz in allen Ehren. Super. Aber ich bezweifel bzw. wage sogar die Behauptung, dass nicht ein einziger Entwickler heutiger Prozessoren das kann, was Du zu lernen vor hast (welch komplizierter Satzbau *g*). Zitat:
Gruss, Lizzy |
Re: Maschinensprache
Ich glaub du stellst dir das so einfach vor.
Hab ich auch: NASM runtergeladen, NASM IDE geladen und ein Beispielprogramm angesehn. Hab NASM sofort wieder gelöscht. Vergiss es einfach! Oder kannst du mir sagen warum der Befehl
Code:
in den 320x200x256 VGA mode schaltet? Wohl nicht, und ich glaube auch nicht, dass du den Befehl in Hex übersetzen kannst :mrgreen:
mov ax, $0013
Hier mal der gesamte Code:
Code:
So :mrgreen:
; Information
; ßßßßßßßßßßß ; ; Program Title : NASM-IDE Copper Bars Demo ; External name : BAR.COM ; Version : 1.1 ; Start date : 18/12/1997 ; Last update : 02/01/2002 ; Author : Rob Anderton ; Copyright : (c)1997 Rob Anderton ; Description : An example of a copper bars effect programmed using ; NASM-IDE 1.5 and NASM 0.98.08. ; ; Based on code by Patch (hamell@rigel.cs.pdx.edu) ; (written using TASM) dated 4/9/93. bits 16 ; Set 16 bit code generation org 0x0100 ; Set code start address to 100h (COM file) ; Variables are at the end of this file SECTION .text ; Text section containing code START: mov ax, $0013 ; Set 320x200x256 VGA mode 13h int $10 in al, $21 ; Get IRQ mask mov [IRQSave], al ; Save it mov al, 11111101b ; Mask all but keyboard off out $21, al ; Set new IRQ mask in al, $0A1 ; Get NMI mask mov [NMISave], al ; Save it mov al, 11111111b out $0A1, al ; Set new NMI mask mov dx, $03C8 mov al, 01h out dx, al xor al, al inc dx out dx, al out dx, al out dx, al mov ax, $0A000 mov es, ax xor di, di mov ax, $0101 mov cx, 32000 cld rep stosw push ds pop es mov bx, BarLine STARTBAR: cli ; Don't poll keyboard mov si, Palette ; Set up pointer mov bp, $01 ; Bar number = 1 PALSETUP: push bp mov di, [bx] mov al, [SinTable + di] ; Top bar line mov di, BarPal dec al ; Decrement for 0th index element xor ah, ah ; Clear high byte mov cx, ax shl ax, 1 add ax, cx add di, ax add di, ax mov bp, BarPriority add bp, cx ; Set to proper spot in priority check mov cx, [BarHeight] CHECKLINE: cmp BYTE [bp], $00 ; Is the line empty? jne NODRAWLINE ; If not, jump mov BYTE [bp], $01 ; It's full now movsw movsb sub si, 3 movsw movsb jmp NEXTPRIORITY NODRAWLINE: add si, 3 ; Increment palette pointer add di, 6 ; Increment bar palette NEXTPRIORITY: inc bp ; Next priority line loop CHECKLINE BARSPOT: add WORD [bx], $03 ; Increment table index cmp WORD [bx], 359 ; End of table? jle NEXTBAR RESETBARSPOT: mov WORD [bx], $00 ; reset table index NEXTBAR: pop bp ; Restore bar num inc bx ; Next bar line address inc bx ; Word size = + 2 inc bp ; Increment bar counter cmp bp, [BarCount] ; Bar count at max? jle PALSETUP ; If <= , go back mov si, BarPal mov cx, 400 mov dx, $03DA ; Setup Input Status 1 reg VRETRACE: in al, dx test al, 00001000b ; Test bit 3, vertical retrace jnz VRETRACE ; If active, go back VNORETRACE: in al, dx test al, 00001000b ; Test bit 3, vertical retrace jz VNORETRACE ; If active, go back PALDUMP: mov al, $01 mov dx, $03C8 out dx, al inc dx outsb ; Dump it out outsb mov dx, $03DA PUCK1: in al,dx test al, 00000001b jz PUCK1 mov dx, $03C9 outsb mov dx, $03DA ; Setup Input Status 1 reg HRETRACE: in al, dx test al, 00000001b ; Test bit 1, horizontal retrace jnz HRETRACE ; If not active, go back HNORETRACE: in al, dx test al, 00000001b ; Test bit 1, horizontal retrace jz HNORETRACE ; If active, go back; mov dx, $03DA loop PALDUMP mov di, BarPriority mov cx, 100 ; 100 of them WORD sized xor ax, ax ; AH = 0, AL = 0 rep stosw ; Zero them all out mov di, BarPal mov cx, 600 xor ax, ax rep stosw sub bx, [BarCount] ; Reset bar line address sub bx, [BarCount] ; Twice for word size sti ; Poll keyboard mov ah, $01 int $16 jnz EXIT jmp STARTBAR EXIT: mov al, [IRQSave] ; Get old IRQ mask out $21, al ; Restore IRQ mask mov al, [NMISave] ; Get old NMI mask out $0A1, al ; Restore NMI mask mov ax, $0003 int $10 mov ax, $4C00 int $21 section .data ; Initialised variables ; SinTable - holds top to bottom and bottom to top palette values SinTable db 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2 db 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 db 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 16, 17 db 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30 db 31, 32, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45 db 46, 48, 49, 51, 52, 54, 55, 57, 58, 60, 61, 63 db 64, 66, 67, 69, 70, 72, 73, 75, 77, 78, 80, 81 db 83, 84, 86, 88, 89, 91, 93, 94, 96, 97, 99, 101 db 102, 104, 105, 107, 108, 110, 112, 113, 115, 116, 118, 119 db 121, 122, 124, 125, 127, 128, 130, 131, 133, 134, 136, 137 db 138, 140, 141, 143, 144, 145, 147, 148, 149, 150, 152, 153 db 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166 db 167, 168, 169, 170, 171, 171, 172, 173, 174, 174, 175, 176 db 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182 db 182, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184 db 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183 db 182, 182, 182, 181, 181, 180, 180, 179, 179, 178, 178, 177 db 177, 176, 175, 174, 174, 173, 172, 171, 171, 170, 169, 168 db 167, 166, 165, 164, 163, 162, 161, 160, 159, 158, 156, 155 db 154, 153, 152, 150, 149, 148, 147, 145, 144, 143, 141, 140 db 139, 137, 136, 134, 133, 131, 130, 128, 127, 125, 124, 122 db 121, 119, 118, 116, 115, 113, 112, 110, 108, 107, 105, 104 db 102, 101, 99, 97, 96, 94, 93, 91, 89, 88, 86, 84 db 83, 81, 80, 78, 77, 75, 73, 72, 70, 69, 67, 66 db 64, 63, 61, 60, 58, 57, 55, 54, 52, 51, 49, 48 db 47, 45, 44, 42, 41, 40, 38, 37, 36, 35, 33, 32 db 31, 30, 29, 27, 26, 25, 24, 23, 22, 21, 20, 19 db 18, 17, 16, 15, 14, 14, 13, 12, 11, 11, 10, 9 db 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3 db 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1 Palette db 7, 7, 7 ; gray bar start db 10,10,10 db 13,13,13 db 16,16,16 db 19,19,19 db 22,22,22 db 25,25,25 db 28,28,28 db 31,31,31 ; middle db 28,28,28 db 25,25,25 db 22,22,22 db 19,19,19 db 16,16,16 db 13,13,13 db 10,10,10 db 7, 7, 7 ; gray bar end db 7, 0, 0 ; red bar start db 10, 0, 0 db 13, 0, 0 db 16, 0, 0 db 19, 0, 0 db 22, 0, 0 db 25, 0, 0 db 28, 0, 0 db 31, 0, 0 ; middle db 28, 0, 0 db 25, 0, 0 db 22, 0, 0 db 19, 0, 0 db 16, 0, 0 db 13, 0, 0 db 10, 0, 0 db 7, 0, 0 ; red bar end db 0, 7, 0 ; green bar start db 0,10, 0 db 0,13, 0 db 0,16, 0 db 0,19, 0 db 0,22, 0 db 0,25, 0 db 0,28, 0 db 0,31, 0 ; middle db 0,28, 0 db 0,25, 0 db 0,22, 0 db 0,19, 0 db 0,16, 0 db 0,13, 0 db 0,10, 0 db 0, 7, 0 ; green bar end db 0, 0, 7 ; blue bar start db 0, 0,10 db 0, 0,13 db 0, 0,16 db 0, 0,19 db 0, 0,22 db 0, 0,25 db 0, 0,28 db 0, 0,31 ; middle db 0, 0,28 db 0, 0,25 db 0, 0,22 db 0, 0,19 db 0, 0,16 db 0, 0,13 db 0, 0,10 db 0, 0, 7 ; blue bar end db 7, 7, 0 ; yellow bar start db 10,10, 0 db 13,13, 0 db 16,16, 0 db 19,19, 0 db 22,22, 0 db 25,25, 0 db 28,28, 0 db 31,31, 0 ; middle db 28,28, 0 db 25,25, 0 db 22,22, 0 db 19,19, 0 db 16,16, 0 db 13,13, 0 db 10,10, 0 db 7, 7, 0 ; yellow bar end db 7, 0, 7 ; purple bar start db 10, 0,10 db 13, 0,13 db 16, 0,16 db 19, 0,19 db 22, 0,22 db 25, 0,25 db 28, 0,28 db 31, 0,31 ; middle db 28, 0,28 db 25, 0,25 db 22, 0,22 db 19, 0,19 db 16, 0,16 db 13, 0,13 db 10, 0,10 db 7, 0, 7 ; purple bar end db 0, 7, 7 ; cyan bar start db 0,10,10 db 0,13,13 db 0,16,16 db 0,19,19 db 0,22,22 db 0,25,25 db 0,28,28 db 0,31,31 ; middle db 0,28,28 db 0,25,25 db 0,22,22 db 0,19,19 db 0,16,16 db 0,13,13 db 0,10,10 db 0, 7, 7 ; cyan bar end db 18, 8, 1 ; copper bar start db 23,13, 5 db 28,18, 9 db 33,23,13 db 38,28,17 db 43,33,21 db 48,38,25 db 53,43,29 db 58,48,33 ; middle db 53,43,29 db 48,38,25 db 43,33,21 db 38,28,17 db 33,23,13 db 28,18, 9 db 23,13, 5 db 18, 8, 1 ; copper bar end BarLine dw 175, 150, 125, 100, 75, 50, 25, 0 BarHeight dw 17 BarCount dw 8 BarPal times 400 * 3 db 0 BarPriority times 200 db 0 section .bss ; Uninitialised variables IRQSave resb 1 NMISave resb 1 Wenn du nicht verstehst was das macht, wirst du auch nie einfach eine EXE lesen können :? |
Re: Maschinensprache
Zitat:
Zitat:
Zitat:
[code]mov ax, $0013 int $10 [/quote]Diese beiden Befehle zusammen tun das, und warum sie das tun, ist einfach erklärt. Der Softwareinterrupt 10 kann zur manipulation der Grafikkarte herangezogen werden. In AH steht der Wert 0, das sagt dem Interrupt-Handler, daß ein neuer Videomodus gesetzt werden soll, in AL steht 0x13, das wird interpretiert als 40Zeilen/25Spalten im Textmodus bzw 320x200 Pixel im Graphikmodus, jeweils mit 256 darstellbaren Farben. Und warum ist das so? Weil die Videomodi irgendwann in der grauen Vorzeit mal festgelegt wurden. Zitat:
|
Re: Maschinensprache
Zitat:
Deine Beschreibung mag einleuchten, trotzdem würd ich im Leben nich darauf kommen :? //Edit: Hauptsächlich sollte es auch zur Abschreckung dienen :mrgreen: |
Re: Maschinensprache
Ohne ASM kann man allerdings nur auskommen wenn Bibiliotheken vorhanden sind in dennen Funktionen, Classen & Co drin sind die eine gewisse Basis bilden( mal abgesehen von Sprachen wie C#, aber das ist ein anderes Thema ), und diese sind dann in ASM geschrieben( Guckt euch mal die Delphi Units an die mitgeliefert werden )!
|
Re: Maschinensprache
Zitat:
In was man programmiert hab ich ja geschrieben : C. Setup war ein Microcontroller, die Ausgabe lief auf 'nem LC-Display, was ueber I^2C oder SPI angeschlossen war (sorry, bin mir nicht mehr ganz sicher, welches Interface). Das ging komplett ueber den gcc (spezielle Version als Cross-Compiler) ohne irgendwelchen Assembler-Code. Mag sein, dass es Haarspalterei ist, aber es ist definitiv moeglich ein OS ohne Assembler zu entwickeln. Der sinngemaesse Ausspuch "auch C wird in Maschinensprache uebersetzt und deshalb kann man damit ein OS schreiben" hat schon seine Richtigkeit. Ausschlaggebend dabei ist die Effizienz. Ich hab bei dem besagten Projekt auch teilweise noch Assembler benutzt. Allerdings nicht, weil es mit C nicht funktioniert haette, sondern weil der Code nicht mehr in den Speicher des Microcontrollers gepasst haette. |
Re: Maschinensprache
Zitat:
Es gibt verschiedene Interupts, die verschiedene Funktionen beinhalten: z.B.: Int 10 - Hier sind die "video" (Grafikkarte) Funktionen (vom BIOS bereitgestellt) Int 13 - Hier sind die "disk I/O services" (vom BIOS bereitgestellt) Int 21 - Hier sind die "function request services" (von DOS bereitgestellt) Im Beispielprogramm ist es ja genauso. [equote="In ![]()
Ich habe die Wichtige Stelle oben im Zitat des Tutorials mal rot markiert Hier noch mal das ganze Listing mit Kommentaren zu den Funktionsaufrufen:
Code:
125A:0100 EB0C JMP 010E
125A:0102 68656C6C6F20 DB "hello " 125A:0108 776F726C6424 DB "world$" 125A:010E BA0201 MOV DX,0102 ; Parameter (Adresse des Strings) 125A:0111 B409 MOV AH,09 ; Dos Funktion No 09 aufrufen (String Ausgabe) 125A:0113 CD21 INT 21 ; In Interupt wird dann obige Funktion ausgeführt 125A:0115 B8014C MOV AX,4C01 ; Dos Funktion 4C mit Parameter 01 wird aufgerufen (Programmende) 125A:0118 CD21 INT 21 ; In Interupt wird dann obige Funktion ausgeführt Zitat:
Zitat:
Es gibt Listen mit allen Funktionen der Interupts: Meine damals verwendete Liste habe ich auf die schnelle nicht mehr gefunden. Aber hier ist eine andere Liste (ist eigentlich eine Hilfedatei für HelpPC, kann aber auch so gelesen werden): ![]() Zitat:
Das Thema wurde am 13.10.2004 erzeugt. am 14.10.2004 habe ich das mini Tutorial geschrieben, dass auch in Tutorials gepostet ist. am 15.10.2004 war die Diskussion beendet am 20.10.2005 also gestern also 1 Jahr und 5 Tage später stellt Dussel eine Frage und sofort (ich meine im Millisekundenbereich ;-) ) ist diese Disskusion wieder am leben. Das finde ich immer wieder lustig :mrgreen: |
Re: Maschinensprache
Zitat:
mfg, mh166 |
Re: Maschinensprache
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Maschinensprache
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
![]() Dein Link nach arl.wustl.edu funktioniert ürigens bei mir nicht, traceroute bekommt einen Timeout beim 10. Knoten. Zitat:
Edit: Noch früh am Morgen... (was bedeutet eigentlich "gegeneben"?) |
Re: Maschinensprache
Zitat:
mfg, mh166 |
Re: Maschinensprache
Zitat:
|
Re: Maschinensprache
Zitat:
In meinem Letztem Beitrag ist die Liste (als >6MByte großes AsciiTextfile) zu finden. Die hatte vorallem auch die undokumentierten Funktionen aufgelistet. (z.B. die von auf dem System aktiven Viren ;-) ) |
Re: Maschinensprache
Zitat:
TPCEmulator -> um den Zielrechner zu simulieren (gibt's mit Boch's als OpenSource) TBiosChip -> Damit der Rechner weiß, was er nach dem Einschalten als Erstes tun muß TBootDisk -> mit eingelagertem HexEditor für die Bootsequenz (Zumm Booten des Systems) TGraphicCard -> Ein Grafikadapter zum Anzeigen der Systemausgaben TMonitor -> Erst hier wären die Ausgaben wirklich zu sehen TCDROM -> CD-Laufwerk nur lesen TCDRW -> CD-Laufwerk mit Brenner (vielleicht reicht hier im Design auch ne Eigenschaft, die die Art des CD-Laufwerkes beschreibt, als nur Lesen, Lesen/schreiben) TDVD -> DVD Laufwerk Das Formular müßte zuerst den PCEmulator aufnehmen, dann folgen die anderen Komponenten, die gemäß der Hardware-Konfiguration über passende Eigenschaften zusammengeschlossen werden. Danach folgt der Software Teil. Dafür müssen geeigete Speicherplätze in den KOmponenten vorhanden sein. In einer PCEmulator Komponente könnte man die Befehllssätze verschiedene CPU's definieren und als Eigenschaft im OI dann einen auswählen. Wie beschreibt man so einen Befehlssatz? Entweder mit einer Tabelle mit allen möglichen Befehlskombinationen. Oder mit speziellen Beschreibungssprachen, falls es sowas gibt. Intel und AMD müssen ja den Befehlssatz für Ihre CPU's auch irgendwo beschreiben. Und VMWare auch. Zum Grafikadapter: Ich kenne VMWare. Dort wünschte ich mir eine Hardwarenähere Simulation meiner physikalischen GK Praktisch ein Wrappen auf meine echte. Da aber der Grafikadapter in VMWare sehr langsam ist, gehe ich davon aus, das alle Funktionen der GK softwaremäßig perfekt nachgebildet sind, statt dort im Gegensatz zu den übrigen PC Komponenten auf die physikalische GK zurückzugreifen. Sinnvoll wäre das Ganze schon. Aber wer entwickelt die Komponenten? Dürfte einigen Aufwand bedeuten! schöni |
Re: Maschinensprache
Zitat:
![]() Schöni, ich weiß nicht, ob du die Ironie in meinem Beitrag nicht erkannt hast, oder ob ich jetzt deine nicht erkenne. :gruebel: Komponenten zur Emulation eines Computer sind nicht notwendig, als vollständigen x86-Emulator hat man ja Bochs, wenn das Betriebssystem erstmal funktioniert. Neben TOperatingSystem bräuchte man nur noch TMarketDominance (aus Microsoft-internen Kreisen wurde mit bekannt, daß Microsoft bereits an einer Ableitung dieser Klasse arbeitet, TWorldDominance). Zitat:
Zitat:
Zitat:
![]() Disclaimer: Dieser Beitrag kann nicht unwesentliche Mengen nicht ernstgemeinten Textes enthalten. Der Autodieses Beitrags bittet um Verständnis und schließt sämtliche Rechtsansprüche auf durch Ironie oder Srakasmus entstandene Schäden aus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz