Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - freecrac

Seiten: [1] 2 3 ... 5
1
Softwareentwicklung / Re: Binäre Datei auf CD brennen
« am: 01. May 2013, 19:54 »
Zum Verständniss und im Falle es auch selber programkiert werden soll.
“El Torito” Bootable CD-ROM Format Specification Version 1.0 January 25, 1995
http://download.intel.com/support/motherboards/desktop/sb/specscdrom.pdf

Dirk
2
Der Code schaut in Ordnung aus. Ich schätze der Fehler liegt woanders. Du müsstest mal die ganze Datei herzeigen.
Das denke ich auch.

Folgende Batchbefehle...
@Echo off
set Item="Test"
set IID=255
echo %Item%: > DDItem.yml
echo Material: %IID%  >>DDItem.yml

... erzeugen bei mir diesen Inhalt in der DDItem.yml-Datei:
"Test":
Material: 255 

Dirk
3
Softwareentwicklung / Re: Problem mit Assembler SDK
« am: 26. February 2013, 22:01 »
Rohgerüst für MASM 5 und 16 Bit-DOS-Anwendung:
(Für MASM 6 kann man optional z.B. auch folgende Parameter angeben:
.MODEL SMALL
.686P
.MMX)

Moment, zu diesem Code muss ich aber was fragen:
Ist jetzt dass mit dem .Model Small DOS oder dass mit dem DATEN SEGMENT ???
Ich bin jetzt verwirrt
Das alles ist nur zum Erstellen einer einzigen 16 bit -Dos-Anwendung(mit MZ-Signatur, Relocation table und 8.3-Name.exe).
Damit ist es möglich mehrere Segmente für Daten und Code zu verwenden und die *.exe darf grösser als 64 KB werden.

Es ist ja nicht das "Modell Tiny":
http://www.c-jump.com/CIS77/ASM/Directives/D77_0030_models.htm

Im obigen Rohgerüst wird ein Codesegment, ein Datensegment und ein Stacksegment für eine Anwendung zur Verfügung gestellt.
Das Codesegment-Register und das Stacksegment-Register werden beim Starten initialisiert.
Das DS-Register müssen wir selber mit der Adresse unseres Datensegments laden.

...

Die eine Batchdatei für MASM 5 kann unter DOS und unter Windows verwendet werden.
Die andere Batchdatei für MASM 6 kann nur unter Windows(32 bit) verwendet werden (Angaben wie .MMX  sind dafür im Listing nur optinal).
Für diese Batchdatei wird zu MASM 6 mit der dort enthalltenen ml.exe zusätzlich die Link.exe von MASM 5 benötigt, um damit eine 16 bit -Dos-Anwendung erstellen zu können.
Weil mit dem Linker von MASM 6 und neuere Versionen davon kann man keine 16 bit -Dos-Anwendung mehr erstellen.

Dirk
4
Softwareentwicklung / Re: Problem mit Assembler SDK
« am: 23. February 2013, 06:44 »
Für 16 Bit - Dos-Anwendungen braucht man einen 16 Bit-Linker.
Z.B. Link.exe von MASM 5. Weil MASM 6 hat keinen 16 Bit-Linker mit dabei.
http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe

Rohgerüst für MASM 5 und 16 Bit-DOS-Anwendung:
(Für MASM 6 kann man optional z.B. auch folgende Parameter angeben:
.MODEL SMALL
.686P
.MMX)
.MODEL SMALL
.386P
.387
  CODE SEGMENT use16 'CODE'
 assume cs:CODE,ds:DATEN,ss:STAPEL
 org 100h

START:
          mov      ax, DATEN
          mov      ds, ax


BACK:     mov      al, cl             ; ERRORLEVEL holen
          mov      ah, 4Ch            ; Rücksprung, Programm-Ende
          int    21h
;-------------------------------------
;    U N T E R - R O U T I N E N
;-------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------

          ret
;-------------------------------------
  CODE ends
