ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140721 (ARM adc 소스 작성중, asm)
    부산IT학원/스마트컨트롤러 2014. 7. 21. 17:06

    106일차













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

    ARM ADC

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



    ------- 소스


    --- adc.h







    --- adc.c















    -----------

    asm

    -----------


    ------- Reg


    registers 종류 : data reg , general reg

    EAX - EBX - ECX - EDX = Data Reg Or General Reg 라 한다.

    여기서 특히 사용 많이 하는 EAX 레지스터를 accumulator 라 한다.

    그래서 특히 4개중에 속도가 최고로 빠르다.



    각각의 레지스터들은 32 비트이다 .

    여기서 EAX는 반을 나누어서 사용한다 . 오른쪽은 AX 라하며 왼쪽은 호칭은 없다

    여기서 AX를 또 반을 이용해서 사용하는데 반을 나눈 두가지를 AH AL 이라한다.



    Ex) 레지스터 사용되는 형식

    int A = 100;

     short B = 100;

     char C = 100;

     여기서 연산을 A= A+1 을 할 경우

     1. mov EAX,A의 주소

     2. add EAX,1      ; EAX=EAX + 1

     3. mov A의 주소,EAX

      B = B+1 을하면 EAX 대신에 AX를 대입하고 A의 주소에 B의 주소를 넣으면 된다.

     C = c+1 을하면 EAX 대신에 AL를 대입하고 A의 주소에 C의 주소를 넣으면 된다.

    이렇게 앞의 type에 따라 용량에 맞춰 레지스터가 사용된다.







    ---- Index Reg


    -- Index Reg -  ESI  ,  EDI

    1. 주로 주소를 저장하는 레지스터이다.

    2. 연산을 할 때도 사용할 수 있다.

    3. 데이터를 복사할때 사용하면 편리하다.


    -출발점 주소를 ESI 도착점 주소를 EDI로 지정하면

    ESI가 가리키는 주소를 EDI가 가르키는 복사된다..


    -- Index Reg -  ESP , EBP

    ESP = Stack Pointer  EBP = Base Pointer 라 한다.

    이 두개의 레지스터는 함수호출할때 사용되며 중요한 레지스터이므로 함부로 설정하지 않는다.




    ----- Segment Reg


    CS

    코드 영역 

    DS

    데이터 영역 

    ES

    확장 영역

    FS

    안 중요함 

    GS

    안 중요함 

    SS

    스택 영역 





    ----- EIP (Reg Or instruction pointer)

     - 명령어를 저장하는 주소

     - 다른 CPU에서는 PROGRAM COUNT 라 하고 PC이다. PC 와 EIP는 같은 것이다.



    EFLAGS Reg : 상태를 저장하는 레지스터





    ----- PC Hardware : Input / Output

    Memory mapped i/o : ARM/AVR 방식 , C로 접근가능 I/O레지스터가 메모리에 있음

    I/O mapped i/o : 인텔방식 C로 접근불가 I/O레지스터가 메모리에 없음  어셈블리로 접근가능

    Integrated development environments (IDE)

    - test compiler debugger 3개를 합쳐서 통합개발환경이라 한다.










    --- 예제 소스





    - 명령어


    add eax, 158




    - directive (라벨, 지시자)


    . 으로 시작.




    - macro




    - mnemonic 니모닉이라고 읽음.


    name           mnemonic operand(s)       ; comments


    Zerocount:          mov          ecx, 0              ; ecx = 0;

    (name은

    생략 가능)

    (라벨, 지시자)


    name만 쓸 수도 있다.




    - .386

       .MODEL FLAT

    이 두 명령어는 sam 작성시 가장 앞에 써줘야 한다.



    - asm으로 작성할 때 .386을 안쓰면 그 하위 버전용으로만 동작한다.

     .586등 높은 수를 사용하면 최신기능을 사용할 수 있으나

     하위 cpu들은 그 기능을 사용할 수 없다.



    - 함수 선언

    ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

    (cpu, reg를 만지고 원래 상태로 되돌리는 기능)



    - 헤더파일 포함

    INCLUDE io.h



    - cr EQU 0dh (h:hexa, 0d = 13)

    이 코드는 C로

    #define cr 0dh


    EQU(이퀄, 같다)


    정리하면 cr이란 단어가 나오면 16진수 0D로 변환하라는 뜻.







Designed by Tistory.