어셈블리언어

CS/어셈블리

[SPARC] 17. 분기 명령어

지난 글까지 산술 명령어, 논리 명령어, 비트 명령어를 정리하였다. 이번 글부터는 분기 명령어에 대해 정리하고자 한다. Flow Control In Assembly 흐름제어는 한다면 코드가 위에서부터 아래로 한 줄씩 실행되는 것이 아니라, 특정 위치로 건너가 실행하도록 설정하는 것을 의미한다. C언어에서 흐름 제어 키워드를 생각을 해보면 아래와 같은 키워드가 있다. 반복 : for, while, do while 분기 : switch, if, else 기타 : goto, 함수 그리고 강제로 이동하는 goto 문을 제외하면, 건너 뛸지 말지 여부를 결정하기 위한 '조건 체크'가 반드시 필요하다. 조건 체크는 비교 연산자를 사용한다. (!=, ==, , ...등등) 어셈블리의 관점에서 흐름 제어도 마찬가지이다..

CS/어셈블리

[SPARC] 16. 비트 연산 명령어

지난 글에서는 논리연산 명령어에 대해 정리하였다. 논리 연산 명령어에는 and, or, xor 과 andn orn xnor 이 있었고, 각 명령어마다 cc 를 생성하는 명령어가 따로 있었다. 논리 연산에서 CC 는 N, V 만 사용한다. 합성 명령어로는 not, clr, tst, mov 와 같은 명령어가 있었다. not A = xnor A, %g0, A 로서 특정 비트와 1 의 xor 연산을 통해 0을 1로 1을 0으로 바꾸어 주었다. clr 은 0 과 and 연산을 함으로서 모든 비트를 0으로 초기화 시키고, tst 는 0과 orcc 를 한 값을 %g0 에 저장시키므로서 연산 결과를 버리고 cc 만을 보는 명령어였다. mov A, B 는 or %g0, A, B 연산으로 대체되어 A 를 그대로 B 에 넣..

CS/어셈블리

[SPARC] 15. 논리 연산 명령어

지난 글까지 산술 명령어를 정리하였다. 산술 명령어 (덧셈 뺄셈, 곱셈, 나눗셈, 나머지) 연산 중, 덧셈과 뺄셈은 기계 명령어로 구현되고, 특히 뺄셈은 2의 보수를 이용하여 덧셈 연산되는 것이 특징이었다. 연산 데이터에는 signed integer 와 unsigned integer 가 있었는데, 덧셈 / 뺄셈시 각 데이터 종류별로 연산 결과에서 나오는 CC의 의미가 달라지게 되었다. unsigned 데이터 연산에서는 Carry 가 중요한 의미를 지녔으며, 덧셈시 오버플로우, 뺄셈시 캐리가 존재한다면 A = B 의미를 지니는 것으로 해석하게 되었다. signed 데이터 연산에서는 oVerflow 와 Negative 코드를 통해 연산 결과의 부호를 알아낼 수 있고, 이를 통해 두 수의..

CS/어셈블리

[SPARC] 14. 곱셈과 나눗셈 그리고 서브루틴

지난 글에서는 큰 수 덧셈과 뺄셈에 대하여 정리하였다. 간단하게 요약하면 큰 수를 더하고 뺄 때는 cc 명령어를 사용해 캐리를 넘겨주고, x 명령어를 사용해 캐리를 받아 여러 레지스터를 사용해 큰 수를 연산하였다. 이번 글에서는 SPARC 프로세서의 곱셈과 서브루틴에 대해 정리하고자 한다. 곱셈 곱셈은 기본적으로 bitshift 와 덧셈의 조합이다. 예를 들어 101 x 204 를 한다고 해보자. 초등학교 때로 돌아가 어떻게 큰 수의 곱셈을 했는지 따져보면 101 x 4 x 1 101 x 0 x 10 101 x 2 x 100 이렇게 곱셈을 하고 다 더해서 곱셈을 계산했던 기억이 있을 것이다. 컴퓨터도 마찬가지로 이진수에 대해 위와같은 연산을 함으로써 곱셈을 구현한다. 이때 1, 10 100 처럼 1, 2..

CS/어셈블리

[SPARC] 8. SPARC Regsiter Window & Assembly Instruction Format

지난 포스팅에서는 SPARC 라는 ISA의 특징과 SPARC가 사용하는 레지스터의 종류에 대해 정리하였다. 이번에는 SPARC 만의 특징인 Register Window 와 일반적으로 어셈블리 언어에서 사용하는 명령어의 포맷을 정리하고자 한다. 1. Register Window 레지스터 윈도우는 알고리즘 기법 중 하나인 Sliding Window 와 유사한 느낌이다. Sliding Window 는 보통 덱을 활용해 정해진 메모리 크기 안에서 데이터를 넣고 빼면서 마치 창문을 옆으로 옮기듯이 메모리 사용 공간을 옆으로 옮겨가며 사용함으로서 전체 메모리 사용량을 줄이는 메모리 최적화 기법이다. SPRAC도 유사하게, 한번에 32byte 라는 레지스터만을 사용 가능한데 이 32byte 라는 레지스터 공간을 전체..

CS/어셈블리

[SPARC] 1. Introduction & Computer System Organization

- What's Assembly Language CPU는 전기 신호를 받아들이는 '회로' 이다. 따라서 CPU로 명령을 전달할 때는 전기 신호로 전달하는데, 이 신호를 전압에 따라 0과 1로 표현할 수 있다. 이 0과 1로 구성된 신호를 '기계어' 라고 한다. 프로그램은 CPU에게 일련의 명령을 내리는데, 사람이 CPU에게 내릴 명령을 작성할 때 0과 1로 구성된 기계어로 명령을 작성하는 것은 매우 어렵다. 따라서 프로그램을 작성하는 사람의 편의를 위해 만들어진 High Level Language 가 C, Python 같은 언어이다. 물론 High Level Language 는 CPU 같은 회로가 이해할 수 있는 형태가 아니기에 이를 변환하는 과정이 필요하고, 이를 '컴파일' 이라고 한다. 컴파일의 과정..

에버듀
'어셈블리언어' 태그의 글 목록 (2 Page)