;-------------------------------------
;    D A T E N - B E R E I C H
;-------------------------------------
  DATEN SEGMENT use32 'DATA'
 org 0
;-------------------------------------
WERT   DD ?
;-------------------------------------
  DATEN ends
;-------------------------------------
  STAPEL SEGMENT use16 STACK 'STACK'
       DB 10h dup (0)
  STAPEL ends
;-------------------------------------
 end

Batchfile für MASM 5
(erzeugt 16 BIT-Anwendung unter DOS und/oder Windows 32bit)
@ECHO OFF
MASM /Z %1.asm,%1.obj,%1.lst,%1.crf
if ERRORLEVEL 1 goto ENDE
CREF %1.crf,%1.ref
if ERRORLEVEL 1 goto ENDE
LINK /CP:1 %1.obj,%1.exe,%1.map,,
if ERRORLEVEL 1 goto ENDE
if exist *.crf del *.crf
if exist *.obj del *.obj
%1.exe
:ENDE

Batchfile für MASM 6 mit Link.exe aus MASM 5
(erzeugt 16 BIT-Anwendung unter Windows; ML.exe ist nicht unter puren DOS ausführbar und benötigt Windows.)
@ECHO OFF
ML /c /Zm %1.asm
if ERRORLEVEL 1 goto ENDE
LINK /CP:1 %1.obj,%1.exe,,,
if exist *.obj del *.obj
if exist *.map del *.map
:ENDE

Zu beachten wäre auch noch, dass dieser 16 Bit-Linker mit langen Dateinamen nicht umgehen kann, sondern nur 8.3-Namen kennt.

Dirk
5
Ich habe alle CRT aus meiner Umgebung entfernt.
Bis auf eine 19" Röhre habe ich das auch gemacht. Beim Testen eines Vesamodes mit 1024x768x32 und mit eigenen Bildparameter für 100 hz Refreshrate schaltet mein LCD diesen Mode aber mit 60hz Refreshrate ein und ignoriert die angegebenen Parameter mit der höheren Refreschrate und dem dafür höheren vorgesehenen Pixeltakt einfach.

Ich vermute mal wenn ein 100hz-LCD-Monitor verwendet wird, dann wird jeder hohe Vesamode auch ohne die Übergabe eines CRT-Parameter-Blöck in 100 hz angezeigt.
Ich habe leider noch kein 100hz-LCD-Monitor, um das mal auzutesten. Weiss jemand darüber Etwas genaueres?

Dirk
6
Die Adresse der ModeList besteht aus Offset und Segment.
Function 00h - Return VBE Controller Information; Buffer + 0Eh = VideoModePtr dd ? ; VbeFarPtr to VideoModeList

Im Unterschied dazu ist die Adresse des LFBs eine lineare Adresse.
Function 01h - Return VBE Mode Information; Buffer + 28h PhysBasePtr dd ? ; physical address for flat memory frame buffer

...

Um zu überprüfen welche Kapazität unser Monitor verträgt könnte man auch dessen maximal zulässige KHZ und HZ abfragen.

  mov      ax, 4F15h           ; DDC - INSTALLATION CHECK
  xor      bl, bl
  int    10h
  cmp      ax, 4Fh
  jnz NODDC

  mov      ax, 4F15h           ; DDC - READ EDID
  mov      bl, 1
  xor      cx, cx
  xor      dx, dx
  mov      di, OFFSET EDID     ; es:di 128 byte
  int    10h
  cmp      ax, 4Fh
  jnz short NODDC
  mov      eax, 0FD000000h     ; Text-identifier V/H range
  mov      bx, 36h
  cmp      eax, [di+bx]        ; di+36h detailed timing #1
  jz  short RANGE
  lea      bx, [bx+12h]
  cmp      eax, [di+bx]        ; di+48h detailed timing #2
  jz  short RANGE
  lea      bx, [bx+12h]
  cmp      eax, [di+bx]        ; di+5Ah detailed timing #3
  jz  short RANGE
  lea      bx, [bx+12h]
  cmp      eax, [di+bx]        ; di+6Ch detailed timing #4
  jnz short NODDC

