C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[24284] Re:[질문] c++랭귀지 램에서 작동눈으로보기?
임문환 [mhlim] 656 읽음    2003-02-13 18:50
void ()
{
int k;
int *xx ;
k=3-2 ;
xx=&k ;
}

어셈블리어로 설명을 하면 조금이나마 궁금증이 풀릴지 모르겠습니다.

어셈블리어 명령은 대부분 기계어와 1대 1의 대응관계를 갖습니다.
기계어는 2진법의 숫자로만 되어 있는데 이 것으로 사람이 코딩하는 것은 매우 힘듭니다.
그래서, 숫자로된 기계어의 각 명령에 글자로된 명령어를 만들고 의사명령어라는 것도 만들어
코딩의 수고를 조금이나마 덜어주고자 어셈블리어를 만들게 되었습니다.

위 C 코드에 해당하는 어셈블리어 코드(라인 순서는 다를 수 있음)
K  DD ; 또는 DW , DD는 Define Double Word로서 4바이트 자료를 정의함.
xx DD ; 또는 DW

MOV k , 3-2  ; 변수 k에 3-2의 결과를 저장, 3-2는 컴파일 시에 1로 확정됨(상수)
MOV xx , OFFSET k ; 변수 xx에 k의 상대 번지를 저장


질문 ) 메모리  일정 주소(코드영역)에  정보 int 같은 경우 2바이트
할당/정수사용에 의미를가지고 있고  변수명 k는 데이타영역에 첫번째
주소가 저장(리맵핑) 되는것인가요??  yes.no?
답)
'정수 사용'이라는 것은 컴파일 시까지만 의미가 있음.
변수명은 컴파일,링크 시까지만 필요함(실행 파일에는 변수명이 없음).



질문2) 메모리에 일정주소(코드영역)에 정보 int * 같은 경우 2바이트할당/
주소다 의미를가지고있고  변수명 xx는 데이타 영역에 첫번째주소가
저장되는것인가요 ??  yes no ?
답)
'주소다'라는 것도 컴파일 시까지만 의미가 있음
변수 xx가 위치하는 상대 번지에 k가 위치하는 상대 번지를 저장함.



질문3)위에 예에서  선언이후에 

int k=3-2 ;
int *xx= &int k ;

이런 형식으로 쓰지 않는것은 같은글을 또쓰고 또쓰고 노가다 작업을
피하기 위하여=데이타형 중복쓰는것을 피하기 위하여  프로그램
코드작동 범위=데이타형 작동범위를   선언에서 지정하는것아닌가요 ?
  yes. no?
그 긴 프로그램 문장마다 데이타형~다 쓰면 얼마나 노가다입니까?

답)
int *xx = &k;
이건 프로그래머의 편의를 위해 있는 것으로서 컴파일 시에 확장됩니다.
즉, int *xx; xx=&k; 이미 컴파일할 때 이런 식으로 결정됩니다.
xx DD ; 더블워드 크기의 변수 xx
MOV xx, OFFSET k ; xx에 k의 번지를 저장



질문4)  k=3-2 일 경우 데이타영역은 어디이고 프로그램영역은 어디
일까 의문점인데?

3-2경우에 3,2는 데이타영역에 있고 그러니 당연히 그 위치=주소를가지고 있고

메모리에 일정주소(프로그램코드 영역)에는  방에는~ 내용에는 
  3이나 2에 주소를 가지고있나요?
답)
k DD  ; 더블워드 크기의 변수 k
MOV k, 3-2 ; k에 3-2의 결과를 저장, 3-2는 컴파일 시에 1로 됨(상수)
3-2에 해당하는 데이터 영역은 없음




이정우~ 님이 쓰신 글 :
: 우선 바쁘신데 항상 친절한 답변감사합니다 ^__________^;
:
:
: void ()
: {
: int k;
: int *xx ;
: k=3-2 ;
: xx=&k ;
: }
:
: 이프로그램 켐파일 되고 난후    실행파일로  만들어 작동할경우 
:
: 램에서 데이타영역과  프로그램코드영역으로 나누어져 실행되는것
: 은 분명하겠죠.!!
:
: 그럼 램 속안을 관찰해 보면~!!
:
: 램에 데이타영역이나 프로그램코드 영역이나 메모리이기때문에
: 솔직히 주소가 있고 그안에 정보들이  입력되어 있겠죠.
:
: 질문 ) 메모리  일정 주소(코드영역)에  정보 int 같은 경우 2바이트
: 할당/정수사용에 의미를가지고 있고  변수명 k는 데이타영역에 첫번째
: 주소가 저장(리맵핑) 되는것인가요??  yes.no?
:
: 질문2) 메모리에 일정주소(코드영역)에 정보 int * 같은 경우 2바이트할당/
: 주소다 의미를가지고있고  변수명 xx는 데이타 영역에 첫번째주소가
: 저장되는것인가요 ??  yes no ?
:
: 질문3)위에 예에서  선언이후에 
:
: int k=3-2 ;
: int *xx= &int k ;
:
: 이런 형식으로 쓰지 않는것은 같은글을 또쓰고 또쓰고 노가다 작업을
: 피하기 위하여=데이타형 중복쓰는것을 피하기 위하여  프로그램
: 코드작동 범위=데이타형 작동범위를   선언에서 지정하는것아닌가요 ?
:  yes. no?
:
: 그 긴 프로그램 문장마다 데이타형~다 쓰면 얼마나 노가다입니까?
:   
:
: 질문4)  k=3-2 일 경우 데이타영역은 어디이고 프로그램영역은 어디
: 일까 의문점인데?
:
: 3-2경우에 3,2는 데이타영역에 있고 그러니 당연히 그 위치=주소를가지고 있고
:
: 메모리에 일정주소(프로그램코드 영역)에는  방에는~ 내용에는 
:  3이나 2에 주소를 가지고있나요?
:
: why 그래야지 프로그램이 실행되면서 데이타영역에 3.2에 위치를 찾죠!
:
:

:    
:
:  
:    
:

:
:
:   
:

+ -

관련 글 리스트
24264 [질문] c++랭귀지 램에서 작동눈으로보기? 이정우~ 519 2003/02/13
24284     Re:[질문] c++랭귀지 램에서 작동눈으로보기? 임문환 656 2003/02/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.