오류 : 강력한 명령어를 사용하면 성능이 좋아진다.
x86명령어가 강력한 이유 중 하나는 명령어 실행 방식을 변경하는 접두사를 가지고 있기 때문입니다. 접두사를 쓰지 않고 표준 명령어만 사용해서 데이터를 레지스터에 적재했다가 다시 메모리에 저장하는 방식을 사용할 수도 있습니다. 공평한 비교를 위해 순환문 오버헤드가 없도록 순환문으로 만들지 말고 명령어를 반복적으로 늘어놓는 방법을 쓰면 접두사를 쓴 것보다 더 빠릅니다.
오류 : 최고 성능을 얻기 위해 어셈블리 언어로 프로그램 작성하기
컴파일러의 눈부신 발전으로 어셈블리 프로그래머가 기계에 밀린다.
함정 : 바이트 주소를 사용하는 컴퓨터에서 인접 워드 간 주소 차이가 1이 아니라는 사실을 잊는것.
많은 어셈블리 프로그래머들이 주소를 하나 증가시키면 다음 워드를 찾을 수 있다고 생각했다가 이로 인해 생긴 오류로 심한 고생을 겪었다.
함정 : 자동 변수가 정의된 프로시저 외부에서 자동 변수에 대한 포인터를 사용하는 것.
포인터를 사용할때 저지르기 쉬운 실수는 프로시저의 결과를 전달할 때 프로시저 내에서 지역 변수로 선언된 배열을 가리키느 포인터를 포함시키는 것입니다. 스택 동작에 따른면 지역 배열이 저장된 메모리 영역은 프로시저가 종료되자마자 다른 용도로 재사용됩니다. 따라서 이미 없어진 다오 변수에 대한 포인터를 사용하면 예기치 못한 일이 발생합니다.
결론
내장 프로그램 컴퓨터의 두 가지 기본원리는 숫자와 같은 형태의 명령어를 사용한다는 것과 변경 가능한 메모리에 프로그램을 저장한다는 것입니다. 명령어 집합의 선택은 프로그램 실행에 필요한 명령어 개수와 명령어 하나 실행에 필요한 클럭 사이클 수, 그리고 클럭 속도 간의 미묘한 균형을 요하는 문제입니다. 앞서 보았듯이 명령어 집합 설계자가 이런 미묘한 결정을 내릴 때 지침이 될 수 있는 설계원칙 3가지가 있습니다.
1. 간단하게 하기 위해서는 규칙적인 것이 좋다.
MIPS명령어 집합의 특성 중 많은 부분이 규칙성을 염두에 두고 결정된 것이다. 예를들면 모든 명령어의 길이를 똑같게 한것, 산술 명령어는 항상 레지스터 피연산자 3개를 갖도록 한 것, 이떤 명령어 형식에서나 레지스터 필드의 위치가 일정하게 만든 것 등이다.
2. 작은 것이 더 빠른다.
MIPS의 레지스터 개수를 32개로 제한하는 이유는 속도를 빠르게 하기 위해서이다.
3. 좋은 설계에는 적당한 절충이 필요하다.
MIPS는 명령어 내의 주소나 상수부는 클수록 좋다는 것과 모든 명령어의 길이는 같은 것이 좋다는 두 요구 사항을 적당히 절충하여 수용하고 있습니다.
기계어 수준 위에는 어셈블리 언어가 있습니다. 어셈블러는 이것을 기계가 이해할 수 있는 이진수로 번역하고, 때로는 하드웨어에 없는 명령을 추가하여 명령어 집합을 확장하기도 합니다.
MIPS의 각 명령어 종류는 다음과 같이 상위 수준 언어의 구조와 연관 지을 수 있습니다.
- 산술 명령어는 치환문에 나타나는 연산에 해당한다.
- 데이터 전송 명령어는 배열이나 구조체 같은 자료구조를 다룰 때 자주 쓰인다.
- 조건부 분기는 if문과 순환문에서 사용된다.
- 무조건 점프는 프로시저 호출과 복귀 및 case/switch문에서 사요오딘다.
'Computer Architecture > 컴퓨터 구조' 카테고리의 다른 글
[17] CH2 명령어:컴퓨터 언어 < RISC-V > (0) | 2022.01.19 |
---|---|
[16] CH2 명령어:컴퓨터 언어 < ARMv8 > (0) | 2022.01.19 |
[15] CH2 명령어:컴퓨터 언어 < ARMv7 > (0) | 2022.01.19 |
[14] CH2 명령어:컴퓨터 언어 < MIPS 버전 6 > (0) | 2022.01.19 |
[13] CH2 명령어:컴퓨터 언어 < MIPS 버전 5 > (0) | 2022.01.19 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!