기본 명령어 정리 ( 컴퓨터 구조 )
산술연산 명령어(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를 끝내고 원래의 루틴으로 돌아갈때 사용
'General > OS & CS' 카테고리의 다른 글
[컴퓨터 구조] 프로시저 procedure / 함수 fuction (0) | 2009.11.30 |
---|---|
[컴퓨터 구조] 레지스터 Register (0) | 2009.11.30 |
[OS] 캐시, 캐시메모리 (0) | 2009.11.30 |
[OS] 논리 주소공간 대 물리 주소공간 (0) | 2009.11.30 |
[OS] 분산시스템에서 미들웨어의 기능 (0) | 2009.11.30 |