본문 바로가기
반응형

일단 제가 준비한 건,261

컴퓨터 구조 slt, sltu, slti, sltiu, Endianness (RISC-V) RISC-V에서 조건에 따른 결괏값을 boolean으로 돌려주는 instructions들은 총 4가지가 있다. slt ( set less than ) sltu ( set less than unsigned ) slti ( set less than immediate ) sltiu ( set less than immediate unsigned ) slt & sltu R-type으로 의미는 ~보다 작으면 1, 아니라면 0으로 결괏값을 반환한다. slt t0, s0, s1 이렇게 돼 있는 명령어를 해석하면 if (s0 < s1) then t0 =1; else t0 = 0처럼 해석할 수 있다. R-type이니 extension도 필요 없다. 그대로 들어가서 s0와 ALU에서 연산 후에 결과가 나와 t0로 들어가는 .. 2022. 3. 2.
컴퓨터 구조 Branch instruction ( beq, jal, jump 범위, RISC-V ) Branch instruction을 왜 쓰냐 하면 조건에 따른 동작을 하기 위해서 사용한다. 즉, 이동하기 위해서이다. PC 레지스터가 동작을 하며 계속 증가하다가 branch 명령어를 만나면 조건에 따라 PC의 값을 바꾼다. 그리고 바뀐 주소로 이동하여 동작을 수행한다. 이렇게 branch 명령어는 PC와 밀접한 관계가 있다. branch 명령어는 크게 2가지로 나뉠 수 있다. 조건에 따른 branch와 조건과 상관없이 동작하는 branch가 있다. 하나씩 보자. 1. Conditional Branch 조건에 따른 명령어이다. 조건이라 함은 비교를 말한다. 조건은 ==, , !=, = 이렇게 6가지가 있다. 아래 명령어를 보자 - beq (branch if equal) ( a == b ) - bne (.. 2022. 3. 1.
컴퓨터 구조 pseudo instructions ( lui, auipc, 가짜 명령어, 의사 코드, RISC-V ) 먼저 2가지 명령어를 알아보고 pseudo를 알아보자. lui (load upper immediate) 간단히 보자, u-type으로 lui t0, 0x12345 하면 t0 레지스터의 왼쪽에 0x12345를 채워 넣고 나머지 bit는 0으로 채워 넣는다. ( 0x12345인 이유는 imm이 20bit이다. ) auipc (add upper immediate to pc) lui와 똑같은 u-type이다. 간단한 동작이다. auipc t0, 0x12345라고 하면 먼저 lui를 하고 pc 레지스터랑 add 한다. pc = 0x0102_3040이라 한다면 아래와 같다. 0x1234_5000인 이유는 lui를 했기 때문이다. pseudo instructions ( 의사 코드 (가짜) 명령어) 번역 그래도 가짜 .. 2022. 2. 27.
컴퓨터 구조 lb, lbu, sb instruction (RISC-V) lb (load byte) and lbu ( load byte unsigned ) I-type으로 word를 읽어오는 것이 아니라, 바이트(byte)를 읽어오는 명령어이다. 사용은 lb t0, 1(s3)와 같이 한다.어떤 뜻이냐면 s3 + 1 한 주소에 있는 데이터를 t0에 집어넣는다. 그런데 문제가 있다. 만약 32bit cpu라면 레지스터는 4byte(32bit)의 크기를 가지고 있다. 하지만 lb는 byte를 불러오는 명령어로, 1byte라 사이즈가 안 맞다. 이때 어떻게 될까? 데이터를 LSB에 채우고 나머지를 sign extension 한다. 예로 FF를 불러오면 FFFF_FFFF로 채워진다. 여전히 -1의 값을 가지니 문제가 없다. 이어서 다른 명령어인 lbu ( load byte unsign.. 2022. 2. 27.
컴퓨터 구조 lw, sw instruction (RISC-V) lw (load word) lw는 I-type이다. 바로 예를 들어보자 lw t0, 24(s3)라고 있으면 s3 주소에 24를 더한 후 결괏값에 해당하는 주소에 있는 값을 t0에 저장한다. s3가 0x94라면 24는 0x18이다. 이 둘을 더한 결괏값은 0xac인데 이 주소에 해당하는 데이터를 t0레지스터에 저장한다. 이때 s3를 base라 하고 +2047, -2048로 제한이 있는 이유는 imm [11:0]이라 12bit로 정해져 있기 때문이다. sw (stores writes) lw의 s-type으로 lw와 반대 동작을 한다. lw는 레지스터에 값을 저장하지만, sw는 반대로 레지스터에 있는 값을 메모리에 저장한다. 예를 들어보자 sw t2, 8(s3)라면 t2에 저장돼 있는 데이터를 s3 + 8의 .. 2022. 2. 27.