편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌 1 - 6 어셈블리와 고급 언어의 결합 어셈블리로 만들어진 루틴을 고급 언어와 연결할 수 있는 방법으로는 다음과 같은 방법들이 있다. 인라인 어셈블리 대 부분 저수준을 함께 지원하는 비주얼 C 및 기타 언어에서는 소스 중간에 바로 어셈블리 코드를 삽입시킬 수 있는 인라인 어셈블리라는 기능이 있다. 비주얼 C의 인라인 어셈블리(in-line assambly)는 DB, DW, DD 등의 변수 선언 명령어를 제외한 거의 모든 명령어를 사용할 수 있다. 다름의 간단한 인라인 어셈블리 예제를 보자. __asm { mov ecx , 38 xor eax , eax Tl_Loop1: inc eax loop TL_Loop1 } 사용 방법은 비주얼 C에서 인라인 어셈블리는..
편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌 1 - 4 어셈블리 앞 에서도 이야기했지만 고급 언어들의 컴파일러들은 많은 노력과 기술의 발전으로 상당한 최적화가 이뤄졌다. 하지만 CPU에 특성화되지 않는 범용 언어이기 때문에 최적화에는 한계가 있다. 이러한 부족함을 보안하기 위해 우리는 어셈블리(assembly)의 필요성을 느끼게 된다. 하지만 어셈블리로 프로그램 하나를 전체적으로 만든다는 것은 어렵고 시간이 걸리는 일이다. 이에 우리는 새로워진 매크로 어셈블리와 여러 가지 기법을 통해 이에 대한 해결책을 제시하고자 한다. 매크로 어셈블러 여러 다른 언어들이 그동안 계속 발전했듯이 어셈블리도 계속 발전해 왔다. 그 중에서 필자는 매크로 어셈블러(macro assembler)를 소개할까 한다. 매크로 ..
편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌 1 - 3 브랜치 유닛 파 이프 라인의 등장으로 우리는 CPU의 클럭 속도를 더 높일 수 있게 되었다. 하지만 파이프 라인에도 약점은 존재한다. 바로 파이프 라인을 채우는 데 걸리는 시간이다(파이프 라인 참고) 파이프 라인은 파이프가 채워져 있을 때만 제 속도를 낼 수 있는 시스템인데 이 파이프가 비워지는 경우가 있다. 그 중 한 가지 경우가 하나의 CPU가 리셋됐을 때로(이 경우는 어쩔 수 없다) 다른 하나는 프로그램 명령 흐름 제어가 바뀌었을 때이다. 즉 JMP 명령 등 브랜치(branch) 명령이 발생했을 때다. 그래서 JMP 명령(C 언어의 경우 for, if, while, select 등의 명령어)을 포함하는 브랜치가 잦은 프로그램일수록 파이프 ..
편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌 1 - 1 아무리 하드웨어가 발전한다 해도 높아진 사용자의 눈을 따라 올 수는 없었다. 개발자들은 사용자를 더 만족시키기 위해 하드웨어의 모든 자원을 짜내지 않으면 안 되었고, 그로 인해 부각되는 분야 중 하나가 바로 최적화이다. 멀고도 어렵게 느껴진 최적화, 관련 툴의 발전으로 더 이상 일부 프로그래머들의 전유물이 아니다. 어떤 것을 공략하기 전에 먼저 대상을 잘 파악해야 한다. 따라서 이번 호부터는 달라진 어셈블리와 PC의 심장인 CPU를 공략해보자. 이 강좌는 어렵게만 생각해왔던 최적화에 고급스럽게 변모한 어셈블러를 이용해 더 쉽게 접근해 보자는 취지로 시작한 강좌이다. 일반적으로 ‘최적화’라는 단어가 나오면 ‘어렵다!’, ‘자료가 부족하다’, ‘컴..
- Total
- Today
- Yesterday
- diary
- cartoon
- Information Processor
- Assembly
- Tech News
- WDB
- BadCode
- 짤방 및 아이콘
- Reverse Engineering
- Embedded System
- Web Programming
- humor
- 나비효과
- console
- C#
- Life News
- 야마꼬툰
- USB Lecture
- Mabinogi
- Battle
- 3D Engine
- medical
- Linux
- Military
- network
- 프리랜서로 살아남는 법
- 막장로그
- win32
- wallpaper
- Network Inspector
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |