디자이너 ‘예처르킴’은 자신이 만든 문장에서 단어를 검색하는 ‘최강의 검색 프로그램’이 너무 오래 걸리자 고심에 빠졌다.
‘왜 내가 짠 프로그램은 이렇게 느린거지?’ 고민하던 ‘예처르킴’은 두 번이나 자신의 소스코드를 검토해봤으나 원인을 찾지 못 했다. 그는 생각했다. ‘내 코드에 문제는 없어! 나는 검색을 빠르게 하는 알고리즘을 제대로 알고 있다고!! 이건 이 프로그래밍 언어가 매우 느리기 때문이야! 내가 더 빠른 프로그래밍 언어를 디자인해보겠어!’
하지만 기존 프로그래밍 언어보다 더 빠른 프로그래밍 언어를 새로 만들기란 매우 힘든 일이다. 게다가 ‘예처르킴’은 디자이너일 뿐 프로그래머는 아니다. 그러다 보니 언어를 단순하게, 더 단순하게 디자인하게 되었다. 최종적으로 ‘예처르킴’이 디자인한 언어의 이름을 그의 본명을 따 ‘예철 언어’ 라고 지었다.
‘예철 언어’는 26개의 레지스터(eax, ebx, …, ezx)를 사용하고 언어에 있는 명령어는 다음과 같다.
예를 들어 ‘lea ebx, [eax]’ 라는 명령어를 보면, [eax]는 레지스터 eax에 있는 값을 의미하고 그 값이 레지스터 ebx에 배정된다.
‘예철 언어’에서 이 두 명령어를 사용하는데 만족해야 되는 패턴이 있다.
‘예철 언어’의 최종 목표이자 당신이 해야 되는 일은 처음 eax의 값이 1일 때 명령어를 사용하여 26개 중 어느 한 레지스터에 자연수 N이 들어있어야 한다.
예를 들어 N=41일 때 다음과 같이 두 번의 명령을 수행하면 eax에는 41이 들어있게 된다.
입력 41 출력 2 lea ebx, [eax + 4*eax] lea ecx, [eax + 8*ebx] 입력 2 출력 1 lea ebx, [eax + eax] 입력 4 출력 1 lea ebx, [4*eax]
출처:koi4u 2011 모의고사 4 번