RANGE:    mov      al, [di+bx+6]       ; MAXHZ
  mov      dl, [di+bx+8]       ; MAXKHZ

Quelle: "EEDIDguideV1.pdf" von vesa.org

..

Eine beste Auflösung findet man wohl, wenn das "Feature Support Byte" im EDID-Buffer+18h auf 1 gesetzt ist und unser "Prefered Timing Mode"(GTF standard frequency range) in den Detailed Timing Position Offset 36h - 47h zu finden ist.

Ab VBE3 kann man dann die vorhandenen Vesamodi mit einem eigenen Video-Timing einschalten, wenn mehr als nur 60 hz Refreschrate benötigt werden.
Quelle: "vbe3.pdf" von vesa.org

Z.B. für 1280x1024@85 Hz Refreshrate:
;  1280x1024@85 Hz
;---------------------
CRTC    DW 1728                       ; horizontal Total       in Pixel
HORIANF DW 1336                       ; horizontal  Sync-Start in Pixel
HORIEND DW 208                        ; horizontal  Sync-End   in Pixel
VERTOTA DW 1072                       ; vertical   Total       in Lines
VERTANF DW 1024                       ; vertical    Sync-Start in Lines
VERTEND DW 44                         ; vertical    Sync-End   in Lines
DOIFLAG DB 0                          ; Flag (interlaced,doubleScan,polarity)
PIXCLOC DD 157498000                  ; Pixel clock in hz (zusätzlich müssen wir vorher Get/Set Pixelclock (Function 4F0Bh) verwenden)
REFRATE DW 8502                       ; Refresh-Rate in 0.01 hz
        DB 40 dup (0)                 ; reserved
;---------------------

Für Experimente (auf eigene Gefahr) eignet sich ein analoger CRT-Monitor der sich bei falschen Einstellungen selber abschaltet und eine "Out of Sync" -Fehlermeldung, oder änhlichen Fehlertext onscreen anzeigt, falls unser Pixelclock dazu nicht richtig eingestellt wurde, oder wir die Parameter falsch berechnet haben...etc..

Wie wäre es mit einer Sinus-Tabelle zu arbeiten?
          Grad    = 360 * 2
          Endtab  = 450 * 2
          Foktor  = 10000h

SINTAB DB Endtab DUP (?,?,?,?)
TEIL   DW Grad/2, ?
I      DW 0, 0
FAKT   DD Foktor

TABLE:    xor     di, di              ; Sinus-Tabelle anlegen
TAB:      fldpi                       ; PI laden
          fimul  DWORD PTR[I]         ; Zaehler mal PI
          fidiv  DWORD PTR[TEIL]      ; durch 180(INT) teilen
          fsin                        ; davon den Sinus
          fimul  DWORD PTR[FAKT]
          fistp  DWORD PTR[di]        ; in die Sinus-Tabelle schreiben
;-------------------------------------
          inc    WORD PTR[I]          ; Grad-Zähler erhöhen
          add     di, 4               ; Tabellen-Index erhöhen
          cmp    WORD PTR[I], Endtab  ;  Tabellen-Ende erreicht ?
          jnz TAB

Dirk
7
Offtopic / Re: Panikmache wegen DNS-Changer
« am: 14. January 2012, 08:38 »
Hallo,

ich habe gerade mitbekommen, dass angeblich "Tausende deutsche Web-Surfer ab März offline" (t-online.de) sein sollen.
Das ist doch so eigentlich falsch, denn wenn die entsprechenden geänderten DNS-Server offline sind, bedeutet das nur, dass man eben keine Domains mehr benutzen kann. Und Computer, die sich die DNS-Server-IP nicht per DHCP vom Router holen, sind doch sowieso nicht betroffen. Oder ändert der DNS-Changer die DNS-IP direkt in den entsprechenden PCs?
Also als Frage(n): Was ist das Problem daran  bzw. wie funktioniert der DNS-Changer bzw. inwiefern hängt das vom verwendeten OS auf den Client-PCs eines Netzwerks ab?

