๐Ÿ’ป/CS

[์ž„๋ฒ ๋””๋“œ] MIPS ๋…ผ๋ฆฌ์—ฐ์‚ฐ

ruhz 2020. 10. 22. 03:11

์ด์ „์— ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€๋Š” ์•Œ์•„๋ณด์•˜๋‹ค. add \$t0, \$s1, \$s2๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์–ด์…ˆ๋ธ”๋Ÿฌ๊ฐ€ 02324020์˜ ๋จธ์‹ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”(์ ˆ์ฐจ ์ž์„ธํžˆ) CPU์—๊ฒŒ ๋ช…๋ นํ•˜๋ฉด ๋ ˆ์ง€์Šคํ„ฐ์˜ \$s1,  \$s2๋ฅผ ๋ง์…ˆํ•˜์—ฌ \$t0๊ฐ€ ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ์ด ์ด๋ฃจ์–ด์ง„๋‹ค. 

 

 

๋…ผ๋ฆฌ ์—ฐ์‚ฐ

๋…ผ๋ฆฌ์—ฐ์‚ฐ๋„ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. sll(shift left logical), srl(shift right logical)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, op์™€ funct์˜ ๊ฐ’์€ ์—ฐ์‚ฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋“ค์„ ์ฐพ์•„ ์จ์ฃผ๋ฉด๋œ๋‹ค. ์ด๋™์—ฐ์‚ฐ์€ ๋Œ€์ƒ์ด ํ•˜๋‚˜์ด๋ฏ€๋กœ, rs๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. shamt(shift amount)์˜ ๊ฐ’์„ ์–ผ๋งˆ๋‚˜ shiftํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ์ด๋‹ค. 'sll \$t2, \$s0, 4'๋Š” \$s0์˜ ๊ฐ’์„ 4์นธ ์™ผ์ชฝ์œผ๋กœ shiftํ•œ ๊ฒฐ๊ณผ๋ฅผ t2์— ์ €์žฅํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋“ค์€ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์ž.

  • sll, slr : ์‹œํ”„ํŠธ ์—ฐ์‚ฐ
  • and, or : ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๊ทธ and/or ๋งž๋‹ค.
  • nor : not์ด ์—†์œผ๋ฏ€๋กœ, ๋Œ€์‹  'nor \$ใ…, \$ใ…, \$zero'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์กฐ๊ธˆ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ช…๋ น์–ด๋กœ ์กฐ๊ฑด๋ฌธ๋„ ์žˆ๋‹ค

  • beq rs, rt, L1 : if(rs==rt) {branch to instruction labeled L1;}
  • bne rs, rt, L1 : if(rs!=rt) {branch to instruction labeled L1;}
  • j L1 : jump to instruction labeled L1;

<C์–ธ์–ด ์ฝ”๋“œ>

while (save[i] == k)
    i += 1;

 

<MIPS ์ฝ”๋“œ>

# i, k๋Š” $s3, $s5์— ๋กœ๋“œ ๋˜์–ด์žˆ๊ณ , save์˜ ์ฃผ์†Œ๊ฐ’ $s6์— ์ €์žฅ๋จ

Loop:   sll    $t1, $s3, 2      # t1 = i * 4
        add  $t1, $t1, $s6      # t1 = save์˜ ์ฃผ์†Œ๊ฐ’ + i*4
        lw    $t0, 0($t1)       # t0 = t1์˜ value
        bne  $t0, $s5, Exit     # if (t0 == k) break;
        addi $s3, $s3, 1        # i = i+1
        j      Loop             # go to Loop:
Exit:   ...