스택 / 스택 포인터 란 무엇입니까 : 유형 및 응용 프로그램

문제를 제거하기 위해 도구를 사용해보십시오





스택은 삽입 및 삭제가 한쪽 끝에서만 발생하는 선형 데이터 구조 일뿐입니다. 삽입 작업에는 PUSH라는 특수 이름이 있고 삭제 작업에도 POP라는 특수 이름이 있습니다. PUSH 및 POP는 특정 스택에서만 수행 할 수있는 두 가지 기본 작업입니다. 메모리 위치 그룹이며 메모리 위치는 읽기 메모리 또는 쓰기 메모리와 관련이 있습니다. 이것은 프로그램을 실행하는 동안 바이너리 정보를 저장하는 데 사용되며, 프로그램을 실행할 때 해당 프로그램의 내용이 스택에 저장됩니다. 다음과 같습니다 후입 선출법 (LIFO)이며 데이터 저장 및 검색에만 사용되지만 데이터 저장에는 사용되지 않습니다. 스택 / 스택 포인터에 대한 간략한 설명은 아래에서 설명합니다.

스택 / 스택 포인터 란?

정의: 스택은 LIFO (Last In First Out) 방식으로 정보 또는 데이터를 저장하는 데 사용되는 저장 장치입니다. LIFO 방식으로 데이터를 입력 할 때마다 먼저 삭제해야하는 요소가 마지막 inserter 요소이므로 마지막에 삽입 된 요소가 먼저 제거됩니다. SP (스택 포인터)라고하는 주소 레지스터 내의 메모리 단위입니다. 스택 포인터는 항상 데이터를 삽입해야하는 위치를 의미하는 스택의 최상위 요소를 나타냅니다.




스택 유형

스택에는 레지스터 스택과 메모리 스택의 두 가지 유형이 있습니다.

스택 등록

레지스터 스택은 메모리 장치에있는 메모리 장치이기도하지만 소량의 데이터 만 처리합니다. 레지스터 스택의 크기가 메모리에 비해 매우 작기 때문에 스택 깊이는 항상 레지스터 스택에서 제한됩니다.



레지스터 스택의 푸시 작업

1 단계: 스택 포인터가 1 씩 증가합니다.

SP ← SP + 1


2 단계: 스택에 데이터를 입력합니다.

1000 [SP] ← CT

DR이 데이터 레지스터 인 경우

Step3 : 스택이 가득 찼는 지 여부 확인

if (sp = 0) then (full ← 1)

Step4 : 비어 있지 않음으로 표시

비어 있음 ← 0

레지스터 스택의 팝 작업

1 단계: 스택에서 데이터를 읽습니다.

DR ← M [SP]

2 단계: 스택 포인트를 줄입니다.

SP ← SP-1

Step3 : 스택이 비어 있는지 확인

sp = 0이면 비어 있음 ← 1

64 비트 레지스터 스택의 스택 구성은 아래 그림에 나와 있습니다.

스택 조직 등록

스택 조직 등록

메모리 스택

메모리 스택에서 스택 깊이는 유연합니다. 그것은 많은 양의 메모리 데이터를 차지하는 반면 레지스터 스택에서는 한정된 수의 메모리 워드 만 저장됩니다.

메모리 스택의 푸시 작업

1 단계: SP ← SP-1

2 단계: 1000 [SP] ← CT

메모리 스택에서 팝 작업

1 단계: DR ← M [SP]

2 단계: SP ← SP-1

레지스터 유닛에 비해 메모리 유닛은 많은 양의 데이터를 저장합니다. 메모리 스택 수치는 아래 그림과 같습니다.

메모리 스택

메모리 스택

전체 메모리 단위는 세 부분으로 나뉘는데, 첫 번째 메모리 단위는 프로그램 (명령어 만 있음), 두 번째 부분은 데이터 (피연산자), 세 번째 부분은 스택입니다. 프로그램 명령어는 항상 프로그램 카운터 (PC)에 저장되며 데이터 레지스터는 주소 레지스터 (AR)로 식별됩니다. 스택 및 첫 번째 항목 또는 요소에 사용되는 주소 3000 ~ 4001은 4001에 저장됩니다.

8085 마이크로 프로세서의 스택 / 스택 포인터

8085의 프로그래머 관점 마이크로 프로세서 범용 레지스터 및 특수 목적 레지스터 . 범용 레지스터는 A, B, C, D, E, H, L이고 특수 용도 레지스터는 SP (스택 포인터) 및 PC (프로그램 카운터)입니다. 8085 마이크로 프로세서의 프로그래머보기는 아래 그림과 같습니다.

8085의 프로그래머 관점

8085의 프로그래머 관점

스택 포인터는 16 비트 레지스터에 메모리 주소가 포함되어 있으며 SP (스택 포인터) 내용이 FC78H라고 가정하면 마이크로 프로세서 8085가이를 해석합니다. 메모리 위치에는 FC78H에서 FFFH까지 유용한 정보가 있고 FC77H에서 0000H까지 메모리 위치에는 유용한 정보가 없습니다. 스택 포인터의 해석은 아래 그림에 나와 있습니다.

스택 포인터의 해석

스택 포인터의 해석

스택 / 스택 포인터의 기본 작동

스택에는 PUSH 작업과 POP 작업의 두 가지 작업이 있습니다.

PUSH 작동

