문자 구현의 원리
컴퓨터가 레지스터로 문자를 표현하는 방식은 언어처럼 특정 십진수와 특정 문자가 같다고 약속으로 정해두고 그렇게 인식하도록 CPU를 설계하는 것이다.
그것에 대한 규약이 ASCII(American Standard Code for Information Inter-change)
문자열 구현의 원리
문자 데이터 모아서 문자열을 만드는데, 컴퓨터가 어디까지가 문자로 처리할 지를 결정하도록 하기 위해 문자열의 길이에 대한 정보도 같이 써야한다. 이때 쓰는 방식은 다음 3가지로 나뉜다.
1. 문자열의 맨 앞에 길이를 표시 (JAVA)
2. 구조체처럼 같이 사용되는 변수가 그 길이를 표현 하도록 하기
3. 마지막에 문자열의 끝을 표시하는 특수문자를 두기 (C)
어셈블리어로 문자열 복사 프로시저 구현
void strcpy (char x[], char y[])
{
size_t i;
i = 0;
while ( (x[i] = y[i]) != '\0' )
i += 1
} // x[0] = x10, y[0] = x11, i = x19
____________________________________
strcpy: // i 생성
addi sp, sp, -8 // sp의 공간할당
sd x19, 0(sp) // x19 보존
add x19, x0, x0 // i = 0
L1: // 문자열 복사
add x5, x19, x11 // x5 = y[i]
lbu x6, 0(x5) // x6 = x5
add x7, x19, x10 // x7 = x[i]
sb x6, 0(x7) // x7 = x6 (x[i] = y[i])
beq x6, x0, L2 // if ( x[i] >= 0 ) goto L2
addi x19, x19, 1 // i++
jal x0, L1 // L1 재실행
L2: //종료
ld x19, 0(sp) // x19 복구
addi sp, sp, 8 // sp의 공간반납
jalr x0, 0(x1) // 종료
유니코드
뜻 : 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
크기 : 한 글자를 몇 비트로 표시할 것인지는 유니코드 종류에 따라 다르다.
기본으로 쓰는 것은 16비트를 쓰는 UTF-16
그외 32비트를 쓰는 UTF-32도 있다. 예외로
UTF-8은 ASCII를 8비트로, 그외는 16~32비트.
RISC-V의 유니코드 load 명령어
lhu, lh (load halfword, 16비트를 우측에 채우고나서 나머지는 0으로 부호확장한다. 32비트를 넣을 경우엔 lwu (=load word)를 쓰는데 반면 lw는 좌측에 채우게 된다)
RISC-V의 유니코드 stkre 명령어
sh (store halfword)
'BackEnd > Computer Architecture' 카테고리의 다른 글
1.2.7 기계어의 어셈블리어로 번역 (0) | 2022.03.04 |
---|---|
1.2.6 어셈블리어로 긴 수치와 주소를 쓰는 법 (0) | 2022.03.02 |
1.2.4 어셈블리어로 프로시저 구현 (0) | 2022.01.18 |
1.2.3 어셈블리어 구현 (0) | 2022.01.07 |
1.2.2 숫자 구현 (0) | 2022.01.06 |
댓글