[어셈블리]어셈블리로 구현한 최대공약수 구하기
- 최초 등록일
- 2006.06.11
- 최종 저작일
- 1997.01
- 7페이지/ 한컴오피스
- 가격 1,000원
소개글
최대공약수를 구하는 것을 반복문을 사용하고, 재귀 호출을 사용하여서
어셈블리 언어로 구현하였습니다.
목차
1.1 문제 분석
1.2 프로그램 설계
1.3 소스 코드
1.4 실행 화면
1.5 느낀점
본문내용
이 함수를 어셈블리 언어로 구현하고, 매번 다른 값을 사용하여 그 함수를 여러번 호출하고 테스트
하는 프로그램을 작성하라. 모든 결과는 화면에 표시하라.
: 두 정수에 대한 최대공약수(GCD) 를 찾는 유클리드 알고리즘을 재귀적으로 구현하라. 이 알고리즘
에 대한 설명은 대수학 책과 웹에 나와 있다. (주의 : GCD 문제의 비재귀적인 버전은 7장의 프로
그래밍 연습에 있다.)
1.2 프로그램 설계
① 최대 공약수 프로그램을 재귀와 반복 두 가지 형으로 구현하는데, 두 프로그램을 합쳐서 하나의
테스트 프로그램으로 작성하였다. 두 개의 정수를 입력 받은후, 그 값을 각각의 변수에 할당을
한다. 후에 프로그램에서 선택을 할수 있다. 순환 버전으로 최대 공약수를 구하려면 0 번을 입력
하고, 재귀 버전으로 최대 공약수를 구하려면 1번을 입력 한다.
② 만약 두 정수중에 마이너스 값이 들어오면 그 두 정수를 neg 명령어를 통해서 절대값을 취해준다.
이를 위해서 그 값이 0 과 cmp 해서 0보다 작으면 절대값을 취해 주는 L2 와 L4로 점프한다.
만약 0인 경우에는 다시 메인으로 호출된다.
③ go로 호출되어 먼저 값을 스택에 푸시 시킨다. 그리고 선택을 한다. 0일 경우 iterative 프로시
저가 호출된다. ebp를 스택에 저장해 두고, eax에 ebp + 12 위치의 주소값을 넣고, ebx 에 ebp+8
위치의 주소값을 넣는다. 그리고 gcd로 점프한다. 나눗셈을 하기 위해서 cdq를 사용하였고, 두
개의 정수값을 가지고 있는 두 레지스터 eax 와 ebx를 나눈다. 그리고 비교하여 ebx가 0이거나
작으면 return 으로 점프하고, 그렇지 않음 gcd로 점프한다.
참고 자료
없음