Grüße,
oern
So wie ich es verstanden habe trägt der DNS-Changer in den TCP-IP-Einstllungen von Windowsrechner eine DSN-Server-Adresse ein.
Der Bunderstrojaner nistet sich im Vergleich dazu wohl viel tiefer in das System ein und ist damit wohl als gefählicher einzustufen als der DNS-Changer vor dem der BSI warnt.

Dirk
8
OS-Design / Re: GUI LowLevel
« am: 23. December 2011, 11:06 »

Zitat von: erik
Gerade das periodische händische Umkopieren des gesamten Framebuffers von einem SW-Buffer im normalen RAM in den Video-Speicher der Grafikkarte ist deutlich aufwendiger als wenn die Grafikkarte sich die Bilddaten selber per Busmastering aus dem Speicher holt.
Also man kopiert ja meistens nicht den gesamten Framebuffer (das will man ja gerade vermeiden), sondern nur das was sich geändert hat und dazu muss man auch lesen und das ist aus dem Grakaspeicher sehr langsam. Hat man Hardwarebeschleunigung nutzt man doch genau dafür BitBlt (das vergleicht doch und kopiert nur das was sich geänder hat, oder?).

Im "VBE-AF07.pdf" von vesa.org unter public documents steht einiges über den Treiber "VBEAF.DRV". Ich selber habe noch keine Erfahrungen damit gemacht.

Dirk
9
Softwareentwicklung / Re: OS-Dev mit Intelassembler
« am: 23. December 2011, 09:25 »
Dann ist ja gut wenn es keine wichtigen unterschiede für mich gibt.
Die Frage hat sich dann geklärt :)

Vielen Dank an alle!
Es gibt ein paar Unterschiede beim Syntax der Befehle:

MASM:
mov BYTE PTR[EAX], 1
NASM:
mov BYTE[EAX], 1

MASM:
mov esi, OFFSET SPEICHER
NASM:
mov esi, SPEICHER

MASM:
mov eax, DWORD PTR[di+0Ch]
NASM:
mov eax, [di+0Ch]

Dirk
10
Offtopic / Re:Spam-Links im Forum
« am: 05. September 2011, 13:00 »
Ich weiß das jeder Provider bestimmte IP-Bereiche zugewiesen bekommt, aber wie bekommt man das raus?

ftp://ftp.ripe.net/pub/stats/ripencc/membership/alloclist.txt

Dirk
11
OS-Design / Re:Bios Interrupts
« am: 05. September 2011, 12:10 »
Hallo,
so kann ich ja ein Zeichen z.b. ein Zeichen auf meinem Bildschirm darstellen.

mov al, [si]            ; Erstes Zeichen aus si nach al
mov ah,0x0e            
int 0x10                ; Erstes Zeichen aus si ausgeben

Aber was genau passiert da ?  (Und kann man selbst ein BIOS programmieren ? )
Gibt es eine möglichkeit die Funktion ah,0x0e vom Interrupt 0x10 zu debuggen ?
Mich würde mal interessieren was der PC da genau macht.


Und was genau passiert intern in meinem PC naja ok das in Prozessor Register ah wird der Wert 0x0e kopiert.

Und noch eine Frage zum Prozessor während ich das hier mache mov ah,0x0e  passieren in meinem PC ja auch noch anderen Sachen. Gibt es die Datenleitung ah öfters als nur einmal in meinem Prozessor ?


[ Ich hoffe mal man kann verstehen was ich meine mir geht es eigentlich nur darum um zu verstehen wie ein Computer generell funktioniert, im Prinzip sind es ja nur Millionen von Gattern und so die geschickt aneinander geschaltet sind (sag ich einfach mal so).

Ein Computer ist auch vielleicht etwas zu schwert zu verstehen oder ? Man kann doch bestimmt einen Taschenrechner selbst zusammenlöten der vielleicht nicht rechen kann aber ein Zeichen im Display ausgeben kann. ]

