용어
Memory : stores a programs instructions and data
size of an instrcution : 4 byte
size of data : Byte(1 byte), Half word(2 byte), Word(4 byte), Double (8 byte) => memory read/write size
Register : memory place in a processor (CPU), store intermediate results during calculation, or values often used
size of register : 4 byte
Text Section : save the program instructions, save read-only data (global data, static, can be saved in text section when it is read-only)
Data Section : save global variable or static variable
Bss Section : always initialized as 0 (block starting symbol)
Subroutine : A sequence of instructions that performs a specific task multiple times.
CWP : Current Window Pointer, Pointer for the currently active register set. when the 'save' is executed -1, 'restore' is executed +1
WIM : Window Invalid Mask, the last unused register set #
Operating System : handles the register window overflow / underflow
save, restore 명령어 실행 후, CPU가 CWP, WIM 값을 읽은 뒤, overflow, underflow 확인
만약 next CWP == WIM 이라면 system call 이 발생한다.
그리고 운영체제가 제어권을 가져간 뒤, overflow/underflow 를 처리하고, 다시 프로그램에 제어권을 돌려준다.
Leaf Subroutine : A subroutine that does not call another.
restrict the available registers => %o0 ~ %o5 & %g0, %g1
rand_max => 32767
FPU : calculate floating point number
fcmps => fcc => ELGU (Equal, Less, Greater, Unordered == NaN)
floating point arguments 를 위한 register window는 없다.
백업을 잘 해두자.
ISR
DMA
문법
ld [R + Constant], S => o
ld [R - Constant], S => o
ld [R1 + R2], S => o
ld [R1 - R2], S => x
constant range => -4096 ~ 4095 (13bit)
ldsb, ldsh => 4byte register 의 오른쪽부터 채우고, 남은 공간은 sign bit로 채움
ldub, lduh => 4byte register 의 오른쪽부터 채우고, 남은 공간은 0 으로 채움
R + A 의 값은 읽고쓰는 단위 크기의 배수여야 한다.
(ld = 4의 배수, ldd = 8의 배수)
아래와 같은 문법도 가능하다.
.data
.word 3, 3*3, 3*3 >> 3
set = sethi (high 22 bit) + or (low 10 bit) = sethi %hi(label), S / or S, %lo(label), S
아래는 모두 같다.
save %sp, -88, %sp
save %sp, -(64 + (5*4)) & -8, %sp
save %sp, -(64 + (5*4)) & 0xfffffff8, %sp
jmpl 문법은 아래와 같이 작성한다.
jmpl %o7 + 8, %g0
그러나 명령어 내부적으로는 displacement 주소값의 차이를 4로 나눈 값을 저장한다. (출발 명령어와 목표 명령어 사이 명령어 개수)
명령어의 위치 주소값을 라벨을 통해 아래와 같이 메모리에 저장할 수 있다.
s_tbl: .word case_0, case_1, case_2
save, restore 를 가산기로 사용하는 경우, R, A, S 에서 S 는 레지스터셋이 변경된 후 기준으로 작성
ret : return to i7 + 8
retl : return to o7 + 8
True & False
스택은 64byte가 최소 save 할 수 있는 양인가? => T
leaf subroutine 은 스택할당이 되지 않는가? => T
모든 서브루틴은 종료되면 스택 프레임을 반환한다. -> F
서브루틴에 전달할 수 있는 매개변수는 최대 6개이다. -> F
'CS > 어셈블리' 카테고리의 다른 글
[SPARC] 39. FPU Instructions 사용 예제 (배정밀도, 매개변수) (0) | 2023.12.08 |
---|---|
[SPARC] 38. FPU Instructions 사용 예제 (단정밀도) (0) | 2023.12.08 |
[SPARC] 37. 실수 계산 & FPU & FPU Instructions (0) | 2023.12.07 |
[SPARC] 36. Floating Point (0) | 2023.12.07 |
[SPARC] 35. Bubble Sort 구현 (2) | 2023.12.07 |