PUSH는 스택에 요소를 밀거나 삽입하는 것을 의미합니다. PUSH 연산은 항상 스택 포인터를 증가시키고 POP 연산은 항상 스택 포인터를 감소시킵니다. 푸시 작업의 경우 사용 가능한 여유 공간이 있는지 확인해야합니다. 여유 공간이 있으면 push 작업으로 이동할 수 있고 여유 공간이 없으면 오버 플로라는 오류 메시지가 발생합니다. Push 동작시 각각 Overflow를 확인합니다. 푸시와 팝의 기본 동작은 아래 그림과 같습니다.

PUSH 및 POP의 기본 작동

PUSH 및 POP의 기본 작동

그림 (a)는 스택입니다. 요소를 스택에 삽입하는 요소를 푸시하려면 푸시 (s, a)를해야합니다. 여기서‘s’는 스택 일뿐입니다. 스택에 'a'요소를 배치하고이 작업은 그림 (b)에 표시됩니다. 그림 (3)을 참조하십시오. 스택에 세 개의 요소 a, b, c가 있고 스택이 요소로 채워져 있다고 가정합니다.

push (s, d)를 사용하여 네 번째 요소 'd'를 삽입하려고하지만 요소를 삽입 할 수있는 공간이없는 경우 스택이 오버플로임을 나타냅니다. 오버플로 용어는 스택이 가득 차고 푸시 작업 알고리즘이 아래에 나와있을 때 사용됩니다.

push (stack [], 상단, 최대 스택, 항목)

if (상단 == maxstack-1)

{

'오버플로'인쇄

}

그밖에

{

top = top + 1

stack [top] = item

}

종료

POP 작업

POP는 스택 맨 위에있는 요소를 삭제하는 것을 의미합니다. 팝 작업의 경우 스택이 처음에 비어 있는지 여부를 확인해야합니다. 스택이 처음에 비어 있으면 언더 플로 상황이 발생합니다. 스택이 비어 있다고 가정하고 스택의 요소를 팝하지만 스택에 요소가 없으면 스택 언더 플로가 발생합니다.

Pop 동작시 각각 Underflow를 확인합니다. 팝 작업에서 팝 또는 삭제해야하는 스택에있는 최상위 요소가 무엇이든간에 어떤 요소가 팝 될지 언급 할 필요가 없습니다. 기본적으로 맨 위 요소가 팝됩니다. 팝 연산의 알고리즘은 아래와 같습니다.

pop (stack [], 상단, 항목)

if (상단 ==-1)

{

'언더 플로'인쇄

}

그밖에

{

item = stack [맨 위]

top = top-1

}

요소는 A, B, C, D, E 순서로 삽입되며 5 개 요소의 스택을 나타냅니다. 그림 (a)에서 'A'요소를 스택에 푸시하고 상단은 0 (top = 0)이됩니다. 유사하게 'B'요소를 누르면 top = 1, 'C'요소를 누르면 top = 2 'D'요소를 누르면 top = 3, 'E'요소를 누르면 top = 4입니다.

그래서 내가 가져온 요소가 스택에 배치되면 스택이 가득 찼습니다. 다른 요소를 푸시하려는 경우 스택에 위치가 없으므로 오버플로를 나타냅니다. 이제 스택이 가득 차면 요소 'E'요소를 먼저 삭제해야합니다. 푸시 동작은 아래 그림과 같습니다.

푸시 작업

푸시 작업

스택의 요소를 삭제하려면 팝 작업을 사용해야합니다. 따라서 pop ()은 기본적으로 최상위 요소를 삭제하므로 pop ()에 인수를 쓰지 마십시오. 첫 번째‘E’요소는 다음‘D’요소… ..’A’에서 삭제됩니다. 상위 요소가 삭제되면 상위 값이 감소합니다. top = -1이면 스택은 언더 플로를 나타냅니다. 팝 작업은 아래 그림과 같습니다.

POP 작업

POP 작업

그래서 이것은 push와 pop 연산을 사용하여 스택에 요소를 삽입하고 삭제하는 방법에 대한 설명입니다.

응용

스택 / 스택 포인터의 응용 프로그램은 다음과 같습니다.

  • 문자열 반전
  • 균형 잡힌 괄호
  • 실행 취소 / 손가락
  • 활성화 기록을위한 시스템 스택
  • 중위, 접두사, 접미사, 표현식

자주 묻는 질문

1). 팔의 스택 포인터는 무엇입니까?

ARM에서 활성 스택에 대한 포인터로 사용되는 스택 포인터 레지스터 (R13)입니다.

2). 스택 포인터가 16 비트 인 이유는 무엇입니까?

이전 위치와 메모리 위치 주소를 저장하는 데 사용되는 스택 포인터 (SP)와 프로그램 카운터 (PC)는 16 비트이므로 스택 포인터 (SP)도 16 비트입니다.

삼). 스택 포인터의 역할은 무엇입니까?

SP (스택 포인터)의 역할은 스택에서 요소의 맨 위를 나타내는 것입니다.

4). 8085에서는 어떤 스택이 사용됩니까?

8085에서 사용 된 스택은 LIFO (Last In First Out)입니다.

5). 스택 포인터가 레지스터입니까?

예, SP (스택 포인터)는 항상 스택의 요소 상단을 나타내는 주소 레지스터입니다.

이 기사에서