mov al, [si]
Dieser Befehl holt in das AL-Register ein Byte von der Adresse die in DS:SI enthalten ist.
Beispiel: Im DS-Register ist die Segmentadresse 152D (hex) enthalten und im SI-Register ist die Offset-Adresse Null enthalten.
In der Adresse 152D:0000 ist das Byte 41 (hex) enthalten. Mit "mov al, [si]" wird in das AL-Register der Wert 41 (hex) geholt.

mov ah,0x0e
Dieser Befehl holt in das AH-Register den Wert 0E (hex).

int 0x10
Bei diesem Softwareinterrupt wird aus der Adresse in 10 (hex) mal 4 eine Vektoradresse (OFFSET(low/high), SEGMENT(low/high)) geholt zu der gesprungen wird. (Rücksprungadresse wird auf den Stack geschoben.) Dort wird die Ausführung bis zu einem "IRET" fortgesetzt und danach wird unmittelbar nach dem int-Befehl weiter gemacht.

Wie "PorkChicken" es schon erwähnte wird bei der Funktion 0E der Inhalt vom AL-Register an der aktuellen Cursorposition ausgegeben.
Das könnte z.B. so passieren:
cmp  ah, 0Eh
jz short P1
..
...
.....
P1:
push ds
push es
push bx
push si
push di
push ax
mov  ax, 0B800h    ; Segmentadresse Text-Bildschirm(color)
mov  es, ax
mov  ax, 40h       ; Segmentadresse BIOS-Variablen
mov  ds, ax
mov  bx, 4Ah       ; Offsetadresse für Anzahl der Bildschirmspalten
mov  si, 50h       ; Offsetadresse für Cursor-Position
mov  bx, [bx]      ; Anzahl der Bildschirmspalten
mov  ax, [si]      ; Cursor-Zeile
add  bx, bx
mul  bx
mov  bx, [si+2]    ; Cursor-Spalte
add  bx, bx
add  ax, bx
mov  di, ax        ; Zeile * (Zeilenlänge * 2) + (Spalte * 2)
pop  ax
stosb
pop  di
pop  si
pop  bx
pop  es
pop  ds
.....
....             ; ....nun wird auch noch der Cursor weiterbewegt....
...

BIOS-Variablen:
http://www.tu-chemnitz.de/informatik/RA/news/stack/kompendium/vortraege_96/BIOS/appendix.html

Beim Textbildschirm hat jedes Zeichen zwei Bytes: ASCII + Attribut(Farbe)
http://en.wikipedia.org/wiki/VGA_compatible_text_mode

Dirk
12
Lowlevel-Coding / Re:Floppy-Treiber: IRQ6 blockiert?
« am: 19. August 2011, 10:15 »
Hallo, vieleicht ist dieses hier hilfreich.
        
Fred: This is my newly modified floppy diskette bootsector:
http://groups.google.com/group/comp.lang.asm.x86/msg/211e65725c60711b?hl=de&&q="This+is+my+newly+modified+floppy+diskette+bootsector"

loc0010
; Delay for 3 seconds so floppy drive
----------------------------------------
; can spin down before we disable interupts
        xor     cx,cx
        xor     dx,dx
        mov     byte ah,0x01
        int     0x001A

loc0020 xor     ah,ah
        int     0x001A
        cmp     word  dx,0x0037         ; 0x0037 = 55 clock ticks (3
secs)
        jl      loc0020
; End Delay

Mike Gonta benutzt eine etwas andere Verzögerungsmethode:
http://groups.google.com/group/comp.lang.asm.x86/browse_thread/thread/c6f2f92747e32cb6/d64b7749af80f7c5?hl=de&lnk=gst&q=The+following+code+written+in+Nasm+"the+Neutral+Assembler"%2C+assembles#d64b7749af80f7c5
mov ebp, 650000      ; approximately 1 second delay
.11
  out 0EDh, al         ; non existing port for delay
  dec ebp
  jne .11

