어셈블리어... 공부할 가치가 없는 것일까요?

phaze의 이미지

이제 정보통신학부 1학년생이고 C와 C++, WinAPI를 이용해 간단한 프로그램은 레퍼런스 참조해가며 짤 수 있는 수준이 되었습니다.
C, C++ 를 깊이있게 공부하며 컴퓨터를 더 잘 이해하기 위해 어셈블리어를 공부하고 싶어서 이야기하니 주위엔 말리는 사람 밖에 없네요.
선배들도 그렇고 친구들도 그렇구요.
어셈블리어... 공부할 가치가 없는 것일까요?
무언가 깊은 곳으로 들어가는 듯한 느낌에 두근두근대며 공부하려 했는데...
왠지 맥 빠지는군요.
여러 분들의 생각을 듣고 싶습니다. :)
잘 부탁드리겠습니다.

dolsemix의 이미지

제경우엔 어셈블리 했던 경험이 나중에 상당한 도움이 되던데요... 임베디스 시스템이라든지.. 커널 프로그래밍이라든지.....
시스템 디펜던스한 분야에선 C/C++ 언어를 사용하더라도 어셈블리를 알고 있다면 그 응용력에는 분명히 차이가 있더라구요..

담배 고만 펴야겠다...

Together의 이미지

어쎔블리 배워두면 좋습니다.

로우레벨 프로그래밍에 관한 전반전인 지식을 배울수 있습니다.

커널에 대해서 자세히 이해하려면 어쎔블리는 필수죠.

- 험한 세계에서 자주국방 없는 경제력은 경비없는 은행이다. -

지아의 이미지

다른 사람이 뭐라고 하든 본인이 원하면 하면 되지요..
임베디드나 O/S 만들 때는 어셈블리어를 알아야 하기 때문에 전혀 필요가 없는건 아니라고 생각합니다.

어짜피 프로그래밍 언어는 도구일 뿐이니까 정말 하고싶은것이 무엇인지 정하고 거기에 필요한 지식을 익히는 것이 순서일듯 싶습니다. :)

#kill -9 world

aeronova의 이미지

음.. 흥미가 있으시고 재미가 있을 것 같으면 공부하시지요.
아니면 나중에 필요가 느껴지실 때, 그 때 해도 충분하지 않을까요?

It's better to burn out than to fade away. -- Kurt Cobain.

wooix의 이미지

컴공출신인데 지금 scope찍어가며 register와 capacitor랑 싸우며 programming을 하는 처지이다 보니 저의 입장에서는 어셈을 모르고 프로그램을 짠다는 것 자체가 이해가 되지 않는군요.

어셈을 알아야 system architecture를 이해하고 system architecture를 이해하고 programming을 할때 제대로된 engineer가 될수 있지 않을까 하는 생각을 해봅니다.

어셈은 무지 쉽습니다. 하나씩 옮겨주는 거니까요 3개월이면 간단한 테트리스 정도는 하루안에 짤수 있을겁니다.

도전하시고 좀더 재밌는 세상으로 가시길 바랍니다. ^^a

평온하다~

saxboy의 이미지

대체 어떤 사람들이 주위에서 말린다는거죠? 저는 말리는 사람들이 이해가 되질 않네요.
시스템 프로그램을 해보고 싶으시다면 어셈블리는 꼭 배우셔야지요. 뭐, 시스템 프로그램에 별 흥미가 없다면 시간 낭비가 될지도 모르겠습니다만, C와 C++을 사용하신다면 어셈블리를 배워서 손해볼 일은 아마 없을것 같군요. :-)

redbaron의 이미지

paper wrote:
이제 정보통신학부 1학년생이고 C와 C++, WinAPI를 이용해 간단한 프로그램은 레퍼런스 참조해가며 짤 수 있는 수준이 되었습니다.
C, C++ 를 깊이있게 공부하며 컴퓨터를 더 잘 이해하기 위해 어셈블리어를 공부하고 싶어서 이야기하니 주위엔 말리는 사람 밖에 없네요.
선배들도 그렇고 친구들도 그렇구요.
어셈블리어... 공부할 가치가 없는 것일까요?
무언가 깊은 곳으로 들어가는 듯한 느낌에 두근두근대며 공부하려 했는데...
왠지 맥 빠지는군요.
여러 분들의 생각을 듣고 싶습니다. :)
잘 부탁드리겠습니다.

