Load ConstantMIPS에서 32bit 상수를 레지스터로 읽어올 때 2가지 방법이 있다.첫번째는 메모리에 32bit 상수를 저장한 뒤, lw 명령어로 읽어오는 방법이다.두번째는 lui, ori 2개의 instruction을 사용하여 읽어오는 방식이다. lui 명령어는 load upper immediate 의 줄임말로, immediate 필드에 있는 16bit 상수를 레지스터의 상위 16bit에 저장하는 명령어이다.그리고 나머지 하위 16bit 의 상수는 ori 명령어로 bit combine 하여 가져온다. 위 이미지와 같이 1234 를 상위 16bit에 쓰고, 5678을 하위 16bit에 쓰도록 해서 원하는 32bit 크기의 상수를 레지스터에 저장할 수 있다. Pseudo Instructions..
Zero Register0번 레지스터는 항상 값을 0으로 유지하는 레지스터이다.이 레지스터에 값을 쓰려고 할 수 있지만, 그 결과는 언제나 0이다. 이 레지스터는 다른 레지스터에 값을 옮기는 move 명령어를 구현할 때 0과 or 연산을 취해서 다른 레지스터에 값을 쓰는 식으로 move 명령어를 구현하는 용도로 사용된다. 또는 상수값을 레지스터에 쓰고자 할 때, 0과 더하기를 해서 원하는 상수값을 레지스터에 쓰는 용도로 쓸 수도 있다. 메모리에 접근하는 상황우리의 컴퓨터는 stored program 방식을 사용하고 있다.즉, 프로그램의 명령어와 데이터가 오프칩 메모리에 저장되어 있고, CPU는 명령어와 데이터를 메모리로부터 읽어와 연산하는 방식이다. CPU가 메모리에 접근하는 상황은 크게 2가지이다.첫..
Sampler GLSL 에서 텍스쳐 객체를 저장하기 위한 내장 데이터 타입 (일종의 컨테이너) 이다. 텍스쳐 타입에 따라 sampler1D, sampler2D, sampler3D 등으로 분류되며, uniform 변수로 선언한다. 기본적으로 디폴트값이 정해져 있어서, 텍스쳐를 하나만 바인딩하는 경우에는 직접 유니폼 변수에 값을 등록하지 않아도 바로 사용할 수 있다. 텍스쳐를 유니폼 변수에 직접 등록하기 텍스쳐를 유니폼 변수에서 사용할 때는 텍스쳐의 위치에 해당하는 정수값을 넘겨주게 된다. 이러한 텍스쳐의 위치를 texture unit 이라고 한다. 이 텍스쳐 유닛의 기본값은 0이다. (그래서 하나를 바인딩할 때는 바로 가져다 사용할 수 있는 것) 텍스쳐 유닛을 사용하는 이유는 사용자가 셰이더로 하여금 1개..
개요syntax와 semantics는 프로그래밍 언어의 2가지 축이다.syntax는 문법과 문법에 따라 만들어 놓은 문장을 의미한다.semantics는 수식, 문장, 프로그램 유닛들이 지니는 의미를 말한다. 예를 들어 x = 3 이라는 문장이 주어졌을 때syntax는 'x' 라는 문자 옆에 '=' 이라는 문자, '3' 이라는 문자가 올 수 있다는 그 문법을 체크하는 것이 목표고,semantics 는 x가 변수, = 가 대입 연산자, 3은 정수라는 의미를 부여하는 것이 목표이다. 문법은 문장이 어떻게 쓰여야 하는지 그 규칙을 기술한 것.시멘틱은 각 문장과 그 요소들이 갖는 의미를 기술한 것이라고 볼 수 있다.Syntaxsentence (문장) : 문자들의 집합language (언어)..
HTTP웹페이지는 HTML 파일, 이미지, Java applet, 오디오 파일과 같은 object 들로 구성되어있다.이 각각의 오브젝트는 서로 다른 웹 서버에 존재할 수 있다.웹 페이지는 base html 파일에 서로다른 각가의 오브젝트 URL로 연결시켜 구성한다. HTTP (HyperText Transfer Protocol) 은 웹 서비스의 어플리케이션 계층 프로토콜이다.HTTP의 Hypertext는 위에서 말한 오브젝트를 의미한다. 이 프로토콜은 client - server 패러다임을 따른다.클라이언트는 웹 브라우저로, 웹 서버에 오브젝트를 요청하고, 얻어낸 오브젝트를 사용자에게 보여주는 역할을 한다.서버는 웹 서버로, 웹 브라우저가 요청한 오브젝트를 HTTP 프로토콜을 사용하여 보..
Texture Wrapping 텍스쳐의 좌표 범위는 (0,0) 에서 (1,1) 이다. 만약 이 범위 밖의 좌표를 지정할 경우, OpenGL은 기본적으로 텍스쳐를 반복한다. 만약 단순 반복하는게 아니라 대칭반복하거나, 클램핑하거나, 지정한 색으로 채우고 싶을 경우, 아래와 같은 다양한 옵션을 사용할 수 있다. GL_REPEAT, GL_MIRRORED_REPEAT, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER 이 설정값은 텍스쳐를 컨텍스트에 바인딩한 이후, 설정값을 넣는다. x축, y축에 대해 각각 설정을 지정해야 하는데, 아래와 같이 glTexParameteri 함수를 사용하여 지정할 수 있다. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ..
Zuze's Plankalkul세계 최초의 컴퓨터 x1을 프로그래밍하기 위해 나온 언어1945년에 나온 언어인데, 이때 벌써 floating point, array, record 의 개념과 상수가 정의되어 있었다. A[5] = A[4] + 1 를 이렇게 썼고, 1.n 은 데이터 타입을 나타낸 표기라고 한다. Pseudocodes등장 배경컴퓨터가 등장했을 때, 사람들은 컴퓨터에 기계어로 명령을 직접 내려야 했다.기계어는 읽기, 수정하기, 의사표현하기가 매우 힘든 언어였고, index, floating point 의 개념도 없었다. - Short Code (BINAC 컴퓨터에 사용한 슈도 코드) - SpeedCoding (IBM 701 컴퓨터에 사용)700개의 단어 밖에 사용하지 ..
Texture 이번 글에서는 객체에 2D 이미지를 입힐 수 있는 '텍스쳐' 라는 기능에 대해 정리한다. 택스쳐는 어떤 이미지 위에 도형 틀을 그리는 것과 비슷하다. 이를 텍스쳐를 도형에 매핑한다고 하는데, 텍스쳐를 도형(가령 삼각형)에 매핑하기 위해서는, 도형의 vertex가 texture의 어느 위치에 해당하는지를 지정해야 한다. 이때 텍스쳐 좌표계를 통해서 위치를 지정할 수 있는데, 텍스쳐 좌표계는 x, y 축에서 0~1사이의 값을 가진다. 기준점은 왼쪽 아래를 원점으로 한다. 그리고 이 텍스쳐 좌표계를 통해 텍스쳐의 색상을 가져올 수도 있는데, 이를 sampling 이라고 한다. Texture 생성 // Create Texture & Bind unsigned int texture; glGenText..
인터넷을 사용하는 어플리케이션을 만들 때, 프로그래머는 Transport 계층이 제공하는 서비스 중 어떤 서비스를 사용해서 어플리케이션을 만들 것인지, 어떤 구조로 만들 것인지만 결정하면 된다. 어플리케이션 밑에 있는 라우터, 스위치 같은 core device의 동작에 대해서는 신경쓰지 않아도 된다. Application Design Paradigm 네트워크 어플리케이션을 만들 때 사용할 수 있는 디자인 패러다임으로 크게 client - server 패러다임과 peer to peer 패러다임이 있다. client - server paradigm 데이터를 요구하는 클라이언트와 데이터를 제공하는 서버로 역할을 구분하는 패러다임이다. 서버는 항상 켜져있는 컴퓨터(host)이고, 고정된 IP주소를 가지고 있다...
이번 글에서는 네트워크 5계층과 프로토콜에 대해 정리하고자 한다. 인터넷은 매우 복잡하고 거대한 개념이다.이 개념을 그냥 구현하려고 한다면 매우 복잡하고 거대하기 때문에 힘든일이 될 것이다.그래서 이 거대한 개념을 보다 작은 단위의 개념으로 나눈다음, 이 작은 단위의 개념을 서로 연결해서 큰 개념을 구현하도록 설계했다. 비행기 탑승 절차와 레이어예를 들어 비행기를 타고 다른 나라로 여행을 가는 과정을 생각해보자.비행기는 단순히 타고싶을 때 타서 바로 슝 날아가서 도착하는게 아니라 여러 복잡한 절차가 존재한다. 비행기 표 예매 > 짐 맡기기 > 탑승구에서 비행기 탑승 > 활주로 이륙 > 비행 > 활주로 착륙 > 비행기에서 내려 탑승구로 나오기 > 짐 찾기 > 비행기 티켓에 대해 문제가 있..