컴퓨터 구조 및 설계 2장 연습 문제 풀이
* 개인적으로 문제를 푼 것이며, 풀이 및 계산 과정에 오류가 있을 수도 있습니다. * 연습문제는 컴퓨터 구조 및 설계 5판 기준입니다. |
[2.4] 다음과 같은 MIPS 명령어들이 주어졌을 때 이에 해당하는 C문장은 무엇인가? 변수 f,g,h,i,j,는 각각 레지스터 $s0,$s1,$s2,$s3,$s4에 할당되었고, 배열 A와 B의 시작 주소는 레지스터 $s6과 $s7에 들어있다고 가정한다. |
sll $t0, $s0, 2 // $t0 = f * 4 좌로 2만큼 비트이동, 2^2 배 |
A: B[g] = A[f+1] + A[f] |
[2.7] 값 0xabcdef12가 리틀엔디안 컴퓨터와 빅엔디안 컴퓨터에서 어떻게 저장되는지 보여라. 단, 데이터는 주소 0번지에 저장된다고 가정한다. |
A : 리틀 엔디안은 하위 바이트가 먼저 저장되고, 빅엔디안은 상위 바이트가 먼저 저장되므로 리틀엔디안 : 12, ef, cd, ab 빅엔디안 : ab, cd, ef, 12 순서로 저장된다. |
[2.12] 레지스터 $s0와 $s1이 값 0x80000000과 0xD0000000을 갖고 있다고 가정한다. |
1) 다음 명령어를 수행 한 후의 $t0값은 무엇인가? add $t0, $s0, $s1 |
A : $t0 = $s0 + $s1이 되므로 0x80000000 + 0xD0000000 = 0x150000000 이다. |
2) $t0값이 원하던 값인가 아니면 오버플로가 일어났는가? |
A : 오버플로가 일어났다. |
3) 레지스터 $s0와 $s1 값이 위와 같을 때 다음 명령어를 수행한 후의 $t0값은 무엇인가? sub $t0, $s0, $s1 |
A : $t0 = $s0 - $s2 이므로 0x80000000 - 0xD0000000 = -0x50000000이다. |
4) $t0 값이 원하던 값인가 아니면 오버플로가 일어났는가? |
A : 원하던 값이다. |
5) 레지스터 $s0와 $s1 값이 위와 같을 때 다음 명령어를 수행 한 후의 $t0값은 무엇인가? add $t0, $s0, $s1 add $t0, $t0. $s0 |
A: $t0 = $s0 + $s1 = 0x80000000 + 0xD0000000 = 0x150000000 나온 $t0값에 $s0를 더해 다시 넣는다. $t0 = $t0 + $s0 = 0x150000000 + 0x80000000 = 0x1D0000000 |
6) $t0 값이 원하던 값인가 아니면 오버플로가 일어났는가? |
A : 오버플로가 일어났다. |
[2.15] 다음 명령어에 대한 16진수 표현은 무엇인가? sw $t1, 32($t2) |
A : sw는 I타입이고, 구성요소는 opcode, rs, rt, immediate 4개가 있다. sw opcode 값은 10진수로 43이고, 2진수로 변환하면 sw - 101011 $t1 -> 레지스터 9번이므로 01001 $t2 -> 레지스터 10번이므로 01010 immediate 값은 32메모리주소를 가진 16비트므로 -> 0000 0000 0010 0000 위 순서로 나열해서 자르면 2진수로는 1010 1101 0100 1001 0000 0000 0010 0000 16진수로 표현하면 0xAD490020 |
[2.17] 다음 MIPS 필드가 나타내는 명령어의 종류, 어셈블리 명령어, 명령어의 이진 표현을 나타내라. op = 0x23, rs = 1, rt = 2, const = 0x4 |
A: op=0이 아니면 대부분 I타입을 의미한다. 그러므로 I타입이며, opcode의 16진수 0x23을 10진수로 바꾸면 35이며, 이는 lw 명령어의 값과 같다. const는 I타입에서 immediate 값을 의미하니 위 값들을 2진수로 나열하면 opcode = 100011 rs = 00001 rt = 00010 immediate = 0000 0000 0000 0100 이 값을 나열하고 4자리씩 나누어 나열하면 1000 1100 0010 0010 0000 0000 0000 0100 이 된다. |
[2.20] 레지스터 $t0의 비트 16-11을 추출하여 $t1의 비트 31-26을 대체하려한다. 단 $t1의 다른 비트들은 변화해서는 안된다. 이를 수행하는 최소 크기의 MIPS 명령어 시퀀스를 작성하라. |
A: srl $t0, $t0, 11 // 우로 11만큼 비트 이동, 0~10 사이의 비트는 삭제됨 sll $t0, $t0, 26 // 좌로 26비트 만큼 이동, 11~16 사이의 비트를 제외한 모든 비트가 삭제됨. sll $t1, $t1, 6 // 좌로 6만큼 비트 이동, 왼쪽 끝의 26~31 사이의 비트는 삭제됨. srl $t1, $t1, 6 // 다시 우로 6만큼 비트 이동, 26~31 사이의 비트는 0으로 초기화되고, 나머지는 원래대로 돌아옴 or $t1, $t1, $t0 // $t1과 $t0 or연산하여 계산. 이때 $t0는 대체하려는 내용을 제외하곤 전부 0이고, $t1은 대체하려는 부분 |
'전공 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터 구조 및 설계 4장 연습 문제 풀이 (1) | 2021.01.04 |
---|---|
컴퓨터 구조 및 설계 1장 연습문제 풀이 (0) | 2021.01.02 |