조금 심한 말 인지 모르지만 말리는 사람의 생각은 이러 한 것이 아닐까요?

1. 배우기 귀찮고
2. 잘할 자신도 없고
3. 재미도 없어 보이고
4. 하면 왠지 혼자 해야 할 꺼 같고
5. 돈이 될지 자신도 없고
6. 편하게 돈 버는거 같지도 않고

그런 이유로...하는게 아닐까요? 어셈블리어(특정플랫폼이라기보다 어셈블리 언어에 대한 개념자체..)를 익혀두시면 두고두고 도움 되실꺼라고 생각합니다.

뭐 학교에서 정보통신 공학이라고..미분방정식쪽으로만 죽어라 시키고 회로테스트만 죽어라 하면서 VHDL만 그린다 해도 그것과 무관하게 어셈블리어는 분명 쓸모가 있습니다.

ㅡ,.ㅡ;;의 이미지

시간날때 어셈공부해두시면 좋죠..

"배워서 남주나.." ^^;; 란 말있자나요..


----------------------------------------------------------------------------

anfl의 이미지

어셈블리를 공부한다는데 뜯어 말린 사람들이 어떤 사람들인지 궁금합니다.
물론 필요 없을수도 있겠죠.
하지만 적어도 1+1이 왜 2가 되는지 정도는 알고 프로그래밍 해야되지 않을까요?


phaze의 이미지

생각보다 많은 분들이 아낌없는 조언을 해주셨네요.
감사드립니다!
아직 1학년생이지만 관심있는 분야는 임베디드 쪽입니다.
그래서 어셈블리가 더더욱 필요하지 않을까? 라고 생각하고 있었는데요.
역시 주위에서 누가 뭐라던 열심히 해야겠습니다.

RedBaron님 말씀처럼 제일 많이 들은게
'어렵게 공부했지만 돈이 될지 알 수가 없다 그 시간에 C, C++, 윈도우 프로그래밍이나 더 공부해라' 였습니다. :cry:

열심히 하겠습니다! :D

nickcave의 이미지

회사에서 지지난 프로젝트는 어셈으로 하고 지난 프로젝트는 씨언어로 했었습니다. 어셈으로 하면 (저의 경우 임베디드 관련인 관계로) 아키텍쳐 이해하는데 도움이 많이 되고요 직접 메모리 관리를 해야 되니까 나중에는 디버깅 하기도 참 편하더군요. 지난 프로젝트는 씨언어로 진행했는데 디버거 장비가 시원치 않아서인지(사실 실력도 없습니다.--;) 정말 속이 터지는 경우가 종종 발생하더군요. 어셈이 처음 다가가기엔 좀 어렵워도(어렵기 보단 좀 귀찮아도) 배워두면 정말 좋습니다. 윗분들 말씀대로 내가 만지고 있는 컴퓨터가 어떻게 돌아가고 내가 어디에다 변수를 잡고 있고 스택이 꼬이는지 않꼬이는지도 알수있고 매력적인 부분이 많습니다 . ^^

부모님께 효도합시다.

gurugio의 이미지

asmlove 운영자로서 비슷한 질문을 많이 듣습니다.

주위에서 말리시는 분들은

대부분 본인들이 잘 모르면서 해보지도 않았으면서

그저 누군가 새로운 것을 한다니까 싫어하는 것인 경우가 많습니다.

저도 어셈블리를 처음 배울때 같은 소리를 들었구요

어셈블리는 즐거운 도구이자 강을 건너기 위한 좋은 조각배입니다.

서지훈의 이미지

어셈블리어 접할 기회가 적고 처음 배우기가 힘들어서 그렇지...
이바닥 영영 떠날거 아니면 배워두면...
약이되고, 꿀이되고, 절친한 스승이 될겁니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

