2017-12-24 49 views
1

나는 특정 프로그램을 에뮬레이트해야하는 에뮬레이터에 대해 연구 중이다. COM 파일과 소스 파일이 있습니다.데이터 세그먼트에 무엇을로드해야합니까?

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

나는 그것이 DS (데이터 세그먼트)에서 값을 이동하는 것을 의미한다 알을 CL 레지스터로 017B를 오프셋 : 지금이 특정 명령을 에뮬레이트 할 필요가 (이것은 내가 도스 박스 디버거에서 볼 수있는 것입니다). 그러나 무엇이 DS에 있어야합니까? 내 프로그램을 시작할 때

.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 

내가 DS에 무엇을 저장해야합니다 :

프로그램 나는 (소스 파일)을 에뮬레이션하기 위해 노력하고있어? 내가 지금하고 있다고 생각하는 것은 설정하는 것입니다 DS = CS = ES = SS = SPECIFIC_ADDRESS

+4

를 (작은 모델 ') CS = DS = ES = SS = 당신이 프로그램에 컨트롤을 전송하기 전에 당신이 사용하는 PSP의 세그먼트. 이것은 COM (EXE가 아님)에만 적용됩니다. –

+0

이것은 당신에게 유용 할 수 있습니다 : http://www.fysnet.net/yourhelp.htm (코드가'cs : 0000- cs : 00FF' 범위). – Ped7g

+0

@MichaelPetch 알아, COM 프로그램 – Sk1X1

답변

2

당신이 가진 것과 같은 .COM 프로그램의 경우 세그먼트 레지스터를 직접 설정할 필요가 없습니다. 운영 체제 프로그램 로더는 이미 프로그램의 시작을 가리키고 있습니다.

지침 mov cl, byte ptr ds:[keylen]은있는 그대로 작동합니다.
세그먼트를 명시 적으로 지정할 필요조차 없습니다. mov cl, byte ptr [keylen] 또는 mov cl, [keylen]으로 작성할 수도 있습니다.

이제 당신은 수동으로 DS segmentregister 설정에 대한 고집

, 당신이 쓸 수 :

mov ax, cs 
mov ds, ax 

또 다른 방법은 다음과 같습니다 100H의 조직과 COM 프로그램으로

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

답장을 보내 주셔서 감사합니다. 내 질문에 답을 얻었는지 확실치 않습니다. 나는이 프로그램을 에뮬레이트하려고 노력하고 있으며 나는 DS를 지적해야만한다. 하지만 전체 데이터 섹션에 무엇이 있어야하는지 모르겠습니다. – Sk1X1