본문 바로가기

반응형

분류 전체보기

(159)
프로세서 3 - ALU 제어와 주 제어 유닛 설계 안녕하세요, WH입니다. 프로세스 1과 프로세르 2를 통해 데이터 패스를 만들어 보았는데요, 반드시! 반드시! 그 내용을 알고 있어야 합니다! 왜냐고요? 이번 글이 끝난 뒤에, 다음번에 동작에 대해서 알려면 반드시 이해해야해요 2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정 프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정 안녕하세요! WH입니다. 이번 글부터는 프로세서 입니다. 사실 모든 것을 알 필요는 없지만. 프로세스와 메모리 정도는 알아야 하지 않을까 싶습니다. 그럼 어셈은요? 밑 단에서 일하시는 분이라 developer-wh.tistory.com 2022.02.09 - [컴퓨터 구조론( MIPS )] -..
프로세서 2- Load or Store 명령어, branch 명령어 안녕하세요. WH입니다. 이번 글은 lw, sw 그리고 beq 같은 분기 명령어의 데이터 패스에 대해 알아보겠습니다. Load or Store 명령어 데이터패스 일반적으로 사용하는 예시는 아래와 같죠? lw $t1, offset_value($t2) or sw $t1, offset_value($t2) 뭐 대체로 이런 형식이란 말이에요. lw와 sw는 베이스 레지스터( $t2 )와 명령어에 포함되어 있는 16비트 부호있는 변위 필드( offset_value )를 더해서 메모리 주소를 계산하잖아요? load 명령을 예로 들면, 메모리로 부터 읽어 들인 값을 $t1 에 써야 되죠? 그럼 레지스터 파일이 우선 필요하겠어요 읽기 포트 1개, 쓰기 포트 1개만 쓰겠네요? 또 필요한 게 뭐가 있을까요? 아 데이터 메모..
프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정 안녕하세요! WH입니다. 이번 글부터는 프로세서 입니다. 사실 모든 것을 알 필요는 없지만. 프로세스와 메모리 정도는 알아야 하지 않을까 싶습니다. 그럼 어셈은요? 밑 단에서 일하시는 분이라면 코드를 읽을 정도는 되야 겠지요. 프로세스 시작하겠습니다. 데이터가 어떤 패스로 흘러들어오는지 이것을 먼저 파악하는 것이 필요합니다. 가장 먼저 명령어 입니다. 명령어 인출 과정 1. PC 에는 현재 명령어의 주소가 들어 있습니다. 2. Read address로 그 값이 보내지고 ALU 로 값이 하나 보내집니다. 2-1 ALU로 보내진 주소에 4가 더해집니다. 왜냐면 바이트 주소이기 때문이죠. 2-2 명령어 메모리에서 주소에 해당하는 명령어를 내보냅니다. 어라? 너무 쉬운데? 그런데 이제부터 조금씩 복잡해 집니다...
명령어 : 컴퓨터 언어 8 ( feat. MIPS 어셈블리 코드 예시 ) 한참을 열심히 달려왔네요. 저만 달려 왔나요? 이번 글에서는 C 코드를 보여드리고 해당하는 부분을 코딩해 보며 마무리 하겠습니다. void swap( int v [], int k ) { int temp; tmep = v[k]; v[k] = v[k+1]; v[k+1] = temp; } void sort ( int v[], int n) { int i, j; for ( i =0 ; i=0 && v[j] > v[j+1]; j -=1) { swap(v,j); } } } 프로시저 swap의 MIPS 어셈블리 코드 swap : sll $t1, $a1, 2 # reg $t1 = k*4 add $t1, $a0, $t1 # reg $t1 = v + (k*4) lw $t0, 0($t1) # reg $t0 (temp) = v..
명령어 : 컴퓨터 언어 7 ( feat. 동기화, 번역, 실행) 안녕하세요. 개발자 WH 입니다. 이번 글은 병렬성과 동기화에 대한 글입니다. 시작해보도록 할게요. 병렬성과 명령어 : 동기화 테스크가 서로 독립적일 때는 병렬처리가 쉽지만 테스크들이 얽혀있어, 새로운 값을 어떤 테스크가 쓰게 된다면, 복잡해지게 되죠. 이런 상황에서는 특정 테스크가 언제까지 쓰기를 마쳐야 하는지를 알아야 다른 테스크들이 안전하게 읽을 수 있게 되는데, 이를 알기 위해서는 동기화가되어야 합니다. 즉 이런 동기화가 되지 않으면, 이벤트가 일어나는 순서에 따라 프로그램의 결과가 바뀌는 상황이 오는 데 이런 상황을 데이터 경쟁 관계라 합니다. 컴퓨팅에 있어서 동기화 메커니즘은 일반적으로 사용자 수준 소프트웨어 루틴에서 제공 됩니다. 물론 이 소프트웨어 루틴들은 하드웨어가 제공하는 동기화 명령을..
명령어 : 컴퓨터 언어 6 ( feat. 주소 지정 및 방식 ) 안녕하세요. WH 입니다. 이번 글에서는 32비트 상수를 지원하는 방법과 분기 명령어나 점프 명령서에서 사용되는 명령어 주소의 최적화에 대허서 알아볼게요. 아니 그걸 왜 알아야 되요? 편한 경우가 많으니까요! 불편함 속에서 편함을 찾아보자구요 32비트 수치 피연사자 프로그램에서 사용되는 상수는 대체로 작죠. 뭐 쓰는 숫자는 대게 2^16승 정도면 대략 표현이 될거에요. 그런데 그보다 큰 수를 쓸 때는 상위 16비트에 lui( load upper immediate ) 명령어에 ori ( 논리 연산자 )를 사용하면 쉽게 만들수 있답니다. 논리 연산자에 대해 기억이 나지 않는다면 아래 글을 참조해 주세요. 2022.02.07 - [컴퓨터 구조론( MIPS )] - 명령어 : 컴퓨터 언어 3 명령어 : 컴퓨터 ..
명령어 : 컴퓨터 언어 5 안녕하세요. 개발자 WH 입니다. 컴퓨터 구조론에 대해 정리하며 올리며, 저 역시 리뷰되는 좋은 시간인 것 같네요 이번 글은 프로시저에 대한 글입니다. 프로시저( procedure ) - 프로시저는 소프트웨어에서 추상화를 구현하는 방법인데요. 즉 프로시저나 함수는 이해하기 쉽고 재사용이 가능하도록 프로그램을 구조화 하는 방법 중 하나입니다. 큰 덩어리를 부분 부분 나누어 프래그래머가 해당 부분에 집중할 수 있게 해주죠. 프로시저에 값을 보내고 결과를 받아오는 일을 하는 것이 바로 인자 ( parameter )인데요. 프로그램의 다른 부분 및 데이터와 프로시저 사이의 인터페이스 역할을 한답니다. 프로그램이 프로시저를 실행할 데 아래의 6가지 단계를 거칩니다. 1. 프로시저가 접근할 수 있는 곳에 인수를 넣..
명령어 : 컴퓨터 언어 4 안녕하세요. WH 입니다 컴퓨터 구조 명령어 관련 벌써 4번 째 글이네요. 어디까지 쓸지 얼마나 쓸지는 아직 잘모르겠습니다만, 자세히 알려드리려고 노력해보겠습니다 판단을 위한 명령어 프로그래밍 언어에 if 문장으로 판단 기능을 표현하는데요. MIPS 에서는 어떻게 구현되어있는지 볼까요? 조건문 beq register1, register2, L1 bnq register1, register2, L2 beq는 branch if equal을 뜻하고 bne는 branch if not equal을 뜻한답니다. 이 두가지가 조건부 분기라 하는데요. ( conditional branch ) 예시를 보면서 이해해 볼게요 예시> i 와 j는 $s3 $s4 에 a, b, c 는 $s0, $s1, $s2에 해당한다고 가정해봅..