jachin의 이미지

어셈블리어를 못하면 안되는 처지라, -_-;;;

저는 열심히 했답니다. ( _ _)a 긁적긁적...

한가지 조금 더 레벨업 하고 싶은 욕구는...

어셈블러 코드(정확히는 오브젝트 코드)의 Optimization을 하고 싶은데..

( ' ')a C 컴파일러의 우수성은 인간의 머리에서 나온것이라, 더 나은 오브젝트 파일로 변경하기가 어렵더군요... ( _ _)a

OS 환경을 고려 안하면 com 확장자 파일이랑 같아져버리고... ( _ _)a 긁적긁적...

ryuji의 이미지

anfl wrote:
하지만 적어도 1+1이 왜 2가 되는지 정도는 알고 프로그래밍 해야되지 않을까요?

이 말이면 다 설명이 되지 않을까요..?

저도 지금 어셈을 공부하고는 있지만 아직 실력이 없어 맨 앞장만 맨들맨들하게 하고 있는 중입니다만. 적어도 프로그램을 하려면 자기 프로그램이 어떻게 돌아가는지는 알아야 하지 않을까요..?

wooix wrote:
어셈을 알아야 system architecture를 이해하고 system architecture를 이해하고 programming을 할때 제대로된 engineer가 될수 있지 않을까 하는 생각을 해봅니다.

子曰 知之者는 不如好之者오 好之者는 不如樂之者니라. - 논어 6편 옹야(雍也) 18번째 귀절

앙마의 이미지

학부 과정때 기초 약간 배운거 빼곤 접한적이 없네요.
이 기회에 배워보고 싶습니다.
기초부터 고급까지 차근차근 배울 수 있는 서적이나 사이트 추천 부탁드립니다.

autography

인간에게는 자신의 운명을 거부할 권리가 있다.

하니의 이미지

어셈블리어.

공부해 두시면 "피가되고 살이 된다"고 말씀드리고 싶습니다.

"정보통신학부"라고 하시니. 제 후배일지도 모르겠다는 생각이 드네요. :-)

다른 분들이 다 좋은 말씀해 주셨듯, 하시고 싶은 공부 열심히 하셨으면 좋겠습니다.

어떤 사람은 어셈블러는 특정 프로세서/시스템마다 다 다르니깐. 새로운 프로세서를 할 때마다 공부해야 하고, 고생만 한다. 라고 합니다만,

일단 하나만 확실히 해두면 다른 프로세서는 쉽게 배울(공부할) 수 있습니다.

low-level language 이왕 하실거면 "디지탈 공학I" 정도는 배워보시는 것도 좋을 것 같네요.

[니 칼은 니가 갈아라]

Vadis의 이미지

어셈블리어 배우고 싶어도 학과과정이 없기 때문에 못 듣고 있습니다.이유는 간단히 말하자면,

듣는 학생이 없기 때문에 개설 하지 않고 어셈블리어를 가르킬만한 교수가 없기때문이기도 하죠.

정말 이럴 때는 좋은 대학교를 가야한다는 생각이 되는군요.제 생각은 배울 수 있다면 반드시

배우는게 좋을 듯 합니다.나중에 아키텍처로 커가기 위해선 필수 과정인 듯 하네요.

저는 프로그래머의 꿈을 접고, 일단 네트워크만 앞으로 하기로 결심을 했습니다만 기회가 된다면,

어셈블리어는 반드시 배우고 싶군요.부럽네요.그런 기회가 있어서.......

좋은 날 즐거운 날....

youlsa의 이미지

어셈블리어와 원보드 컴퓨터 제작 같은 것들은 조금이라도 해본 사람과 안해본 사람이 차이가 크게 난다고 봅니다. 소프트웨어나 하드웨어 엔지니어가 되려는 사람이라면 꼭 경험해야 한다고 생각합니다.