Dirk
13
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 07. August 2011, 09:49 »
Hallo,
ich arbeite nicht mit Polling sondern mit IRQ.

Ups, jetzt habe ich "isrK" gefunden.

Zitat
Maus wird nicht installiert.

Gruß
Relbmessa

Ok.

Dirk
14
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 05. August 2011, 10:00 »
Zum Abfragen der Tastatur wäre es sinvoll vorher zu schauen ob dort überhaupt etwas im Ausgabebuffer vorhanden ist:
         in       al, 64h  ; Tastatur-Status holen
 test     al, 1
 jz  NOKEY         ; wenn keine Taste weiter
 test     al, 20h
 jnz NOKEY         ; wenn PS2-Mouse weiter
 in       al, 60h  ; Tasten-Code holen



NOKEY:


15
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 02. August 2011, 16:52 »
Es wäre schön wenn dazu mal jemand etwas konkreteres schreiben könnte, wenigstens ein Stichwort zum Suchen, würde mich persönlich echt mal interessieren.

http://www.o3one.org/hwdocs/amd64bit/x86-64_overview.pdf

Special Treatment of FS and GS Segments. The FS and GS segment
registers are used by the Windows NT™ operating system to
locate the thread-environment-block (TEB) and processorcontrol-
region (PCR) data structures. The FS and GS segmentoverride
prefixes provide quick access to these data structures
in an otherwise unsegmented (flat address space) operating
system. To facilitate compatible access to these structures, the
FS and GS segment overrides can be used in 64-bit mode.
When FS and GS segment overrides are used in 64-bit mode,
their respective base addresses are used in the effectiveaddress
(EA) calculation. The complete EA calculation then
becomes (FS or GS).base + base + index + displacement.
In 64-bit mode, FS.base and GS.base are expanded to the full
virtual-address size supported by the implementation. The
resultant EA calculation is allowed to wrap across positive and
negative addresses.
In 64-bit mode, FS-segment and GS-segment overrides are not
checked for limit or attributes.
Normal segment loads (MOV to Sreg and POP Sreg) into FS and
GS only load a standard 32-bit base value into the hidden
portion of the segment descriptor register. The base address
bits above the standard 32 bits are cleared to 0. Because the
first implementation of the Hammer family of processors
supports 48 virtual-address bits, a segment-load instruction
loads the base value into the lower 32 address bits and clears
the high 16 bits to 0.
To load all address bits supported by a 64-bit implementation,
the FS.base and GS.base hidden descriptor register fields are
physically mapped to MSRs. Privileged software (CPL=0) can
load all supported virtual-address bits into FS.base or GS.base
using a single WRMSR instruction. The FS.base MSR index is
C000_0100h while the GS.base index is C000_0101h.
The addresses written into the expanded FS.base and GS.base
registers must be in canonical form. A WRMSR instruction that
attempts to write a non-canonical address to those registers
generates a general-protection exception, #GP.
When in compatibility mode, the FS and GS overrides operate
as defined by the legacy x86 architecture regardless of the
value loaded into the upper 32 virtual-address bits of the
hidden descriptor register base field. Compatibility mode
ignores the upper 32 bits when calculating an effective address.

Dirk
16
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 02. August 2011, 11:50 »
Hallo,
ich habe noch nicht ganz mit gekriegt, ob Ihr über das Programm oder über Grundlagen
philosophiert.

Bei den Segment override prefixe geht es u.A. um Grundlagen, aber auch um deinen vorherigen Code wo du Segment override prefixe verwendet hast,
obwohl CS = DS = ES war. Hierbei kann man auch die Segment override prefixe weglassen und dann wird DS benutzt, um die selben Adressen zu erreichen.
Segment override prefixe machen nur dann Sinn, wenn damit verschiedene Segmentadressen angesprochen werden können.

