2017-03-05 1 views
2

난 그냥 혼란 스러워요은 무엇인가 :8086 데이터 세그먼트의 기본 adress은 우리가 DS가 모든이와 함께가는 레지스터 초기화해야하는 이유

첫 번째 변수는 데이터 세그먼트 너무에게에 저장 저장
data segment 
msg1 db 10,13, "saisir le premier digit:$" 
data ends 
mov ax,data 
mov ds,ax` 

하지 이미 DS의 데이터 = 우리의 DS =에게 데이터를 초기화 할 경우 이미 이유들이 상기 제 1 가변가 저장된 동일한

+2

이 프로그램은 DOS의 .EXE 프로그램입니까? DOS 로더가 실행 파일 (.EXE)을로드 할 때 기본적으로 _DS_ (및 _ES_)를 [PSP] (https://en.wikipedia.org/wiki/Program_Segment_Prefix)가있는 세그먼트로 설정합니다. DS : 0 및 ES : 0은 PSP의 바닥을 가리 킵니다. _DS_을 데이터가 포함 된 세그먼트에 명시 적으로 설정해야합니다. –

+0

이 질문은 밀접하게 관련이있을 수 있습니다 http://stackoverflow.com/questions/3715618/how-does-dos-load-a-program-into-memory –

답변

1

데이터 세그먼트에 저장된

오해가 있다고 생각합니다. 컴파일 시간과 런타임을 구별해야합니다.

msg1 텍스트를 프로그램의 데이터 섹션에 넣는 컴파일러 (어셈블러)입니다. 우리는 실제로 이것을 변수를 저장하는 이라고 부르지 않으며 또한 DS 세그먼트 레지스터의 특정 설정이 관련되어 있지 않습니다.

그러나 실행시 이러한 변수를 검색하거나 저장할 때 DS 세그먼트 레지스터는 데이터 섹션을 가리켜 야합니다. 프로그램 시작시 이것이 사실이 아니기 때문에 명시 적으로해야합니다.

1 data segment 
2 msg1 db 10,13, "saisir le premier digit:$" 
3 data ends 
4 mov ax,data 
5 mov ds,ax 

는 실행이 아니라 4에서,이 코드 조각의 첫째 줄에서 시작되지 않았습니다 있습니다 마세요! 이는 데이터 세그먼트에 이전의 스토어가 없음을 확인하는 또 다른 방법입니다.

관련 문제