물론, 웹 프로그래밍을 주로 한다거나 항상 뒤를 받쳐주는 단단한 것들(OS, WAS등등)이 있는 상황에서만 작업을 한다면 필요 없어 보일수도 있겠습니다만... 그래도 기본은 기본입니다.

=-=-=-=-=-=-=-=-=
http://youlsa.com

bugiii의 이미지

좀 더 한다면 고급언어 소스가 어떻게 어셈블리로 표현되는지를 실시간으로 머리속에서 변환할 수 있다면 더욱 좋겠습니다. :wink:

pynoos의 이미지

$ gcc -g precious.c -o myprecious
$ strip myprecious
$ ./myprecious
Segment fault (core dumped)

$ gdb ./myprecious core
(gdb) bt
(gdb) disass precious_func

벗겨진 마이 프레셔스의 시체 부검을 위해서는 어셈블리어를 알지 못하고 어찌 할 수 있겠습니까...

envia의 이미지

paper wrote:
아직 1학년생이지만 관심있는 분야는 임베디드 쪽입니다.

임베디드라면 필수가 아닐까... 생각해 봅니다.

(인공지능 같은 것에 관심있으시다면 말릴지도 모르겠지만요.)

----

It is essential, if man is not to be compelled to have recourse, as a last resort, to rebellion against tyranny and oppression, that human rights should be protected by the rule of law.
[Universal Declaration of Human Rights]

sDH8988L의 이미지

흠...

Assembly의 필요성에 대해서는 더 이상 말씀드리지 않겠습니다... 위에서 많은 분들이 말씀하신 그대로 입니다... Assembly는 고급 Programming을 위해서 꼭 필요한 요소죠...

그렇지만 한 가지 고려해야 할 부분은 나이와 경험입니다...

지금 paper님은 1학년이라고 하셨죠??? 그렇다면, 대학생활을 한 지 몇 개월 안되시는 분이겠네요...

뭐... 제가 paper님의 그 동안 경력과 실력은 자세히 알 지 못합니다... 그래서 일반 컴공 1학년과 같다고 생각하고 말씀 드리겠습니다...

제 생각에는 1학년 때에는 C나 C++에 전념하는 것이 좋다고 봅니다...

물론, 개인적인 관심으로 천천히 공부하시는 거야 무슨 상관이겠냐마는 본격적으로 공부하시기에는 1학년은 좀 빠르지 않나 싶습니다...

요는 C나 여타 기본 Language에 대한 좀 더 많은 지식을 쌓고 Assembly를 하는 것이 더 좋겠다라는 것죠...

사실, 저는 Assembly라는 것을 먼저 시작한 것이 아니고 CPU의 구조쪽 공부부터 먼저 했었거든요... 그렇다 보니 CPU의 기본 구조를 잘 알지 못하면서 Assembly를 공부하는 것에는 좀 거부감이 있습니다...
Assembly에서 자주 사용하는 Register들과 Interrupt, Context Switching 등등을 제대로 이해하기 위해서는 일단, CPU의 기본 구조를 공부한느 것이 선행과제라고 봅니다...

CPU를 공부하는 것은 1학년으로서는 조금 빠르지 않을까라고 생각해 봅니다...

어떤 공부를 언제 시작하는 것이 좋느냐에 대한 정답은 없습니다만, 배경이 되는 다른 부분들의 실력이 어느 정도 무르익었을 때 배우는 게 좋다고 봅니다...

그런 배경이 되는 부분에 C와 같은 기본 언어와 CPU의 기본 구조와 같은 것들이 들어갈 수 있을 겁니다... 그런 배경에 대한 지식이 있으시다면, 없을 때보다 휠씬 빨리, 휠씬 깊게, 휠씬 정확하게 Assembly를 하실 수 있으리라고 봅니다...

지금 당장 INTEL x86 Manual을 읽어보시면 알 수 있을 겁니다... Manual에 모르는 단어들이 많다면, 아직은 Assembly를 공부하기에는 약간은 빠른 것이라고 생각하시면 될 듯합니다...

haze11의 이미지

