본문 바로가기

General/OS & CS

[컴퓨터구조] 기본 명령어 정리


기본 명령어 정리 ( 컴퓨터 구조 )

 

 

산술연산 명령어(arithmetic instruction)

 

- add -

add $s1, $s2, $s3

$s1 자리는 destination register, $s2, $s3 자리는 source register이다.

source register들을 add해서 $s1 register에 저장한다.

 

- sub -

sub $s1, $s2, $s3

$s1 자리는 destination register, $s2, $s3 자리는 source register이다.

source register들을 sub해서 $s1 register에 저장한다.

 

- addi -

addi $s1, $s2, immediate

$s1 자리는 destination register, $s2는 source register, immediate는 실제상수가 온다.

source register와 immediate를 add해서 $s1 register에 저장한다.

 

- subi -

addi 명령어로 subi의 모든 기능을 대신 할 수 있기때문에 subi는 없다.

 

 

데이터전송 명령어(memory access instruction)

 

- lw -

lw $s1, immediate($s2)

$s1 자리는 destination register, $s2는 메모리의 첫번째-시작주소가 있는 register,

immediate는 메모리의 시작주소부터 실제 데이터가 저장되있는 주소까지 찾아가는 index.

lw instruction은 load word이다. 즉, word(데이터)를 memory로부터 register로 가져오는 것이다.

 

- sw -

sw $s1, immediate($s2)

$s1 자리는 source register, $s2는 메모리의 첫번째-시작주소가 있는 register,

immediate는 메모리의 시작주소부터 실제 데이터가 저장되어질 주소까지 찾아가는 index.

sw instruction은 store word이다. 즉, word(데이터)를 register로부터 memory에 저장해준다.

 

: lw와 sw는 메모리 접근 명령어이고 lw와 sw의 register들의 순서는 일관성을 주기위해, 서로 같게 한듯하다.(lw는 앞에있는 register에 저장, sw는 뒤쪽 register로 부터 찾아가는 memory에 저장)

 

 

논리 명령어(logical instruction)

 

- sll -

sll $s1, $s2, immediate

$s1 자리는 destinateion register, $s 자리는 source register, immediate는 shift 할 bit 수

$s2에 있는 데이터를 left로 shift 해서 $s1에 저장하는 명령어(shift-left logical instruction)

 

: 어떤 숫자 데이터에 2의 배수를 곱하는 것은 왼쪽으로 한비트 옮기는 것과 마찬가지

  이를 이용하면 sll 명령어 사용으로 2의 배수 곱셈에 관해서 편리하게 처리할 수 있다.

 

- srl - 

srl $s1, $s2, immediate

$s1 자리는 destinateion register, $s 자리는 source register, immediate는 shift 할 bit 수

$s2에 있는 데이터를 right로 shift 해서 $s1에 저장하는 명령어(shift-right logical instruction)

 

- and -

and $s1, $s2, $s3

$s1 자리는 destination register, $2, $3는 source register.

$2, $3를 and 연산을 한 후 그 결과를 $s1에 저장한다.

 

- or -

or $s1, $s2, $s3

$s1 자리는 destination register, $2, $3는 source register.

$2, $3를 or 연산을 한 후 그 결과를 $s1에 저장한다.

 

- nor -

nor $s1, $s2, $s3

$s1 자리는 destination register, $2, $3는 source register.

$2, $3를 or 연산을 하고 그 결과에 not 연산을 한 후 $s1에 저장한다.

 

- andi -

andi $s1, $s2, immediate

기본 구조는 위의 명령어들과 같고, immediate 자리에 상수가 온다.

$s2와 상수를 bit 대 bit 로 and 연산한 후 $s1에 저장한다.

 

- ori -

andi $s1, $s2, immediate

기본 구조는 위의 명령어들과 같고, immediate 자리에 상수가 온다.

$s2와 상수를 bit 대 bit 로 or 연산한 후 $s1에 저장한다.

(상수와 register의 bit 대 bit 연산이란, 상수를 binary number로 바꾼후 bit 연산을 한다는 의미)

 

: nori는 실제적으로 많이 쓰이지 않아서 명령어가 존재하지 않는다.

 

 

흐름 제어(Control flow instruction)

 

조건부 분기

 

- bne -

bne $t0, $t1, Label

Branch on not equal, $t0와 $t1이 같지 않은경우에 Label 위치로 jump하는 명령어.

 

- beq -

beq $t0, $t1, Label

Branch on equal, $t0와 $t1이 같은경우에 Label 위치로 jump하는 명령어.

 

- slt -

slt $s1, $s2, $s3

set on less than, $s2 와 $s3 을 비교, $s2가 작으면 $s1 = 1, $s2가 크면 $s1 = 0;

 

- slti -

slti $s1, $s2, immediate

set on less than, $s2 와 immediate 을 비교, $s2가 작으면 $s1 = 1, $s2가 크면 $s1 = 0;

 

: slt, slti는 bne, beq등과 사용하여 조건문등을 나타낸다.

 

무조건 점프

 

- j -

j immediate

Jump, 위의 두 명령어들과 다르게 무조건 jump, 위의 immediate 주소로 점프.

 

- jr -

jr $ra

$ra 레지스터가 가지고 있는 주소위치로 jump.

procedure를 끝내고 원래의 루틴으로 돌아갈때 사용