변수에 액세스하는 명령어를 작성할 때 숫자 주소를 사용하는 것이 좋지 않은 이유는 무엇입니까? 나는 어셈블리 언어를 연구 해왔고이 질문은 내가 가지고있는 문제이다.어셈블리 언어의 숫자 주소
답변
숫자 주소를 사용하면 메모리의 특정 위치로 연결됩니다. 일반적으로 응용 프로그램은 메모리의 어느 위치 에나로드 될 수 있으므로 프로그래밍 할 때 가정 한 것과 다른 위치에로드 된 경우에는 작동하지 않습니다. 메모리가 부족한 운영 체제 커널을 프로그래밍하는 경우에도 새 버전의 커널로 인해 주소 아래에있는 데이터 나 코드가 더 크거나 작아 질 수 있습니다.이 경우 모든 숫자 주소를 변경해야합니다.
요즘 대부분의 프로세서는 직접 주소와 마찬가지로 간접 주소가 빠르기 때문에 숫자 주소를 사용해도 어쨌든 도움이되지 않습니다.
감사합니다. – user3307068
이것은 부트 로더에서만 작동합니다. 도스 하에서조차도 여러분의 코드가 어떤 주소로로드 될지 결코 알 수 없습니다.
또한 참조 된 지점 (변수, 레이블 등)과 사용 지점 사이에 한 줄을 삽입하면 숫자 주소가 변경됩니다. 유지하는 것이 고통입니다.
걱정거리는 사실이지만 문제의 코드가 운영 체제가있는 플랫폼이나 가변로드 주소가있는 플랫폼에서 실행될 것인지조차 알지 못합니다. 또한 IIRC DOS는 고정 IP 주소 (세그먼트 내), 전이중 CP/M에서 사용 된 것과 개념적으로 호환되는 플랫 바이너리 형식을 지원합니다. –
OP는 그들이 ** 공부하고 있다고 언급했습니다 **. x86 어셈블리의 학생은 무서운 OS없는 무언가가는 환경을 목표로하지 않을 것입니다. –
x86은 어디서 볼 수 있습니까? 클래스가 x86 기반이더라도 운영 체제를 대상으로한다는 것을 어떻게 알 수 있습니까? x86 어셈블리를 다루는 유일한 클래스는 베어 메탈이지만, OS가없는 임베디드 개발 보드로 옮기기 전에 DOS에서 .com 바이너리로 간단히 시작했다. –
- 1. 주소 레지스터 어셈블리 언어의 주소에 숫자 추가
- 2. 어셈블리 언어의 오버플로 나누기
- 3. 어셈블리 언어의 다차원 배열
- 4. 어셈블리 언어의 가치는 무엇입니까
- 5. 어셈블리 언어의 피보나치 시퀀스
- 6. 어셈블리 언어의 루프
- 7. 어셈블리 언어의 디자인 패턴
- 8. 어셈블리 언어의 중첩 루프
- 9. 어셈블리 언어의 "레이블"
- 10. 어셈블리 언어의 포인터
- 11. MIPS와 어셈블리 언어의 차이점
- 12. 어셈블리 언어의 유형
- 13. 어셈블리 언어의 타이머
- 14. x86 어셈블리 언어의 LEA 오류
- 15. 어셈블리 언어의 작동 방식은 무엇입니까?
- 16. 어셈블리 언어의 스킵 조건 이해
- 17. 어셈블리 언어의 문자열 값 변경
- 18. C 언어의 어셈블리 언어 구현
- 19. 8086과 x86 어셈블리 언어의 차이점
- 20. x86 어셈블리 언어의 저장소 및 문자열 조작
- 21. 어셈블리 호출 메모리 주소
- 22. 어셈블리 스택 인덱스 주소
- 23. 어셈블리 명령 주소
- 24. MASM32 어셈블리 - 콘솔에서 숫자 읽기
- 25. 어셈블리 큰 숫자 계산기
- 26. 어셈블리 언어로 숫자 인쇄하기?
- 27. 어셈블리 입력 숫자 입력
- 28. 어셈블리 언어의 공백 대신 "a"가져 오기
- 29. 어셈블리 언어의 스택 프레임에 배열 복사
- 30. OFFSET x86 프로세서 용 어셈블리 언어의 연산자
"숫자 주소"의 의미를 더 잘 설명해야합니다. 변수에 사용할 정확한 주소를 프로그램에 알려주시겠습니까? – m0skit0
어셈블러는 프로그램을 어셈블 할 때 숫자 주소 또는 오프셋을 생성하므로 질문이 명확하지 않습니다. 고정 주소를 의미하는 경우 I/O가 메모리 맵핑되고 고정 주소 인 플랫폼이 있습니다 (어셈블리 소스에서 같음 또는 정의 사용). 인터럽트 벡터 테이블과 같은 것들에 대한 고정 주소가있을 수도 있습니다. 당신의 설명에 대해 – rcgldr