2.1 ) ๋ค์ C๋ฌธ์ฅ์ ์ํ LEGv8 ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ๋ผ. C๋ณ์ f,g,h๋ ๋ ์ง์คํฐ X0, X1, X2์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ต์ ๊ฐ์์ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ผ.
f = g + ( h - 5 ) ;
add f, h, -5
add f, f, g
//h์ -5๋ฅผ ๋ํ๊ณ ์ด๋ฅผ ๋ค์ g๋ ๋ํ๋ค.
2.3 ) ๋ค์ C๋ฌธ์ฅ์ ํด๋นํ๋ LEGv8 ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋? C๋ณ์ f, g, h, i, j๋ ๋ ์ง์คํฐ X0, X1, X2, X3, X4์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ฐฐ์ด A์ B์ ์์ ์ฃผ์๋ ๋ ์ง์คํฐ X6๊ณผ X7์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
B[8] = A[i - j];
SUB x9, x3, x4 //์์์ x9๋ ์ง์คํฐ์ i-j ๋ฅผ ํด์ค
LDUR x9, [x6, x9] // A๋ฐฐ์ด์ด ์์ ์ฃผ์๊ฐ x6์ด๊ณ , i-j๊ฐ x9์ ์๋ค. ๋ฐ๋ผ์ A[i-j]๋ฅผ ์ป์
STUR X9, [x7, #64] // B[8]์ ์ ์ฅ.
2.4) ์๋ LEGv8 ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด ์ํ์ค์ ๋์ํ๋ C๋ฌธ์ฅ์? ๋ณ์ f, g, h, i, j๋ ๋ ์ง์คํฐ x0, x1, x2, x3, x4์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ฐฐ์ด A์ B์ ์์์ฃผ์๋ ๋ ์ง์คํฐ X6๊ณผ x7์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
B[g] = A[f] + A[1+f];
2.7) 0xabcdef12๋ฅผ ์ญ์ง์๋ก ๋ณํํ๋ผ.
๋จผ์ abcdef12๋ฅผ 2์ง์๋ก ๋ฐ๊พธ๊ณ ์ด๋ฅผ 10์ง์๋ก ๋ฐ๊พธ๋ฉด 2882400018์ด ๋์จ๋ค.
2.11) ๋์ง์คํฐ X0๊ณผ X1์ด ๊ฐ 0x8000000000000000๊ณผ 0xD000000000000000 ์ ๊ฐ๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
2.11.1) ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ํํ ํ์ X9 ๊ฐ์?
Add X9, X0, X1
x0์ ์ด์ง์๋ก ๋ฐ๊พธ๋ฉด 1000000000000000000000000000000000000000000000000000000000000000(2)์ด ๋๊ณ ,
x1์ ๊ฐ์ ์ด์ง์๋ก ๋ฐ๊พธ๋ฉด 1101000000000000000000000000000000000000000000000000000000000000(2)์ด ๋๋ค.
์ด ๋๊ฐ๋ฅผ ๋ํ๋ฉด 0101000000000000000000000000000000000000000000000000000000000000์ด ๋จ์ผ๋ก,
X9์ ๊ฐ์ 0x5000000000000000 ์ด๋ค.
2.11.2) x9๊ฐ์ด ์ํ๋ ๊ฐ์ธ๊ฐ, ์๋๋ฉด ์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋ฌ๋๊ฐ?
์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋ฌ๋ค.
2.11.3) ๋ ์ง์คํฐ x0๊ณผ x1 ๊ฐ์ด ์์ ๊ฐ์ ๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ํํ ํ์ x9 ๊ฐ์?
SUB X9, X0, X1
1011000000000000000000000000000000000000000000000000000000000000์ด ๋จ์ผ๋ก, x9์ ๊ฐ์ 0xB000000000000000 ์ด๋ค.
2.11.4) x9๊ฐ ์ํ๋ ๊ฐ์ธ๊ฐ, ์๋๋ฉด ์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋ฌ๋๊ฐ?
์ํ๋ ๊ฐ์ด๋ค. ์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋์ง ์์๋ค.
2.11.5) ๋ ์ง์คํฐ x0๊ณผ x1 ๊ฐ์ด ์์ ๊ฐ์ ๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ํํ ํ์ x9 ๊ฐ์?
Add X9, X0, X1
ADD X9, X9, X0
0x5000000000000000 ์๋ค x0์ ๋ํ๋ฉด x9 ์ ๊ฐ์ 0xD000000000000000์ด ๋๋ค.
2.11.6) X9๊ฐ์ด ์ํ๋ ๊ฐ์ธ๊ฐ, ์๋๋ฉด ์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋ฌ๋๊ฐ?
์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋ฌ๋ค.
2.13) ๋ค์ ์ด์ง์์ ํด๋นํ๋ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด ์ข ๋ฅ์ ๋ช ๋ น์ด๋?
1000 1011 0000 0000 0000 0000 0000 0000(two)
10001011000์ด add๋ฅผ ๋ปํ๊ณ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด ์ข ๋ฅ๋ R ํ์ ์ด๋ค., ๋๋จธ์ง ํ๋๋ 0์ด๊ธฐ์ ํผ์ฐ์ฐ์๋ค๊ณผ ์๋ฆฌ์ด๋์ ์๋ค.
์ฆ, ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ก ํํํ๋ฉด add 0, 0, 0 ์ด๋ค.
2.18) ๋ ์ง์คํฐ๊ฐ์ด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ๋ค.
X10 = 0x00000000AAAAAAAA, X11 = 0x1234567812345678
(2์ง์๋ก ๋ฐ๊พธ๋ฉด x10 = 10101010101010101010101010101010,
x11 = 1001000110100010101100111100000010010001101000101011001111000)
2.18.1) ๋ ์ง์คํฐ ๊ฐ์ด ์์ ๊ฐ์ ๋ ๋ค์ ๋ช ๋ น์ด ์ํ์ค ์คํ ํ X12๊ฐ์ ์ผ๋ง์ธ๊ฐ?
LSL X12, X10, #4
ORR X12, X12, X11
x10์ ๊ฐ์ ์ผ์ชฝ์ผ๋ก 4์นธ ์ด๋ํ๋ฏ๋ก 10101010101010101010101010100000์ด ๋๊ณ , ์ด๋ 0xAAAAAAAA0์ด๋ค. ์ด๋ฅผ x11๊ณผ or ์ฐ์ฐ์ ํ๋ฉด x12์ ๊ฐ์ 0x1234567ABABEFEF8์ด ๋๋ค.
2.18.2) ๋ ์ง์คํฐ ๊ฐ์ด ์์ ๊ฐ์ ๋ ๋ค์ ๋ช ๋ น์ด ์คํ ํ X12 ๊ฐ์ ์ผ๋ง์ธ๊ฐ?
LSL X12, X11, #4
x11์ ๊ฐ์ ์ผ์ชฝ์ผ๋ก 4๋ฒ shiftํ๋ฉด x12์ ๊ฐ์ 0x2345678123456780 ์ด ๋๋ค.
2.18.3) ๋ ์ง์คํฐ๊ฐ์ด ์์ ๊ฐ์ ๋ ๋ค์ ๋ช ๋ น์ด ์ํ์ค ์คํ ํ X12๊ฐ์ ์ผ๋ง์ธ๊ฐ?
LSL X12, X10, #3
ANDI X12, X12, 0xFEF
x10์ ๊ฐ์ ์ผ์ชฝ์ผ๋ก 3๋ฒ shiftํ๋ฉด 0x555555550์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ 0xFEF(111111101111)๋ฅผ ANDI ์ฐ์ฐ์ ํ๋ฉด x12์ ๊ฐ์ 0x540(010101000000)์ด ๋๋ค.
2.26) ๋ค์ C์ฝ๋๋ฅผ LEGv8 ์ฝ๋๋ก ๋ณํํ๋ ์ต์ ๊ฐ์์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ผ. ๋ณ์ a, b, i, j๋ ๋ ์ง์คํฐ x0, x1, x10, x11์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ฐฐ์ด D์ ์์ ์ฃผ์๋ ๋ ์ง์คํฐ x2์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
for (i=0; i<a; I++)
for (j=0, j<b; j++)
D[4*j] = i + j;
add X10, X10, $zero # i = 0
add X11, X11, $zero # j = 0
L1 : slt X12, X10, X0 # i<a
beq X12, $zero, EXIT # if X12 == 0, Exit
add X11, $zero, $zero # j=0
addi X10, X10, $1 # i ++
L2 : slt X13, X11, X1 # j<b
beq X13, $zero, L1, # if $t3 == 0, goto L1
add X14, X0, X11 # $t4 = i+j
muli X15, X11, $4 # $t5 = $t1 * 4
sll X15, X15,$2 # $t5 << 2
add X15, X15, X2 # D + $t5
sw X14, X15(X2) # store word $t4 in addr $t5(D)
addi X10, X11, $1 # j ++
j L2 # goto L2
EXIT :