이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[시스템 프로그래밍] 어셈블리어 - 반복문

  • 2022.10.24 09:02
  • Computer Science/System Programming
반응형

 

 

 

조건문은 어셈블리어의 jX 명령어와 대응되지만, 반복문은 어셈블리어에서 대응되는 명령어가 없다.

즉 jX 명령어와 몇 가지 다른 명령어들의 조합으로 반복문을 구현해야 하는데, 이제 그 예시를 살펴보자.

 

 

 

do-while

 

 

 

 

 

do-while은 실행식이 무조건 한 번은 꼭 실행된다는 부분을 제외하면 while문과 같은 역할을 한다.

위의 그림은 do-while 문법을 goto 문법으로 표현한 후 어셈블리어로 변환하는 예시이다.

 

 

 

 

while

 

 

while문은 조건식에 따라 실행식이 한 번도 실행되지 않을 수도 있다.

while문을 어셈블리어로 변환하는 예시를 살펴보자.

 

 

1. Jump to Middle

 

 

 

 

 

goto 문법을 사용해 바로 조건식으로 이동시키고, 실행식 내부에서 goto 문법을 통해 조건식에 따라 실행식으로 이동시키는 방법을 사용한다.

 

 

2. do-while로 변환

 

 

 

 

첫 부분에서 조건식의 결과에 따라 실행식의 실행 여부를 결정한다.

사실 첫 번째 방법과 크게 다른 점은 없다.

 

 

 

 

for

 

 

for문은 while문으로 변환해서 어셈블리어로 번역된다.

while문으로 변환한 후에는 Jump to Middle을 사용하거나 do-while로 변환한 후 어셈블리어로 번역하면 된다.

 

 

 

 

Switch

 

 

사실 switch문은 반복문보다는 조건문에 가깝지만.. 

어차피 반복문이든 조건문이든 비슷한 명령어의 조합으로 구현되는건 같기 때문에 이쪽에 작성한다.

 

당연히 switch문법은 if-else 문법으로 정확히 변환될 수 있고, 컴파일러가 어셈블리어로 번역 시에도 if-else문법으로 변환한 후 어셈블리어로 번역하는 전략을 선택하기도 한다. (case 값의 밀집도와 case의 수를 고려해서 결정한다)

 

하지만, switch문법을 제대로 작성하면 단순 if-else문법으로 번역한 결과보다 훨씬 더 효과적인 프로그램을 만들 수 있다.

 

 

 

 

 

switch문을 어셈블리어로 번역할 때 컴파일러는 점프 테이블이라는 자료구조를 만들고, 조건식에 따라 바로 해당하는 실행문을 실행할 수 있도록 도와준다.

 

조금만 생각 해 봐도 if-else보다 효율적이라는걸 알 수 있다.

 

if-else문법을 실행하면 첫 번째 if부터 조건식이 참이 될 때 까지 계속 비교하는 작업을 수행하는데, 점프 테이블을 사용하면 바로 목적지를 찾아갈 수 있다. (O(N) -> O(1))

 

 

 

반응형
저작자표시 (새창열림)

'Computer Science > System Programming' 카테고리의 다른 글

[시스템 프로그래밍] 프로세스 (1)  (0) 2022.11.06
[시스템 프로그래밍] 프로시저  (0) 2022.10.28
[시스템 프로그래밍] 어셈블리어 - 조건문  (0) 2022.10.23
[시스템 프로그래밍] 어셈블리어  (0) 2022.10.13
[시스템 프로그래밍] 정수의 산술연산과 실수의 표현  (0) 2022.09.29

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [시스템 프로그래밍] 프로세스 (1)

    [시스템 프로그래밍] 프로세스 (1)

    2022.11.06
  • [시스템 프로그래밍] 프로시저

    [시스템 프로그래밍] 프로시저

    2022.10.28
  • [시스템 프로그래밍] 어셈블리어 - 조건문

    [시스템 프로그래밍] 어셈블리어 - 조건문

    2022.10.23
  • [시스템 프로그래밍] 어셈블리어

    [시스템 프로그래밍] 어셈블리어

    2022.10.13
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (685)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (145)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Data Science (2)
      • Embedded Software (1)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
      • BlockChain (0)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (12)
    • 💬 기록 (8)
    • 📚 공부 (7)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바