컴퓨터 구조 - 7. 컴파일러 (to Assembly)

JeongSH·2024년 10월 6일

컴퓨터 구조

목록 보기
7/11

Logical Operations

Shift Left: LSL
Shift Right: LSR
Bit-by-bit AND: AND, ANDI
Bit-by-bit OR: ORR, ORRI
Bit-by-bit NOT: EOR, EORI

Conditional Operations

CBZ: Compare and branch if zero.
CBNZ: Compare and branch if not zero.
B: Branch to Label.

More Conditaional Operations

ADDS, ADDIS, ANDS...
-> 값을 저장하고 프로그램 상태 레지스터에 값을 업데이트
N: negative
Z: zero
V: overflow
C: carry

overflow: 연산 결과값이 나타낼 수 있는 범위 초과
carry: MSB비트에서 그 자리 위로 올림 발생

1+127 = 0b00000001 + 0b01111111 = 0b10000000 = -128
(overflow만 발생)
1-1 = 0b00000001 + 0b11111111 = 0b00000000 = 0
(carry만 발생)

Compiling If Statements

if (i==j) f = g + h;
else f = g - h;  //f,g,h,i,j in X19, X20, X21, X22, X23


      SUB X9, X22, X23
      CBNZ ELSE
      ADD X19, X20, X21
      B EXIT
ELSE: SUB X19, X20, X21
EXIT: ...

Compiling Loop Statements

while (save[i] == k) i += 1; //i, k, save in X22, X24, X25

LOOP: LSL X10, X22 #3
      ADD X10, X10, X25
      LDUR X9, [X10, #0]
      SUB X11, X9, X24
      CBNZ X11 EXIT:
      ADD X22, X22, #1
      B LOOP
EXIT:

Compiling Leaf Procedure Statements


long long int leaf_example (long long int g, long long int h, long long int i, long long int j) {
	long long int f;
    f = (g + h) - (i + j);
    return f;
}

//g,...,j in X0,...,X3
//f in X19

//임시로 X9, X10을 사용하고 지역 변수인 f을 저장하기 위해 X19를 사용한다. 따라서 3개의 임시 값을 백업해놓고 해당 위치의 레지스터를 사용해서 처리한다.

SUBI SP, SP, #24
STUR X10, [SP, #16]
STUR X9, [SP, #8]
STUR X19, [SP, #0]
ADD X9, X0, X1
ADD X10, X2, X3
SUB X19, X9, X10
ADD X0, X19, XZR
LDUR X10, [SP, #16]
LDUR X9, [SP, #8]
LDUR X19, [SP, #0]
ADDI SP, SP, #24
BR LR

Compiling Non-Leaf Procedure Statements

int fact (int n) {
	if (n < 1) return 1;
    else return n * fact(n - 1);
}
// n in X0, result in X1


fact:
	SUBI SP, SP, #16
    STUR LR, [SP, #8]
    STUR X0, [SP, #0]
    SUBIS XZR, X0, #1
    B.GE L1
    ADDI X1, XZR, #1
    ADDI SP, SP, #16
    BR LR
L1:
	SUBI X0, X0, #1
    BL fact
    LDUR X0, [SP, #0]
    LDUR LR, [SP, #8]
    ADDI SP, SP, #16
    MUL X1, X0, X1
    BR LR
    
	

0개의 댓글