Branchjump

기능:실행 위치를 순차적인 것에서 벗어나 실행하게 된다.

jump와 function call 의 차이

jump는 address>address+4>address+8----jump---->new address 이렇게 가는 것을 의미한다.

function calld은 argument를 주고받아 함수를 호출한다. 레지스터값 데이터값들을 저장 및 복원한다.

address 의 구조

4byte 28byte

0000 ___00 | 32바이트중 4바이트는 page로 사용

jump

jump의 구조는

opcode jump target address

6byte 26byte로 이루어져 있다.

jump 사용 방법

위를 보면 ADDRESS가 0040000 0040004 0040008...이런식으로 되어있다.

순수대로 나가다가 J format에서 0040028로 jump하라는 지시가 나오게 되고 이를 수행한다.

중간은 아얘 훑지도 않고 그냥 지나가버린다.

jump의 저장방식

address 는 총 32byte 인데 어떻게 26byte에 저장할까?

page는 그대로 베끼고 address에서 뒤에 00 빼고 26바이트를 대입시켜준다.

즉 page는 변경 불가능하다.!

page를 변경하고 싶다면 jr을 사용한다.

jr

jr의 사용방식은 jr $<레지스터> 이다. 즉 레지스터의 2^32의 데이터를 모두 사용하여 주소를 저장하는 것이다.

jr $ 의 방식을 이용한다.

branch

branch는 I instruction format으로 맨뒤 2^16에 operand를 저장한다.

맨앞자리가 sign bit이므로 –2^15~2^15를 저장하게 된다.

즉 2^15bit씩 메모리를 이동할 수 있게된다. 하지만 실제로 메모리는 2^32byte로 구성되어 있다.

(=2^30word)

위를 보면 code에 뒤에 0005라고 되어 있는데 이는 5만큼 뛰라는 의미이다. 하지만 원래는 6만큼 뛰어야 하는데 왜 5만큼만뛰는것일까?? 그것은 순차적 순서에서 미리 +1이 내장되어있기 때문이다.

#branch not equal

#s1=s2이면 j문을 실행하고 다르면 L2로 간다.

bne $s1,$s2,L2

j L1

매크로&함수

매크로는 선언을 한후 이용하게 되면 해당 소스파일로가서 선언한 함수를 그때그때 가져오는 것이 아니라 그자체로 복사 붙여넣기가 되는 것이다. 따라서 사용시 소스파일로 가는 것이 아니기 때문에 시간이 적게걸린다. 하지만 용량이커진다. 이와 반대로 함수는 사용시마다 함수를 소스파일로 가서 빌려오고 빌려오는방식이다(argument_다른 장소에 있는 데이터 를 주고받는다.), 사용시 용량은 적지만 시간이 많이걸린다.

for문

사용방법: 초기화 – loop-loop body- loop 조건

if문

if문의 구조

bne $<>,$<>,else

add $...

j exit

else~

exit ~

이런 방식으로 겹치는 구간이 생기지 않도록 잘 구성시켜 준다.

**

만약

if(i<=j) 가 있다면 어ᄄᅠᇂ게 할것인가

x= x+1;

z= 1;

else

y=y-1

z=2*z

를 코딩 . $s1=i, $s2=j이다.

#같거나 작다가 없어 작다만 표현 가능하다. 따라서 i>j임과 else인 i<=j 로 나타내는 것이 편할거같아 slt를 다음과같이 작성하였다.

#t0에 1이 담기면 s2<s1. 즉 위에서 else 조건을 만족하고 t0에 0이 담기면 i<=j를 만족하여 그냥 조건을 실행하게된다.

slt $t0, $s2, $s1

#t0가 1이면 else로 간다. 즉 else에는 else 조건을 써주고 t0가 0이면 가던길 가므로 가던길에는 위에 그냥조건을 써준다.

bne $t0, $zero, else

addi $t1,$t1,1

addi $t3,$zero,1

j end

else: addi $t2,$t2,-1

addi $t3,$t3,$t3

'언어 > mips' 카테고리의 다른 글

mips_example2  (0) 2017.12.26
mips_example1  (0) 2017.12.26
li_srl_sll_or_nor_zero_la_lw  (0) 2017.12.26
기본구조_보수_데이터_immediate  (0) 2017.12.26

+ Recent posts