관리 메뉴

FU11M00N

[어셈블리] 어셈블리(nasm)와 c언어를 이용한 난수값 생성 2편 본문

Programming/Assembly

[어셈블리] 어셈블리(nasm)와 c언어를 이용한 난수값 생성 2편

호IT 2020. 9. 12. 22:44

저번 글과 이어지는 글입니다. https://nevertrustbrutus.tistory.com/95

그럼 test를 마쳤으니 이제 c언어 코드와 어셈블 코드를 링킹 시켜보겠습니다.

 

전체적인 설계

C에서 가져와야 할 기능을 먼저 생각해봅시다.

어셈블리 언어로 구현하기 힘든 랜덤 값을 가져오려고 합니다.

그러려면 랜덤 시드 값을 초기화(현재시간으로) 시키는 함수와 1~45 사이의 정수를 리턴해줄 함수가 필요할 것입니다.

 

- newtime() : 랜덤 시드 값 초기화(현재시간)

- random() : 1~45 사이의 정수 리턴

 

다음으로는

 

어셈블리 에서 필요할것같은 기능들을 생각해봅시다.

 

- arr[6] : 로또를 담을 그릇.

- main : 메인 함수.

- compare_number: 중복되는 숫자가 들어가있는지 확인하는 함수

- show: 로또 6개를 출력하여 보여주는 함수

 

순서도: 

 

1. c 파일을 생성해준다. (c언어로 랜덤값 생성하고 돌려주는 코드)

2. 중간파일 생성 ( random.o)

3.어셈블리어 코드 목적파일 만들기.(랜덤.asm -> 랜덤.obj)

4. 두 개의 파일 링킹 시켜서 exe파일 만들기

5. 끝

 

 

#include <stdlib.h>
#include <time.h> 

void newtime()
{
   srand(time(NULL));
}
int random()
{
   int a;
   
   a = rand()%45 +1; 
   
   return a;
}

random.c 파일의 내용

 

사진 1-1
사진 1-2

랜덤.asm 파일의 소스 코드

 

사진 1-3

랜덤.asm을 랜덤.obj로 목적파일 만드는 과정.

사진 1-4

random.c 파일을 random.o 목적 파일로 만드는 과정.

사진 1-5

랜덤.obj 파일과 random.o 파일을 링킹 시키는 과정.

결괏값.

 

ref. https://lucete1230-cyberpolice.tistory.com/114?category=852249

 

Comments