목록전체 글 (37)
보근은 참고 있다
오류: 강력한 명령어를 사용하면 성능이 좋아진다. intel x86 명령어는 접두사를 이용해 명령어 실행 방식을 변경할 수 있기 때문에 매우 강력하다. 그중 한 접두사는 카운터 값이 0이 될 때까지 명령어 반복 실행이 가능하게 해준다. 그러나, 순환문 오버헤드가 없도록 명령어를 반복적으로 늘어놓는 방법을 쓰면 접두사를 쓴 것보다 약 1.5배 빠르다. 오류: 최고 성능을 얻기 위해 어셈블리 언어로 프로그램 작성하기. 과거에는 컴파일러가 출력하는 코드의 성능이 좋지 못했으나, 현재는 컴파일러 기술이 발달하면서 컴파일한 코드와 직접 손으로 작성한 코드의 차이가 급격히 줄어들었다. 상위 수준 언어로 프로그램을 작성해 컴파일하는 이유는 다음과 같다. 컴파일러 기술이 발달된 지금, 어셈블리 프로그래머가 컴파일러의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DnqQb/btqKbXFXBZp/QSebtP7qYhkkH3H371s8t0/img.png)
이 절에서는 두 가지 C 프로시저의 MIPS 코드를 만들어 본다. 하나는 배열 원소 두 개를 맞바꾸는 것, 다른 하나는 배열 원소를 정렬하는 것이다. C 프로그램을 어셈블리 프로그램으로 바꿀 때는 다음 절차에 따라 번역한다. 1. 프로그램 변수에 레지스터를 할당한다. 2. 프로시저 본체에 해당하는 코드를 생성한다. 3. 프로시저 호출 후의 레지스터 내용을 호출 전과 같도록 만든다. 프로시저 swap void swap (int v[], int k) { int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; } 레지스터 할당 인수 v, k를 각각 $a0와 $a1에 할당한다. 그 외의 변수는 temp 뿐인데 swap은 말단 프로시저이므로 레지스터 $t0에 할당된다. 본체..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQHfII/btqJHa5uQDh/nZth4voD5elsN69vkACuK1/img.png)
컴파일러 컴파일러는 상위 수준 프로그램을 어셈블리 언어 코드로 바꾼다. 어셈블리 언어 프로그램은 컴퓨터가 이해할 수 있는 심벌 형태이다. 어셈블리 언어 프로그램에 비하면 상위 수준 프로그램의 문장 수는 훨씬 적다. 결국, 이 과정은 프로그래머의 생산성을 높여준다. 어셈블러 어셈블러는 어셈블리 언어 코드를 기계어 형태의 목적 모듈로 바꾼다. 어셈블리 언어는 상위 수준 프로그램과 기계어 사이의 인터페이스 역할을 한다. 이 명령어들은 하드웨어로 구현이 되어 있지 않더라도, 어셈블러가 알아서 처리하여 번역과 프로그래밍을 간편하게 해 준다. 이런 명령어들을 의사명령어(Pseudo instruction)이라 한다. ex) move $t0, $t1 -> add $t0, $zero, $t1 // 기계어 명령어에는 mo..