[system programming] 시스템프로그래밍 실습 과제 : 복수모듈 프로그램(ArrayMul), 재귀를 이용하여 팩토리얼 구현
- 최초 등록일
- 2020.07.07
- 최종 저작일
- 2020.07
- 5페이지/ 한컴오피스
- 가격 1,000원
목차
1. 복수모듈 프로그램(ArrayMul)
1) 문제분석 및 풀이
2) 소스코드
3) 실행화면/레지스터 값
2. 재귀를 이용하여 팩토리얼 구현
1) 문제분석 및 풀이
2) 소스코드
3) 실행화면/레지스터 값
3. 결과에 대한 토의
본문내용
실습1 : 복수모듈 프로그램(ArrayMul)
* 문제분석 및 풀이
- 사용자로부터 입력 받은 data를 배열에 저장하고 모든 값들을 곱한다.
- 이프로그램이 어떻게 동작하는지 이해한다
- 디버거를 통해 값이들 어떻게 변하는지 확인한다.
* 실행화면 / 레지스터 값
- 여러 개의 파일로 나누어진 모듈을 하나로 링크시켜 어셈블 하는 과정
- PromptForIntegers 프로시저의 호출이 이루어 지고 아큐먼트 값이 넘어 온다
- 아큐먼트는 역순으로 저장, 각각 3, 배열주소, 출력할 문자열 주소순이다
- 값 3은 ecx에 저장되고, 3번의 루프를 돌면서 사용자로부터 입력을 받는다.
- ArraySum 프로시저 호출이 되면 배열의 주소값과 3이 넘어오고 역순으로 저장
- 배열에 있는 값을 eax에 곱하여 3번 루프를 반복 하게 된다
- 배열의 값을 곱한 값과 문자열의 주소값이 아규먼트로 넘어 오게 된다.
- edx에 출력할 문자열의 주소를 저장하고 결과값을 출력하게 된다.
실습2 : 재귀를 이용하여 팩토리얼 구현
* 문제분석 및 풀이
- 재귀를 이용하여 팩토리얼 함수를 만든다
- 여러개의 포멀 파라미터를 정의한뒤 스택에 파리미터들이 어떻게 쌓이는지 관찰
*실행화면 / 레지스터 값
- 스택에 아큐먼트 순서(왼쪽부터)의 역순으로 스택에 쌓이느것을 관찰 할수 있다
- 아규먼터의 1씩 감소하여 eax에 값을 곱한다
- 재귀함수 호출로 인하여 스택이 쌓이는 모습을 관찰
결과에 대한 토의
디버거를 이용하여 스택에 아규먼트들이 어떻게 저장되어 있는지 관찰하였으며, 함수를 호출할 때 스택이 어떻게 쌓이는지 디버거를 이용하여 확인하였다 두 번째 실습을 하면서 INVOKE를 사용하여 직접 스택에 아큐먼트들을 푸시하지 않고 자동으로 해주무로서 사용자의 편리하게 프로그래밍을 할수 있게 한 것 같다.
참고 자료
없음