2014-02-18 3 views
3

변수에 액세스하는 명령어를 작성할 때 숫자 주소를 사용하는 것이 좋지 않은 이유는 무엇입니까? 나는 어셈블리 언어를 연구 해왔고이 질문은 내가 가지고있는 문제이다.어셈블리 언어의 숫자 주소

+0

"숫자 주소"의 의미를 더 잘 설명해야합니다. 변수에 사용할 정확한 주소를 프로그램에 알려주시겠습니까? – m0skit0

+0

어셈블러는 프로그램을 어셈블 할 때 숫자 주소 또는 오프셋을 생성하므로 질문이 명확하지 않습니다. 고정 주소를 의미하는 경우 I/O가 메모리 맵핑되고 고정 주소 인 플랫폼이 있습니다 (어셈블리 소스에서 같음 또는 정의 사용). 인터럽트 벡터 테이블과 같은 것들에 대한 고정 주소가있을 수도 있습니다. 당신의 설명에 대해 – rcgldr

답변

0

숫자 주소를 사용하면 메모리의 특정 위치로 연결됩니다. 일반적으로 응용 프로그램은 메모리의 어느 위치 에나로드 될 수 있으므로 프로그래밍 할 때 가정 한 것과 다른 위치에로드 된 경우에는 작동하지 않습니다. 메모리가 부족한 운영 체제 커널을 프로그래밍하는 경우에도 새 버전의 커널로 인해 주소 아래에있는 데이터 나 코드가 더 크거나 작아 질 수 있습니다.이 경우 모든 숫자 주소를 변경해야합니다.

요즘 대부분의 프로세서는 직접 주소와 마찬가지로 간접 주소가 빠르기 때문에 숫자 주소를 사용해도 어쨌든 도움이되지 않습니다.

+0

감사합니다. – user3307068

0

이것은 부트 로더에서만 작동합니다. 도스 하에서조차도 여러분의 코드가 어떤 주소로로드 될지 결코 알 수 없습니다.

또한 참조 된 지점 (변수, 레이블 등)과 사용 지점 사이에 한 줄을 삽입하면 숫자 주소가 변경됩니다. 유지하는 것이 고통입니다.

+0

걱정거리는 사실이지만 문제의 코드가 운영 체제가있는 플랫폼이나 가변로드 주소가있는 플랫폼에서 실행될 것인지조차 알지 못합니다. 또한 IIRC DOS는 고정 IP 주소 (세그먼트 내), 전이중 CP/M에서 사용 된 것과 개념적으로 호환되는 플랫 바이너리 형식을 지원합니다. –

+0

OP는 그들이 ** 공부하고 있다고 언급했습니다 **. x86 어셈블리의 학생은 무서운 OS없는 무언가가는 환경을 목표로하지 않을 것입니다. –

+0

x86은 어디서 볼 수 있습니까? 클래스가 x86 기반이더라도 운영 체제를 대상으로한다는 것을 어떻게 알 수 있습니까? x86 어셈블리를 다루는 유일한 클래스는 베어 메탈이지만, OS가없는 임베디드 개발 보드로 옮기기 전에 DOS에서 .com 바이너리로 간단히 시작했다. –