본문으로 바로가기

[프로그래밍] 어셈블리어

category 프로그래밍 2021. 4. 15. 00:36
728x90
반응형

어셈블리어는 저급 언어로서, 기계어와 일대일 대응이 됩니다.

기계어는 0과 1로 구성되어 있습니다.

컴퓨터 기준으로는 기계어를 바로 읽고 해석할 수 있지만, 사람이 보기에는 힘듭니다.

그렇기 때문에 기계어를 어셈블리어로 대응시킵니다.

어셈블리어는 사람이 이해가기 쉽습니다.

저희가 사용하는 고급언어의 경우, 컴파일 하는데 시간이 오래걸리지만, 저급 언어는 아무래도 기계어에 가깝기 때문에 속도가 굉장히 빠릅니다.

이러한 단점이 있지만, 저급 언어의 경우, 배우기가 어렵고, 유지보수 측면에서 힘들기 때문에 요즘은 잘 사용하지 않습니다.

임베디드, 커널, 보안 등에서는 어셈블리어가 필수라고 봐야 되고, 디버깅 측면에서도 활용도가 높습니다.

또한, 컴퓨터의 구조를 더 자세히 알 수 있기 때문에 어느 정도의 지식은 있어야 한단계 발전할 수 있습니다.

그럼 어셈블리어가 어떻게 생겼는지 알아보겠습니다.

아래의 c언어 소스코드를 어셈블리어로 변환해보겠습니다.

===================================================


]# vim test.c

#include <stdio.h>

int main()
{
        int num = 10;
        printf("num : %d\n", num);
        return 0;
}

===================================================

]# gcc -S -o test.s test.c


        .file   "test.c"
        .section        .rodata
.LC0:
        .string "num : %d\n"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $16, %rsp
        movl    $10, -4(%rbp)
        movl    -4(%rbp), %eax
        movl    %eax, %esi
        movl    $.LC0, %edi
        movl    $0, %eax
        call    printf
        movl    $0, %eax
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-36)"
        .section        .note.GNU-stack,"",@progbits

 

===================================================

 

어셈블리어는 이런식으로 되어 있습니다.

오늘 포스팅은 여기까지 하겠습니다.

728x90
반응형

'프로그래밍' 카테고리의 다른 글

[프로그래밍] BLOB 이란?  (0) 2023.09.20
[프로그래밍] 코딩 스타일  (0) 2021.04.18