2011-02-07 4 views
2

실제로 긴 코드를 만들고 싶지만 공간이 충분하지 않은 것처럼 내 코드 끝에있는 몇 가지 서브 루틴에 약간의 문제가 있습니다. 그래서 .data .stack과 같은 세션에서 코드를 깨는 것과 같은 것을 발견했습니다. .model small 등등. 이렇게 세션에서 내 코드를 깨면 해결책이 생깁니 까? 링커가 긴 코드를 처리 할 수 ​​있도록이 세션을 어떻게 번역합니까? 어떤 종류의 모델 유형이 있습니까? 8088로 작업 중이므로 16 비트 편집기, 컴파일러, 윈도우에서 사용할 수있는 디버거를 알고 있으면 감사하겠습니다. 고맙습니다어셈블리 모델 유형이 실제로 연결되어 있습니까?

답변

0

글쎄, 당신은 많은 질문을했지만, 주요 질문은 어셈블리 모델을 &으로 컴파일 할 때 메모리 모델이 어떻게 작동하는지에 관한 것이라고 생각합니다. 사실, 나는 8088 프로세서에 대한 경험이 없지만 real mode에서 작동해야하므로 8086과 크게 다르지 않다고 생각합니다. 좋아요, 어셈블리 코드를 작성할 때 프로그램이 들어갈 메모리 모델을 선택해야합니다. .model 지시어 (AFAIR은 TASM과 MASM이 모두 그것을 사용했습니다)로 어셈블리에서 완료되었습니다. 이 지정 문에는 TINY, SMALL, MEDIUM, COMACT, LARGE 및 HUGE와 같은 매개 변수가있을 수 있습니다. 각각은 프로그램의 메모리 모델을 정의합니다. TINY 메모리 모델은 코드와 데이터가 하나의 세그먼트가됨을 의미합니다. 다른 모델에서는 코드 &을 별도의 세그먼트로 선언 할 수 있습니다. 또는 코드가 포함 된 세그먼트를 선언 할 수도 있습니다 (64KB 한도를 초과하는 경우). 그것은 초보자를위한 것입니다.

이제 우리는 서로 다른 메모리 모델이 우리가 데이터를 처리하는 방식을 바꿔야한다는 것에 유의해야합니다. TINY 메모리 모델을 선택하면 코드와 데이터가 같은 세그먼트에 있습니다. 그러나 SMALL 모델에서는 그렇지 않습니다. 따라서 DATA 세그먼트에 액세스하는 모든 ASM 명령어에는 적절한 세그먼트 레지스터 세트 (DS)가 있어야합니다.

+0

좋아, 내가 300-350 줄의 코드를 가지고 있다고 가정 해 보겠습니다. 그것의 50-60 %는 서브 루틴에 있지만 코드 끝의 3-4는 작동하지 않습니다. (내 프로그램은 거기에 들어가면 멈 춥니 다.) 또한 .data에서 몇 가지 표준 변수를 사용할 수 있습니다. 어떤 종류의 모델을 사용해야합니까? 또한 얼마나 멀리/가까운 절차에 영향을줍니다. 이것들은 많은 질문이지만, 튜토리얼/책/링크도 참조 할 수 있으면 알고 있습니다. 고맙습니다 – Giannis

+0

@Giannis :이 페이지를 확인하십시오 : http://www.freebyte.com/programming/assembler/ – Lukasz

관련 문제