2017-12-24 17 views
1

Ich arbeite an Emulator, der spezifische Programm emuliert werden sollte. Ich habe COM-Datei und Quelldatei. Jetzt muss ich diese spezielle Anweisung emulieren (das ist, was ich in DosBox Debugger sehen):Was soll ich in das Datensegment laden?

mov cl, [017B]  8A 0E 7B 01 

Ich weiß, es bedeutet Wert von DS (Datensegment) zu bewegen mit 017B in CL Register versetzt. Aber was sollte in DS sein?

Programm Ich versuche (Quelldatei) zu emulieren:

.386p 

.model tiny 

code segment use16 
    assume cs:code 
    org 100h 

begin: 
    mov ax, 3h 
    int 10h 
... 
    mov cl, byte ptr ds:[keylen] <-- This is the instruction I'm talking about 
... 
    int 20h   

keylen db 13 
key1 db 20h, 3ah, 23h, 32h, 0bh, 3dh, 1fh, 13h, 4ch, 19h, 05h, 07h, 07h, 00h 
key2 db 00h, 0ah, 11h, 08h, 03h, 1dh, 1ah, 08h, 04h, 2ch, 3fh, 33h, 1ah, 41h 
key3 db 01h, 00h, 08h, 0bh, 0ch, 07h, 0ah, 05h, 02h, 09h, 06h, 03h, 04h, 00h 

code ends 
end begin 

Was soll ich in DS sparen, wenn ich mein Programm starten? Nur denke, ich mache jetzt ist zu setzen DS = CS = ES = SS = SPECIFIC_ADDRESS

+4

Mit einem COM-Programm (winzige Modell mit einem org von 100h:

mov ax, cs mov ds, ax 

Eine andere Möglichkeit wäre, ') CS = DS = ES = SS = das Segment des PSP, das Sie für das Programm verwenden, bevor Sie die Steuerung dorthin übertragen. Dies gilt nur für COM (nicht EXE) –

+0

Dies kann von Nutzen für Sie sein: http://www.fysnet.net/yourhelp.htm (plus vielleicht PSP-Struktur, wenn der Code etwas von 'cs holt: 0000- cs: 00FF' Bereich). – Ped7g

+0

@MichaelPetch Ich weiß, es ist COM-Programm – Sk1X1

Antwort

2

Für ein .COM-Programm wie das, das Sie haben, gibt es keine Notwendigkeit, eines der Segment-Register selbst einrichten. Der Programmlader des Betriebssystems hat bereits alle auf den Start Ihres Programms ausgerichtet.

Die Anweisung mov cl, byte ptr ds:[keylen] funktioniert so wie sie ist.
Sie müssen das Segment nicht einmal explizit angeben. Sie können auch mov cl, byte ptr [keylen] oder sogar mov cl, [keylen] schreiben.

Nun, wenn Sie die DS segmentregister manuell über die Einrichtung bestehen, könnten Sie schreiben:

mov ah, 62h ;DOS.GetPSP 
int 21h  ; -> BX 
mov ds, bx 
+0

Vielen Dank für die Antwort. Ich bin mir nicht sicher, ob Sie meine Frage richtig beantworten. Ich versuche, dieses Programm zu emulieren, und ich weiß, wo ich auf DS hinweisen sollte. Aber ich weiß nicht, was im ganzen Datenteil sein soll. – Sk1X1