수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620943
  • Today | 323
  • Yesterday | 482

Programming/Assembly2006/07/10 00:45

버블소트

버블소트

  • 버블소트

    이번엔 버블소트를 배워보도록 하겠다. C를 할 줄 안다면 버블소트 정도는 잘 알 테지만, 어셈블리어로 어떻게 구현되는지 한번 유심히 살펴보길 바란다.
    버블소팅을 해주는 프로시져를 하나 정의해 보겠다.

    BubbleSort PROC USES eax ecx esi, pArray:PTR DWORD, Count:DWORD mov ecx, Count dec ecx L1: push ecx mov esi, pArray L2: mov eax, [esi] cmp [esi+4], eax jge L3 xchg eax, [esi+4] mov [esi], eax L3: add esi, 4 loop L2 pop ecx loop L1 L4: ret BubbleSort ENDP

    < 그림 3 : 버블소트 >
    내부적으로 eax, ecx, esi레지스터를 쓰기에 USES 디렉티브를 사용하여 프로시져 호출 전과 후에 각 레지스터 값이 변하지 않게 하였다. 첫번째 인자로 DWORD형 배열에 대한 주소를 넘겨받고 두번째 인자로 배열 내의 원소수를 넘겨받는다. 물론 호출시 주소를 넘길 때는 ADDR연산자를 사용해야 한다는 것을 잊지 않기 바란다.

    우선 루프가 두개 있음을 진한 글씨를 통해 알 수 있을 것이다. 바깥루프가 한 번 도는 동안 어떤 변화가 일어나는지는 그림3을 참고하면 이해가 빠를 것이다.

    L1레이블 이전까지를 살펴보자. 버블소트에서 바깥 루프는 (원소의 개수 - 1)만큼 돌게 되므로 ecx에 값을 대입시킨다.
    L1레이블은 바깥 루프의 시작부분이다. 여기서 ecx를 스택에 넣는 것은 이중 루프를 돌리기 위함이다. 두 루프가 모두 ecx를 카운터로 사용한다는 점을 염두해 두면 이해할 수 있을 것이다. 그리고 esi에 배열의 시작주소를 넣는다.
    L2레이블은 안쪽 루프의 시작부분으로서, esi가 가리키는 원소와 그 다음 원소를 비교해서 순서가 맞지않을 경우 두 자료를 교환해준다. 만약 순서가 맞아서 교환할 필요가 없다면 L3로 점프하게 된다. 즉, 교환하지 않는다.
    L3레이블에서는 esi가 다음 원소를 가리키게 하고, (여기서 DWORD형이기 때문에 4를 증가시킨 것임을 알아두어라) 아까 스택에 넣어두었던 ecx를 꺼내게 된다. 다시 한번 말하지만, 이는 이중루프를 돌리기 위한 것이다.
    L4레이블은 함수를 종료하는 부분이다. 단지 보기 편하라고 달아둔 것이니 헷갈리지 않기 바란다.

    여기서는 버블소트에 대한 알고리즘을 익히고자 한 것이 아니라, 배열과 관련된 내용을 많이 배웠으니 실제 사용할 때 어떻게 쓰이는지 익히고자 하는 의도였다. 따라서 알고리즘이 이해되지 않아도 신경쓸 필요가 없는 것이다. 다만 배열을 저렇게 사용할 수 있구나, 하는 것만 알아두기 바란다.

  • 마치는 글

    이번 회에서는 조금 특이한 형태의 인스트럭션도 배웠다. CPU내의 인스트럭션 차원에서 배열을 지원해 준다는 것이 어찌보면 의외였을지도 모르겠다. 또, 이차원 배열의 사용법과 버블소트 예제를 배웠는데, 이렇게 하나하나 배워가는 것이 여러분들의 컴퓨터에 대한 이해에 도움을 주었길 빈다. 다음 회에서는 구조체와 매크로를 배운 후, 링크드리스트를 만들어 간단히 테스트하는 예제도 배울 것이다. 구조체를 직접 어셈블리어로 만들어 보는 것도 매우 흥미롭지 않을까 생각한다.다음 회에서 다시 뵙길 빌며 이만 본회를 마치겠다.

  • "Assembly" 카테고리의 다른 글
    • UNION 사용하기, 매크로란? 매크로 정의하기, 매크... (0)2006/07/10
    • 구조체란? 구조체 선언, 구조체 변수 사용하기 (0)2006/07/10
    • 버블소트 (0)2006/07/10
    • 스트링 비교 예제, 이차원 배열, 베이스-인덱스 디... (0)2006/07/10
    • 스트링관련 인스트럭션들, REP 접두어, 방향 플래... (0)2006/07/10
    2006/07/10 00:45 2006/07/10 00:45
    Posted by webdizen
    No Trackback No Comment

    Trackback URL : http://www.webdizen.net/blog/trackback/1737

    Leave your greetings.

    [로그인][오픈아이디란?]

    «Prev  1 ... 1461 1462 1463 1464 1465 1466 1467 1468 1469 ... 2998  Next»

    RSS HanRSS
    Blog Image
    webdizen
    이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

    Categories

    전체 (2998)
    Webdizen (134)
    Life (6)
    Diary (16)
    Blog (9)
    IDEA (1)
    Travel (10)
    Book (14)
    Photo (7)
    Movie (7)
    Music (13)
    Leisure Sports (10)
    Funny (5)
    Hardware (119)
    Software (120)
    Windows (5)
    Unix & Linux (119)
    Installation (4)
    Kernel (10)
    System (34)
    Develop (22)
    X-Window (0)
    Applicaton (31)
    Security (4)
    Framework (2)
    Hadoop (2)
    Programming (805)
    Algorithm & Data Structure (1)
    Assembly (38)
    UNIX/Linux C (95)
    C++ (128)
    STL (4)
    Java (38)
    Win32 API (92)
    ATL/COM (44)
    MFC (151)
    .NET (26)
    WCF/WPF (4)
    C# (28)
    Network Programming (17)
    Database Programming (12)
    OpenGL / DirectX (13)
    Multimedia Programming (0)
    Game Programming (21)
    Parallel Distributed Progra... (0)
    Reverse Engineering (0)
    Debugging (9)
    Python (1)
    Ruby (1)
    Ruby on Rails (1)
    QT (4)
    GTK (0)
    JSP (0)
    PHP (6)
    ASP.NET (6)
    ASP (3)
    Development (28)
    Useful Library (2)
    Data Modeling (0)
    Database (105)
    Oracle (4)
    MSSQL (41)
    MySQL (2)
    Data Warehouse (2)
    Data Mining (3)
    Network (66)
    Web (78)
    DHTML (4)
    XHTML (1)
    Javascript (1)
    CSS (1)
    AJAX (9)
    XML (11)
    Flex (1)
    Silverlight (3)
    Security (91)
    DoS (1)
    Kernel (10)
    Scanning (3)
    Sniffing (0)
    Spoofing (4)
    Overflow (28)
    Web (11)
    Shell (10)
    Format String (14)
    Window (2)
    Embedded (70)
    Multimedia (27)
    Mobile (14)
    Graphic (24)
    Management (633)
    Knowledge (581)
    Hadoop (0)

    Notice

    • 메타 블로그 사이트에 등록
    • 새해 맞이 블로그의 변화
    • 블로그 명칭 변경
    • 도메인(www.webdizen.net) 구...
    • TEXTCUBE 1.6.1로 업그레이드...

    Tags

    • 모나리자
    • 소운동장
    • GIF
    • HP
    • 유혹
    • Friends
    • 웹디즌
    • 로스엔젤레스
    • Stratos Framework
    • Functor
    • Multithreading
    • Office
    • Microformats
    • 빌 게이츠
    • 콘텐츠
    • DTD
    • Keyword
    • 공유 객체
    • 약학관
    • Threads

    Recent Articles

    • ASCII Code의 CRLF 제거 방법.
    • Hadoop 에서 c++ API 이용시....
    • Ubuntu Linux에서 Hadoop 구....
    • 내 심장을 한껏 뛰게한 "국가....
    • 스타 스키마 데이터베이스 설....

    Recent Comments

    • ■ 온라인카지노 ▶ http://L....
      asdf 11/21
    • 그리고 혹시 해외여행자보험....
      kim 11/05
    • ★★실제 바다게임장과 똑같....
      asdf 11/04
    • sbsyama.co.to← 짱5000만당....
      asdf 11/04
    • ♡KicaZ??o(???) 바카라사....
      fdsf3fass 11/03

    Recent Trackbacks

    • 파일 열기/저장하기 CFileDialog.
      은마군의 나태블록 02/11
    • World IT Show 2008.
      상우 :: Oranzie's BLOG 2008
    • cvs서버 설치하기.
      3인3색 2008
    • 속속 공개되는 Google Chart....
      PHP와 Web 2.0 2007
    • 마방진을 구하는 프로그램.
      Oranzie's BLOG 3 2007

    Archive

    • 2009/09 (3)
    • 2009/08 (1)
    • 2009/03 (1)
    • 2009/02 (9)
    • 2009/01 (13)

    Calendar

    «   2009/11   »
    일 월 화 수 목 금 토
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30          

    Bookmarks

      • Administration
        • IIS.NET
        • NTFAQ
        • OS의 모든 것
        • 리눅스포털
      • Database
        • SQL Server Central
        • SQL Team
      • Development
        • .NET Heaven
        • ASP Alliance
        • ASP.NET 2.0
        • Bullog.net
        • C# Corner
        • C++ (C PlusPlus.com)
        • C++ Reference
        • CodeGuru
        • CodePlex
        • DebugLab
        • Dev Articles
        • Devpia
        • DotNet Junkies
        • DotNet Zone
        • Driver Online
        • GOSU.NET
        • HOONS 닷넷
        • Joinc 팀블로그
        • KOSR
        • MSDN Home Page
        • OSR Online
        • Sky.ph - 개발자 커뮤니...
        • TAEYO.NET
        • The Code Project
        • WindowsClient.net
        • 김상욱의 개발자 Side
        • 조인시 위키
      • Human Networks
        • belief21c's e-space
        • I think I can
        • Invisible Rover's Blog :D
        • Rodman®
        • ■ Feel So Good~! ■
        • 까만 나비
        • 나를 가꾸는 시간.
        • 나만의 즐거움~~!
        • 단녕
        • 상우 :: Oranzie's BLOG
      • Information Technology
        • Microsoft TechNet
        • 지디넷코리아 - 글로벌...
      • Security
        • FoundStone
        • milw0rm
        • NewOrder
        • OpenRCE
        • Phrack.org
        • Reverse Engineering b1...
        • Reverse Engineering Team
        • RootKit
        • SecurityFocus
        • SecurityXploded by Nag...
        • Wow Hacker
        • Zone-H
    Textcube
    Louice Studio Inc.
    Powered by Textcube. Original designed by Tistory.