2017-12-08 2 views
-1

MASM을 사용하여 행렬 계산기를 작성하려고하는데 행렬을 동적으로 할당하는 데 문제가 있습니다. 예어떻게 동적으로 MASM에서 행렬을 할당합니까?

:

행렬은 3 × 3 인 사용자 입력이, I 메모리에 3 × 3 행렬을 유지하는 공간을 할당하는 경우.

나는 누군가가 나를 어떻게 보여줄 수 있었으면 좋겠다.

+0

사용자가 몇 가지 미친 숫자를 입력하길 원하십니까? 아니면 1000과 같이 하드 코딩 된 최대 값을 벗어날 수 있습니까? 그런 다음'.bss' 섹션에 1 백만 개의 셀을 예약하고 그 메모리의 일부만 사용하십시오. 셀이 부동 소수점'double 'type = 8 바이트 인 경우 현재 RAM의 8MiB 만 낭비되며 현대 PC에서는 문제가되지 않습니다. – Ped7g

+0

* 동적 * 할당이 정말로 필요합니까? 아니면 런타임 가변적 인 스택 공간이 작동합니까? 더 쉽습니다. –

+0

@PeterCordes 터미널 화면에서 메시지가 표시 될 때 사용자가 입력하는 행렬의 크기에 맞게 용량을 사용하여 다차원 배열을 만들 수 있기를 바랍니다. –

답변

1

어떻게 동적으로 MASM에 매트릭스를 할당합니까?

(즉, 낮은 수준에서 동적 할당 더 정확한 의미가 없기 때문에) 당신은 동적 어셈블러의 배열을 할당하지 않습니다.

어셈블러에서 동적 할당을 수행하는 일부 함수를 호출 할 수 있습니다. 예를 들어 mallocC standard library에서 호출 할 수 있습니다.

일부 알려진 운영 체제 용으로 user-mode 응용 프로그램을 코딩하는 경우 system call 일부를 수행하여 virtual address space을 변경하는 것이 좋습니다. 리눅스에서는 (예를 들어) mmap(2) 일 수 있습니다.

두 경우 모두 호출해야하는 함수 또는 시스템 호출에서 calling conventions에 따라야합니다. 시스템에 따라 Application Binary Interface을 읽어야합니다. Linux/x86-64의 경우 here

일반적으로 호출 규칙은 instruction set architecture 및 운영 체제에 따라 다릅니다. 독립 실행 형 라이브러리 또는 프레임 워크를 사용하는 경우에는 해당 호출 규칙을 문서화해야합니다.

this도 참조하십시오.

call stack에 할당 할 수도 있습니다 (적절하게 스택 포인터를 변경하여).

+0

그러나 "HeapAlloc"을 사용하여 동적으로 배열을 할당 할 수 있도록 Irvine32와 같은 라이브러리를 사용할 수 있습니까? –

+0

예. 그런 다음 호출 규칙을 이해해야합니다 (해당 라이브러리 및 시스템과 관련됨) –

관련 문제