[์ด์ ๋ธ๋ฆฌ์ด] ๋ก๋ ์์ฑํ๊ธฐ
- -
๋ก๋ ์์ฑ๊ธฐ
์ ์ฒด ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
C์์ ๊ฐ์ ธ์์ผ ํ ๊ธฐ๋ฅ์ ๋จผ์ ์๊ฐํด๋ณธ๋ค.
์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ก ๊ตฌํํ๊ธฐ ํ๋ ๋๋ค ๊ฐ์ ๊ฐ์ ธ์ค๋ ค ํ๋ค. ๊ทธ๋ฌ๋ ค๋ฉด ๋๋ค ์๋ ๊ฐ์ ์ด๊ธฐํ(ํ์ฌ์๊ฐ์ผ๋ก) ์ํค๋ ํจ์์ 1~45 ์ฌ์ด์ ์ ์๋ฅผ ๋ฆฌํดํด์ค ํจ์๊ฐ ํ์ํ ๊ฒ์ด๋ค.
- inimylib() : ๋๋ค ์๋ ๊ฐ ์ด๊ธฐํ(ํ์ฌ์๊ฐ)
- getnumber() : 1~45 ์ฌ์ด์ ์ ์ ๋ฆฌํด
๋ค์์ผ๋ก๋
์ด์ ๋ธ๋ฆฌ ์ธ์ด์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก ์ค๊ณ๋ฅผ ํด๋ณธ๋ค.
๋จผ์ 6๊ฐ์ ์ซ์๋ฅผ ๋ด์ ๋ฐฐ์ด์ด ํ์ํ ๊ฒ์ด๋ค. ๋ํ ์ซ์๋ฅผ ๋น๊ตํ๋ ํจ์๋ ํ์ํ๋ค.
-int data[6] : ์ ์ญ๋ณ์
- main : ๋ฉ์ธ ํจ์
- checksame() : ๋์ผํ ์ซ์๊ฐ ๋ค์ด๊ฐ์๋์ง ํ์ธํ๋ ํจ์
- showdata() : ์ซ์ 6๊ฐ๋ฅผ ์ถ๋ ฅํ์ฌ ๋ณด์ฌ์ฃผ๋ ํจ์
๊ตฌ์ฑ
1. c๋ก ๋จผ์ ํฐ ํ์ ์ง๋ณด๊ณ ์ด์ ๋ธ๋ฆฌ์ด๋ก ํ๋ฉด ๋ ๋์์ด ๋ง์ด ๋จ (๋ ํท๊ฐ๋ฆผ)
2. c ํ์ผ์ ์์ฑํด์ค๋ค. (c์ธ์ด๋ก ๋๋ค๊ฐ ์์ฑํ๊ณ ๋๋ ค์ฃผ๋ ์ฝ๋)
3. ์ค๊ฐํ์ผ ์์ฑ
4. ๋ณ์ ์ ์ธ๊ณผ ๊ธฐ๋ณธ ํจ์๋ค์ ๊ณจ๊ฒฉ์ ๋ง๋ ๋ค. 292์ฌ์ง ์ฐธ๊ณ
-->์ฌ๊ธฐ๊น์ง ์์ฑ์ด ๋์๋ค๋ฉด ํ๋ก์์ ๋ฅผ ๊ตฌํํด์ค๋ค.
5.์ด์ ๋ธ๋ฆฌ์ด ์ฝ๋ ๋ง๋ฌด๋ฆฌ
6. ์ค๊ฐํ์ผ ๋ง๋ค๊ณ , ํฉ์น๊ธฐ
7. ๊ฒฐ๊ณผ
๋ฐฐ์นํ์ผ์ ์์ฑํด์ฃผ์ด, ๊ฒฝ๋ก์์์ ์ฝ๋๊ฐ ์คํ๋๊ฒ๋ ํ์๋ค.
1. c๋ก ํฐ ํ ์๊ฐํด๋ณด๊ธฐ
// c๋ก showdata ์ฝ๋ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
void showdata()
{
t=0;
printf("Lotto : ");
while(t<6)
{
printf(data[t]);
t=t+1;
if(t <5)
{
printf(",")
}
}
}
//checksame ์ฝ๋ ์๊ณ ๋ฆฌ์ฆ
//๋์ผํ ์ซ์ ์๋?
int data[6];
//eax : ์๋ก์ด ๊ฐ, ebx : ๋ง๋ค์ด์ง ๋ฐ์ดํฐ ๊ฐ์
int checksame(eax,ebx) //๋ณ์์ด๋ฆ์ ์๊ด ์์.
{
t=0;
while(t <ebx)
{
if(data[t] == eax)
{
eax = 1;
return eax;
}
t=t+1;
}
eax=0;
return eax;
}
// main ์๊ณ ๋ฆฌ์ฆ
int data[6];
void main()
{
int size=0;
while(size < 6)
{
a= getnumber();
if(1!= checksame(a,size))
{
data[size]=a; //๋ฐ์์จ ๋๋ค๊ฐ์ด ๋์ผํ์น ์ฒดํฌ ํ๋๊ฒ
size = size +1;
}
}
showdata(data); //์ซ์ 6๊ฐ ์ถ๋ ฅํด์ ๋ณด์ฌ์ฃผ๋ ํจ์
}
2. random ๊ฐ ๋๋ ค์ฃผ๋ ํจ์
#include <stdlib.h>
#include <time.h>
void now_time(){
srand(time(NULL));
}
int random_num(){
int a;
a = rand()%45+1;
return a;
}
3. ์ค๊ฐํ์ผ ๋ง๋ค๊ธฐ
4. ๊ธฐ๋ณธ ๊ณจ๊ฒฉ ๋ง๋ค๊ธฐ(ํฐ ํ)
5. ์ด์ ๋ธ๋ฆฌ ์ฝ๋ (ํ์ค๋ง ๋ฝ๋ ์ฝ๋) -> ๋ก๋ 1์ค
; 32bit mode
%include "io.inc"
LOTTO_COUNT equ 6
;equ ์ง์์ด๋ ์ฌ๋ณผ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค. ์ฌ๋ณผ(symbol)์ด๋ ์ด์
๋ธ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ์ฌ์ฉ๋๋ ์์๋ฅผ ๋งํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
;symbol equ value ํ ๋ฒ ์ ์๋ ์ฌ๋ณผ์ ๊ฐ์ ์ ๋๋ก ์ฌ์ ์ ๋ ์ ์๋ค.
section .text
global CMAIN
extern _getnumber ;c์ธ์ด์์ ๊ฐ์ ธ์ค๋ํจ์ 1~45 ์ฌ์ด ์ ๋ฆฌํด
extern _inimylib ; ๋๋ค์๋๊ฐ ์ด๊ธฐํ ํด์ฃผ๋ ํจ์
;============================================์๋ ๊ฐ๊ฐ์๋ ์ด์
ํจ์๊ฐ ๋ค์ด๊ฐ ๊ฒ์
;input:
;return:
CMAIN:
call _inimylib ; c์ธ์ด๋ก ์ง๋์ ์ฝ๋ ๋ถ๋ฌ์ค๊ธฐ, ๋๋ค์๋๊ฐ ์ด๊ธฐํ
;mov ecx,0 ; ecx๋ ์ง์คํฐ ์ด๊ธฐํ
;ecx๋ ๋ณดํต ์นด์ดํฐ ๋ ์ง์คํฐ์. ์ฃผ๋ก ๋ฐ๋ณต ๋ช
๋ น์ด ์ฌ์ฉ์ ๋ฐ๋ณต ์นด์ดํฐ๋ก ์ฌ์ฉ๋๋ ๋ ์ง์คํฐ๋ก, ECX ๋ ์ง์คํฐ์ ๋ฐ๋ณตํ ํ์๋ฅผ ์ง์ ํ๊ณ , ๋ฐ๋ณต ์์
์ ์ํ
mov ecx,0
cmain_loop1:
cmp ecx, LOTTO_COUNT ;๊ฐ์ ๋น๊ต ํจ.
jge cmain_end ; ecx์ ๊ฐ์ด ๋ ํฌ๋ฉด cmain ํจ์ ์ข
๋ฃ.
push ecx
call _getnumber ;45 ์ฌ์ด ์ ๋ฆฌํด๋ฐ์
mov [a],eax
;์ฌ๊ธฐ์ eax๋ c์ฝ๋์์ ๋ฐ์์จ a,์ฆ ๋๋ค์ผ๋ก ๋ฝํ ํ๊ฐ์ ๊ฐ์
pop ecx
push ecx
mov ebx,ecx
call CheckSame ; CheckSame์ฆ ๋์ผํ ๊ฐ์ด ๋ค์ด๊ฐ๋์ง ๋น๊ตํ๋ ํจ์ ๋ถ๋ฌ์ค๊ธฐ
pop ecx
cmp eax,1
je checksame_loop1 ;je=๊ฐ์ผ๋ฉด ์ ํ (์ฐธ์ผ์ ์ฆ ๊ฐ์ด ๊ฐ์ผ๋ฉด)
mov ebx, [a]
mov [data+ecx*4],ebx ;ebx๋ฅผ ๋ค์ ๋ฐฐ์ด์ ๋ฃ๋๋ค.
inc ecx;๊ฐ์ฆ๊ฐ +1
jmp cmain_loop1;๋ค์ ๋ฃจํ๋๊ธฐ (๋ฐ๋ณต๋ฌธ)
cmain_end:
call ShowData ;์ซ์ 6๊ฐ ์ฆ > ๋๋คํ 6๊ฐ ๋ก๋ ๊ฐ ์ถ๋ ฅ์์ผ ๋ณด์ฌ์ค
ret
;=============================================
;input: eax(a), ebx(size)
;return: eax(0: not same, 1: find same)
inc ecx
CheckSame:
mov edx,0 ;edx ์ด๊ธฐํ
mov ecx,0 ;ecx ์ด๊ธฐํ
checksame_loop1:
cmp ecx,ebx ;๊ฐ์ ๋น๊ต
jge checksame_end
cmp eax, [data+ecx*4];*4๋ฅผ ํด์ฃผ๋ ์ด์ ๋ ๋ค์ ๋ฐฐ์ด์ ์ฐพ์์ ๊ฐ๊ธฐ ์ํจ์(4byte์ง๋ฆฌ), ๋ค์์นธ ์ฃผ์ ์์์ ์ฐพ์๊ฐ.
jne checksame_endif ;!= ์ ํํด๋ผ!
mov edx,1
jmp checksame_end
checksame_endif:
inc ecx ; 1์ฆ๊ฐ, ๋ค์๊ฐ start
jmp checksame_loop1
NEWLINE
checksame_end:
mov eax, edx
ret
;===================================================================
;input:
;return:
ShowData:
NEWLINE
PRINT_STRING msg1
mov ecx,0 ;๋ ์ง์คํฐ ์ด๊ธฐํ
showdata_loop1: ;label start
cmp ecx,LOTTO_COUNT ; ๊ฐ ๋น๊ต
jge show_end;์์ ๊ฐ์ด ํฌ๊ฑฐ๋,๊ฐ๋ค๋ฉด >= show_end๋ก ์ด๋
push ecx;์คํ์ ๋ฃ์ด์ค
PRINT_DEC 4, [data + ecx*4] ;์ถ๋ ฅ
pop ecx ; ๊ฐ ๋นผ์ค
cmp ecx, LOTTO_COUNT -1 ;ecx์ ๊ฐ ๋น๊ต
jge show_next
push ecx
PRINT_STRING msg2 ;๋ฌธ์์ด ์ถ๋ ฅ
pop ecx ;push๋ก ์คํ์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด pop์ ์ด์ฉํด์ ๋ฐ๋์ ๋น์์ค์ผํจ.
show_next:
inc ecx ; inc = ํผ์ฐ์ฐ์์ 1์ ๋ํ๋ค.
jmp showdata_loop1 ;๋ฌด์กฐ๊ฑด jmpํ๋ ๋ช
๋ น์ด/ํผ์ฐ์ฐ์์ ์์น๋ก ์คํ ํ๋ฆ์ด ๋ณ๊ฒฝ๋๋ค. ํผ์ฐ์ฐ์๊ฐ ๊ฐ๋ฆฌํค๋ ์ฝ๋๋ก ์ ํ ๋ฐ์ด์ ์คํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
show_end:
ret
section .data ;์ด๊ธฐ๊ฐ,๋ฉ๋ชจ๋ฆฌ ์ฉ๋ ํ๋ณด
msg1 db "Lotto : ",0
msg2 db ",",0
section .bss;๋ฉ๋ชจ๋ฆฌ ์ฉ๋,๊ฐฏ์ ํ๋ณด
a resd 1 ;4byte
data resd 6
num resw 1;
num2 resw 1;
์ฃผ์์ฒ๋ฆฌ๋ ํจ๊ป ํด๋์์ต๋๋ค. (์ฝ๋๋ธ๋ญ ์ข ๋ฅ์ asm ์ด ์์ด์ ๋ค๋ฅธ๊ฑธ๋ก ํด๋์ด, notepad++์ด๋, ๋ค๋ฅธ ์๋ํฐ๋ก ์คํ์์ผ ์ฃผ์ธ์.
5. ์ด์ ๋ธ๋ฆฌ ์ฝ๋ (์ ๋ ฅ ๋ฐ๋ ๋งํผ ๋ก๋ ์ถ๋ ฅ)
%include "io.inc"
COUNT equ 6
section .data
count dd 0
section .bss
paper resd 1
lotto resd 6
num resd 1
section .text
global CMAIN
extern _now_time
extern _random_num
extern _printf
CMAIN:
call _now_time
NEWLINE
PRINT_STRING "๋ช์ฅ์ ๊ตฌ๋งคํ์๊ฒ ์ต๋๊น? : "
GET_DEC 4, [paper]
NEWLINE
PRINT_STRING "=============================="
NEWLINE
gasu:
mov ecx, [paper]
cmp [count], ecx
jge real_Bye
mov ecx, 0
Random:
cmp ecx, COUNT ;6๊ฐ ์ซ์ ๋ฝ์๋ด๊ธฐ ์ํ ๊ฒ
je Bye
push ecx
call _random_num
mov [num], eax
pop ecx
push ecx
mov ebx, ecx
call Same
pop ecx
cmp eax, 1
je Random
mov ebx,[num]
mov [lotto+ecx*4], ebx
inc ecx
jmp Random
Bye:
call Show
mov ecx, [count]
inc ecx
mov [count], ecx
jmp gasu
real_Bye:
ret
;------------------------------------
Same:
mov edx,0
mov ecx,0
checksame_loop1:
cmp ecx, ebx
je Ok_check
cmp eax, [lotto+ecx*4]
jne check
mov edx,1
jmp Ok_check
check:
inc ecx
jmp checksame_loop1
Ok_check:
mov eax, edx
ret
;------------------------------------
Show:
call _printf
PRINT_STRING "lotto : %d"
mov ecx, 0
number:
cmp ecx, COUNT
jge Print_end
push ecx
PRINT_DEC 4, [lotto + ecx*4]
pop ecx
cmp ecx, COUNT -1
jge next
push ecx
PRINT_STRING ", "
pop ecx
next:
inc ecx
jmp number
Print_end:
NEWLINE
ret
6. ์ค๊ฐํ์ผ ๋ง๋ค๊ณ ํฉ์น๊ธฐ
ex)
a.asm ํ์ผ๊ณผ, b.c ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ์ ํ๋ฉด
1. nasm -g -f win32 a.asm -o a.obj --> ํ์ฌ ์ค๊ฐ ํ์ผ๋ง๋ค๊ธฐ <a.obj>
2. gcc -c b.c --> .oํ์ผ ์์ฑ <b.o>
3. gcc a.obj macro.c b.o -g -o lotto -m32 -->exeํ์ผ ๋ง๋ค๊ธฐ
์ด๋ฐ์์ผ๋ก ํฉ์ณ์ฃผ๋ฉด ๋๋ค.
7. ๊ฒฐ๊ณผ
'Languages > Assembly' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์ ๋ธ๋ฌ, gccํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ (0) | 2020.09.10 |
---|---|
[์ด์ ๋ธ๋ฆฌ์ด] ์ฌ์น์ฐ์ฐ ๊ณ์ฐ๊ธฐ (2) | 2020.04.20 |
[์ด์ ๋ธ๋ฆฌ์ด] ๋ ์ง์คํฐ (1) | 2020.04.20 |
[์ด์ ๋ธ๋ฆฌ์ด] ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ๋ชจ์ต (2) | 2020.04.11 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค