본문 바로가기

22년 2학기 학교공부

0929 시프

목차

    728x90
    반응형
    SMALL

    어셈블리어 : 기계어에 1:1 대응관계를 갖는 명령어로 이루어진 low-level 프로그래밍 언어

     

    C 언어로 프로그램을 작성할 때는 프로그램이 어떻게 내부적으로 구현되는지 알기 어렵다

    어셈블리어로 프로그램을 작성할 때는 프로그래머는 프로그램이 어떻게 메모리를 이용하는지, 어떤 명령어를 이용하는지를 정확히 표시해야 한다. 물론 고급 언어로 프로그램으로 프로그램할 때가 대개의 경우 보다 안전하고, 편리하다

    -> 코드 번역을 해줌 어셈블리어로 잘못 짰다가는 컴퓨터가 죽을 수도 있음

    어셈블리어로 코딩한다는건 '컴파일러'를 쓰지 않는다는 것.

    게다가 최근의 Optimizing compiler들은 웬만한 전문 어셈블리 프로그래머가 짠 프로그램보다 더 훌륭한 어셈블리 프로그램을 생성해 준다.

     

     

    고급언어의 특성

    - 대형 프로그램을 개발하기에 편리한 구조체, 문법을 제공

    - 이식성이 높음 High Portability

    - 비효율적 실행파일이 생성될 가능성이 높음

    - 대형 실용 응용프로그램 개발 시에 이용됨

     

     

    어셈블리어의 특성

    - 대형 프로그램을 개발하기에 불편함

    - 속도가 중요한 응용프로그램 또는 하드웨어를 직접제어할 필요가 있는 경우에 이용

    - 임베디드 시스템의 초기 코드 개발시에 이용

    - 플랫폼마다 새롭게 작성되어야 함. 따라서 이식성이 매우 낮음

    - 그러나, 많은 간접적인 응용이 있음 (?)

     

     

    x86 프로세서

    특징 : 진화형태의 설계 Evolutionary Design

    - 1978년 8086CPU 으로부터 시작 - 16비트 IBM PC

    - 점차 새로운 기능을 추가

    - 그러나, 예전의 기능들을 그대로 유지 (사용하지 않을지라도. 왜?)

     

    Complex Instruction Set Computer (CISC)

    - 다양한 명령어 형태의 다양한 명령어를 가짐

    - RISC와 비슷한 성능을 내기 어려움

    - 그러나, Intel이 해냈다!

     

    8086 : 1978년 / 트랜지스터 29K

    16-bit processor. IBM PC & DOS 사용 1MB 주소공간 address space. DOS 는 640K만을 허용

    80286 : 1982년 / 트랜지스터 134K

    다양한 새로운 주소지정 방식 추가. 그러나 별로 쓸데 없음 IBM PC-AT 와 Windows 에 많이 사용됨

    386 : 1985년 / 트랜지스터 275K

    32 비트 프로세서. “flat addressing” 기능 추가 Unix 도 사용할 수 있음 IA32라고 불림

     

     

    어셈블리 프로그래머의 시야

    - 레지스터 파일 : 레지스터 여러개의 집단

     

     

    C프로그램 -> 목적코드 변환과정

    ex)

    // C Code
    long plus(long x, long y);
    
    void sumstore(long x, long y, long *dest)
    {
        long t = plus(x, y);
        *dest = t;
    }

    => gxx -Og -S code.c

    // code.s
    sumstore:
        pushq	%rbx
        movq	%rdx, %bx
        call	plus
        movq	%rax, (%rbx)
        popq	%rbx
        ret

     

     

    목적코드의 역어셈블

    - objdump -d p

    목적코드의 분석에 유용한 도구 명령어들의 비트 패턴을 분석 개략적인 어셈블리언어로의 번역 수행 a.out (실행파일) or .o file 에 적용할 수 있음

     

    - gdb p

    disassemble sum

     

     

    x86-64의 정수 레지스터

    16비트 시절 레지스터 이름 : ax, bx ...

    32비터 시절 레지스터 이름 : eax, ebx ...

    64비트 지금 레지스터 이름 : rax, rbx ...

     

    64비트인 지금도 옛날 레지스터 이름들이 사용됨

     

     

     

    728x90
    반응형
    LIST