인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박종호님의 프로필 이미지
박종호

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

s302_비교와 분기 명령어

저 지금 전혀 맥을 못 잡고 있는 것 같습니다.

작성

·

257

1

main.c 에 있는 명령어들은 무엇이고

libs.s 에 있는 명령어들은 무엇인가요??

 

둘은 다른 언어인가요 ??

답변 1

0

홍영기님의 프로필 이미지
홍영기
지식공유자

박종호님!

본 강의는 선행학습으로 C언어에 대한 기초적인 내용을 필요로 합니다. 만일 C언어에 대한 지식이 부족하다면 본 수업 내용이 혹 어렵게 느껴지실 수도 있습니다. 한편 어셈블리 언어에 대해 이 교육에서는 처음 배우는 학습자를 대상으로 교육하고 있기 때문에 지금 당장은 일부 내용이 어렵게 느껴지실 지 몰라도, 본 강의를 한 바퀴 시청하신 후 반복 학습을 통하여 차츰 어려운 부분도 극복 가능할 것으로 기대합니다.

main.c 는 C언어와 약간의 인라인 어셈블리 언어를 이용하여 작성되었습니다.

libs.s 는 어셈블리 언어로 코딩되어 있습니다.

박종호님이 원하실 경우 줌이나 웹엑스와 같은 화상채팅 앱을 이용하여 수업 내용에 대하여 질문하시고 답변을 들어보실 수도 있습니다. 필요하시면 개인적으로 메일(guileschool@gmail.com)로 요청해주세요. 서로 시간 약속하여 질답 가능합니다.

 

 

박종호님의 프로필 이미지
박종호
질문자

신경써주셔서 감사합니다.

아직 개념조차 제대로 잡히지 않아서, 실시간으로 알려주신다 한들 제가 충분히 흡수할 역량이 되지 못할 것 같습니다. 후에, 기회가 되면 도움 꼭 받아보고 싶습니다.

지금 말씀해주신 내용으로 이해했을 때, 

c언어로 구성된 main.c의 구문 안에서

result = max(a,b);

어셈블리 명령어인 위 max의 기능을 구현하기 위해

libs.s 파일로 어셈블리 명령어를 채워넣는 과정인건가요 ???

홍영기님의 프로필 이미지
홍영기
지식공유자

CPU 를 제어하기 위하여 머신코드가 있으며, 이 머신 코드는 0110010001010000 와 같은 이진 부호의 형식으로 되어 있습니다.

이는 사람이 이해하기 어려운 것이기 때문에 어셈블리 언어를 이용하여 코딩합니다. 어셈블리 언어는 mov r0, #1 와 같은 예시처럼 되어 있어 머신 코드보다는 이해하기가 상대적으로 수월하겠죠.

어셈블리 언어로 작성된 코드는 어셈블을 하여 결국 머신 코드로 변환시켜야 CPU 가 이를 인식할 수 있고 실행할 수 있습니다.

그럼 C언어는 이들(머신코드, 어셈블리어)과 어떤 차이가 있을까요? 

C언어는 머신코드나 어셈블리 언어보다 상위 수준의 고급언어이기 때문에 코드를 작성한 이후 원하는CPU용으로 컴파일만 하면 실행해 볼 수 있는 프로그램이 만들어지는 엄청난? 장점을 지니고 있죠.

하지만,  어셈블리어는 C언어가 갖지 못한 장점이 있습니다. CPU 아키텍쳐나 제어하려는 하드웨어에 대한 정확한 이해가 따라줘야 동작 가능한 프로그램을 만들어 낼 수 있습니다. 이는 보기에 따라서는 단점이 될 수도 있긴 합니다. ㅜㅠ

C 컴파일러는 C 언어로 작성된 코드를 최종적인 머신 코드로 변화하는 중간 과정에서 어셈블리 코드를 만들어 냅니다. 이를 응용하면 임의의 함수를 C 언어 방식이 아닌 어셈블리 언어 방식으로 작성하여 끼워넣을 수 있겠죠. 

위에서 말씀하신 max(a,b) 의 예가 바로 그 것으로 보시면 됩니다

libs.s 파일로 어셈블리 명령어를 채워넣는 과정인건가요 ??? 

=> 네, 맞습니다 :)

박종호님의 프로필 이미지
박종호
질문자

오 너무 잘 설명해주셔서 바로 이해했습니다. 감사합니다 !

박종호님의 프로필 이미지
박종호

작성한 질문수

질문하기