Dirk
17
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 02. August 2011, 11:34 »
Sicher, dass sie komplett ignoriert werden? AMD doch wieder teilweise Limits für die Segmente eingeführt. Wobei ich die Details nicht auswendig kenne.
[AMD64 ArchitectureV3.pdf] ....auf der Seite von AMD kann ich dieses PDF leider selber gar nicht mehr finden.
Im PDF findet man folgenden Inhalt:
1.2.1 Summary of Legacy Prefixes
In 64-bit mode, the CS, DS, ES, and SS segment override prefixes are ignored.

Edit: Nun habe ich es gefunden: http://support.amd.com/us/Processor_TechDocs/24594.pdf

Dirk
18
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 02. August 2011, 02:00 »
Hallo,


Im 64 Bit Mode werden Segment override prefixe ignoriert.
Ich würde wetten das stimmt nicht so ganz, selbst im Long-Mode gibt es doch noch FS und GS als letzten Rest vom Glanz längst vergangener Zeiten.

Grüße
Erik

Uff stimmt, nur CS, DS, ES, SS werden als Segment override prefix im 64 Bit-Mode ignoriert.

Dirk
19
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 01. August 2011, 23:06 »
Hallo Dirk,
erstmal danke für deine Aufmerksamkeit.
Aber was bedeuten:
dann könnte man diese wenigen Regeln doch gleich mit bekannt geben.
Und:
falls kein besonderer Liebhaber(Segment override prefix) sich ins gemachte Bett dazugesellt.

Gruß
Relbmessa

Beispielsweise wurde bei  "mov word [es:0x0], isr00" das ES-Segmentregister mit angegeben.  Der Assembler trägt dafür das entsprechende Segment override prefix vor dem Opcode ein. So wird anstelle des DS-Segments für die Adressierung das ES-Segment verwendet. Es gibt folgende Segment override prefixe; CS(0x2E), SS(0x36:), DS(0x3E), ES(0x26), FS(0x64) und GS(0x65). Bei der Verwendung von (E)SP und/oder (E)BP als Adressregister wird (ohne die Angabe eines Segment override prefix) standardmäßig das SS-Segment zur Adressierung  zugeordnet. Bei allen anderen Adressen die gebildet werden (ohne Segment override prefix) wird standardmäßig das DS-Segment zur Adressierung zugeordnet. (Im 64 Bit Mode werden Segment override prefixe ignoriert.)

SS:EBP
SS:ESP
sonst DS:Adresse

...

Eine Ausnahme sind die String-Befehle: MOVSx, CMPSx, SCASx, LODSx, and STOSx (x= B, W, or D for byte, word, or double word)
Die Quelladresse bildet sich hierbei aus DS:SI und die Zieladresse bildet sich aus ES:DI.

Dirk
20
Lowlevel-Coding / Re:MiniOS protecdet Mode
« am: 01. August 2011, 13:04 »
Zu Deinem Assembler-Code ist mir etwas aufgefallen: da Du DS, ES und SS eh alle mit dem selben Selector befüllst kannst Du in den nachfolgenden Speicherzugriffsbefehlen das Segment-Präfix weglassen: aus "mov byte [es:eax],0x14" wird "mov byte [eax],0x14". Die CPU nimmt sich dann von DS, ES und SS das Segment-Register welches sie als geeignet betrachtet (dafür gibt es genaue Regeln die irgendwo in den Untiefen der CPU-Dokumentationen versteckt sind), ....

Wenn schon erwähnt, dann könnte man diese wenigen Regeln doch gleich mit bekannt geben. Adressregister (E)SP und (E)BP sind mit dem SS-Register verheiratet und alle anderen Adressen mit dem DS-Register, falls kein besonderer Liebhaber(Segment override prefix) sich ins gemachte Bett dazugesellt. Ausnahmen bilden stringverarbeitende Befehle die in Kombination von DS:SI, oder ES:DI auftreten. Mit dieser kleinen Hinweisen werden solche versteckten Regeln mit Sicherheit auch leichter auffindbar.

Dirk
Seiten: [1] 2 3 ... 5

Einloggen