어셈블리어.. 프로그래밍하는데 있어 알면 도움이 많이 됩니다.

저같은 경우 firmware를 만들때 C로 했었는데.

C 문법으로는 이상이 없었는데 컴파일시 출력되는 asm 코드를 보니

분명한 문제가 있더군요. 그래서 C 코드를 변경하니 잘 됐었던 기억이 있습니다.

위에서 pynoos님께서 쓰신 글처럼 디버깅할 때 좀더 쉽게 할 수 있지 않을까요?

그리고 레지스터를 하나하나 건들여 보는것이 프로세서의 동작을 이해하는데 좀더 도움이 되리라 봅니다. :)

익명 사용자의 이미지

www.ioacademy.co.kr에 가보세요~

kippler의 이미지

어셈으로 전체 프로그램 짤 정도로 파지 마시고

그냥 인라인 어셈 간단히 써볼 정도만 공부해 두세요.

======== 서명 =======
주거지는 www.indidev.net 입니다.

seannz의 이미지

저는 지금 Assembly Language Step-by-Step by Jeff Duntemann 읽고 있는데.. 쉽게 conversational한 스타일로 잘 지은것 같습니다.. 한번 찾아보세요.

emptynote의 이미지

지극히 개인적이고 주관적인 생각이지만요.

다른것은 모르겠지만 c언어의 포인트 개념을 익힐때 만큼은

어셈블리와 함께 공부하는것이 도움이 될듯합니다.

당장 깊이 공부해야 한다 안해야 한다는

제 자신이 내공이 부족해서 말씀드리기가 어렵네요.

jw8704의 이미지

님 마음대로 하세요.
자신이 하는일에 확신을 갖고 최선을 다하는것이 중요한것입니다.
단 남에게 피해주지않고 , 후회하지않게!!

카二리의 이미지

시스템을 공부하기 위한 도구로 배운다고 생각 하시면 열심히 배우세요.
언어 자체가 궁금해서 배운다면 간단히만 배우세요.
잘나 보이고 싶어서 배운다면 배우지 마세요.

새 생각 :)

creativeidler의 이미지

동의 한 표.

JuEUS-U의 이미지

딱히 '공부'라고 부를만큼 붙잡는건
특정 아키텍쳐를 다룰 때에나 하는거지,
어셈블리를 자세하게 알 필요는 없습니다.
그렇다고 딱히 깊이가 있는 것도 아니구요.
특히나 x86 아키텍쳐는 굉장히 더럽기 때문에... - _-)

magingax의 이미지

길게 쓸필요도 없이. 그냥 공부하세요..열심히.
당장 써먹을때가 없다고요?
SSE 나 향후 나올 CPU의 고급기능들 (intel 은 비디오관련된 뭔가 기능을 넣는다고 했는데..기억이)
을 쓰려면. 어셈으로 하는수밖에 없습니다.
저도 이제와서 다시 어셈책을 뒤적거리고 있습니다.

LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr

onion의 이미지

그냥 하시는게 낫습니다...

저는 어린나이에 공부를 게을리했다가..
지금 다시 공부할려고 하는걸요...T.T

-----새벽녘의 흡혈양파-----

hwatk의 이미지

갑자기 진심어린 댓글이 달리는건 어떻게 된일인지;;
이 글을 쓰신 분은 벌써 고수가 되어 있을수도~

asiawide의 이미지

알면 좋고 몰라도 크게 상관 없습니다. 어셈블리 잘한다고 연봉을 엄청 더 받는다거나 그런 일은 (있을 수도 있지만.. -.-) 잘 없고요. 오히려 못하는 사람들이 당당히 '나는 모르겠으니 아는 니가 봐라!'라는 경우가 생기기도 합니다.

x86 어셈블리를 공부해서 간단한 프로그램 정도 짜본 다음에 visual studio debug 모드에서 assembly 나오게 해놓고 대충이나마 이렇게 저렇게 대응이 되는구나 저도 해두시면 실무에서도 크게 무리 없습니다. 물론 이정도 못하는 사람들도 매우 많습니다. -.-