CS 54

[컴퓨터 구조](14)[어셈블리어 5]

프로시저제어권 전달 프로시저 코드의 시작 리턴 지점으로 돌아가기데이터 전달 매개변수, 리턴 값 등메모리 관리 프로시저 실행 중 할당 리턴할 때 저장소(스택) 반납스택먼저 들어간 것이 나중에 나오는 메모리 구조스택은 메모리 주소가 작은 방향으로 성장한다%rsp 레지스터는 스택의 top주소를 저장한다 (가장 최근에 저장된 값의 주소 저장됨)PUSH S: 스택에 S를 저장한다 %rsp = %rsp-8 S -> (%rsp)POP D: 스택에서 하나를 빼서 D에 저장한다. (제일 나중에 들어온 것을 D에 저장) (%rsp) -> D %rsp = %rsp+8프로시저 CALL 스택에 리턴 주소(호출된 장소) push 호출받은 함수로 jump프로시저 ret 스택에서 리턴 주소를 pop ..

CS/컴퓨터 구조 2025.01.24

[컴퓨터 구조](13)[어셈블리어 4]

점프 명령어(조건 분기): 조건(플래그)에 따라 코드 다른 부분으로 이동jmp: 무조건 이동je / jne: ZF 값이 1 / 0 이면 이동js/ jns: SF 값이 1 / 0 이면 이동jg / jge: 비교 연산의 결과가 크다 / 크거나 같으면 이동jl / jle: 비교 연산의 결과가 작다 / 작거나 같으면 이동ja / jb: 비교연산의 결과가 크다 / 작다goto 명령어C언어에서 지정된 레이블로 이동레이블은 위에서 아래로 쭉 실행 하지만 goto를 만나면 이동나중에 어셈블리어로 번역할 때, 플래그, 점프 명령어 등으로 구현됨if문 -> goto문if문if (x>y) result = y-x;else result = y-x;goto문 if (x>y) goto Else; result = x-y; ..

CS/컴퓨터 구조 2025.01.23

[컴퓨터 구조](12)[어셈블리어 3]

플래그 레지스터: 연산 결과에 따라 0or1의 값을 가지는 1비트의 레지스터ZF (zero flag): 연산의 값이 0이면 1예시) xorq rax, rax (rax = 0이 됨) -> ZF = 1CF (carry flag): (비부호형에서) 연산의 값이 비트의 범위를 벗어나면 1예시) 1111(15) + 0001(1) = 10000(16) -> CF = 1SF (sign flag): (부호형에서) 연산의 결과가 음수면 1예시) 0001(1) + 1110(-2) = 1111(-1) -> SF = 1OF (overflow flag): (부호형에서) 연산의 결과가 오버플로우면 1오버플로우 판단은 결과값의 맨 첫번째 비트랑 두번째 비트를 xor하고 1 나오면 오버플로우다.예시) 0111(7) + 0001(1)..

CS/컴퓨터 구조 2025.01.22

[컴퓨터 구조](11)[어셈블리어 2]

완전 메모리 어드레싱 모드앞에서 사용했던 (%rax)꼴의 확장D(Rb, Ri, S) = (Rb + S*Ri+D)이다.D: 상수(1, 2, 4 중 하나)Rb: 기본 레지스터Ri: 인덱스 레지스터S: 규모 (1,2,4,8 중 하나)예시) movq 2(%rax, %rcx, 4), %rdxrax+4*rcx+2인 메모리 주소에 있는 값을 rdx에 넣어라LEA 연산(lea S D: S(주소 형태)의 값을 D에 넣어라)S는 주소 모드 표현이어야 한다. (%rax)꼴. 단순 상수나 레지스터의 값은 안됨.($0x0103이나 %rax는 안됨)예시) leaq (%rax) %rcx = rcx에 rax의 값을 넣어라.S가 주소 형태이긴 한데, 메모리 접근은 하지 않는다예시) leaq (%rax, %rcx) %rdx = 마치 r..

CS/컴퓨터 구조 2025.01.21

[컴퓨터 구조](10)[어셈블리어 1]

어셈블리의 데이터 형식1, 2, 4, 8 바이트의 정수형 데이터데이터 값, 주소4, 8, 10 바이트의 부동소수점 데이터배열이나 구조체 같은 형태 없이 메모리 상에 연속으로 할당됨어셈블리의 연산레지스터 or 메모리 데이터에 대한 산술 기능 수행메모리와 레지스터 사이 데이터 전송전송 통제: 프로시저로 점프, 조건부 분기x86-64의 정수 레지스터 (64비트 길이)%rax%rbx%rcx%rdx%rdi%rsp: 특수 용도 레지스터라 보통 계산에 사용 안함%rbp%r8, %r9 ... %158바이트이지만, 하위 4바이트, 2바이트에 참조 가능 (예전 프로그램과 호환성)어셈블리의 데이터 이동피연산자 형식 (AT&T문법)상수 정수 데이터: 숫자 앞에 $를 붙임예시) $0x3A65, $-533레지스터: 16개의 정수..

CS/컴퓨터 구조 2025.01.20

[컴퓨터 구조](9)[운영체제의 추상화]

운영체제는 하드웨어를 관리한다.운영체제에서 사용되는 추상화 파일: 입출력 장치의 추상화 가상 메모리: 메인 메모리와 입출력 장치의 추상화 각 프로세스들이 메인 메모리를 독점으로 사용하는 것 같게 느끼게 함. 분할된 메모리 영역에서 가상주소를 받고 그걸 사용함. 예시) 프로세스 A가 메모리를 할당받는다면, A 속 어떤 명령의 가상 주소 = k, A 속 어떤 명령의 물리적 주소 = 프로세스 A의 물리적 주소 + k 프로세스: 프로세서, 메인 메모리, 입출력 장치의 추상화 프로세스는 여러개 동시에 실행 가능 (프로세스를 재빨리 바꿔 동시에 실행하는 것처럼 보임(context switching). 바뀔 때 실행한 내용은 저장하고 서로 참조함.) 요즘엔 프로세스를 쓰레..

CS/컴퓨터 구조 2025.01.17

[컴퓨터 구조](8)[하드웨어의 동작 + 암달의 법칙]

하드웨어에서 프로그램 동작프로그램이 저장 장치에서 메모리로 로드됨CPU가 메모리에서 명령어를 읽어 해석하고 실행결과를 레지스터나 메모리에 기록필요할 경우 I/O 장치와 상호작용프로그램 종료 후 시스템 리소스 해제하드웨어에서 프로그램 동작 예시1) hello를 출력하는 c파일을 만들고 저장하기키보드에 입력된 글자들은 USB Controller에서 처리Bus를 통해 IO Bridge에 전달 (IOBus -> IOBridge)Bus를 통해 CPU내부에 진입 후 Bus 인터페이스에서 처리 (IOBridge -> System Bus -> Bus Interface)이후 CPU에서 연산, 필요시 레지스터나 메모리 버스타고 가서 주기억장치에 저장(CPU -> System Bus IOBridge -> Memory Bus..

CS/컴퓨터 구조 2025.01.16

[컴퓨터 구조](7)[컴퓨터 구조 훑어보기]

컴퓨터 구조 훑어보기정보는 비트와 맥락으로 구성된다.맥락: 같은 비트 패턴이라도 정수, 부동소수점, 기계어 명령 등 다양하게 해석 가능프로그램 번역 과정(C언어)전처리 단계: 헤더파일 포함하기, 매크로 처리 등 (앞에 #붙는거 처리 (#include, #define...)) (hello.c -> hello.i)컴파일 단계: C컴파일러가 어셈블러로 바꿈 (hello.i -> hello.s)어셈블리 단계: 어셈블러가 기계어로 번역 (hello.s -> hello.o)링크 단계: 목적파일들 통합해 실행 파일 만듬 (hello.o -> hello(윈도우라면 exe))컴퓨터의 하드웨어 조직CPU(프로세서): 해독, 실행, 연산, 저장 등의 작업 수행프로그램 카운터: 작업이 수행되는 메모리의 주소를 가리킨다. (카..

CS/컴퓨터 구조 2025.01.15

[컴퓨터 구조](6)[부동 소수점의 연산]

부동소수점의 연산: 정확한 결과 계산 -> 원하는 정밀도에 맞추기 (지수가 너무 크면 오버플로우가 생길 수 있다.)근사값: 부동소수점을 원하는 정밀도로 맞추기 위해 사용반올림, 버림, 반내림 등등짝수 근사(기본 근사 모드): 기본적으론 반올림과 같지만, 딱 절반이 되는 값에서는 짝수가 되게 근사예시) (소수 첫째자리에서 근사) 7.3 -> 7, 7.9 -> 8, 7.5 -> 8, 8.5 -> 8이진수에서 짝수 근사: 0이 짝수라고 생각한다. 딱 절반은 100...0꼴이다.예시) (소수점 둘째자리까지) 10.11010 -> 10.11, 10.11111 -> 11.00, 11.01100 -> 11.10, 11.10100 -> 11.10예시) 부동소수점 10 101, 10 111, 10 110을 비율비트 2자..

CS/컴퓨터 구조 2025.01.14

[컴퓨터 구조](5)[부동 소수점]

이진수에서 소수 표현비율 이진수: 직점 소수점 찍어서 표현예시) 11.101 = 3+1/2+1/8 = 3.625오직 x/(2^k)형태로만 표현. 다른 분수는 완벽하게 떨어지지 않고 반복적 비트 패턴을 가짐.예시) 3/4 = 0.11, 1/3 = 0.01010101...또한 비트 범위 내에서만 소수 표현 가능 (너무 작은값은 비트 잘림)부동 소수점위 비율 이진수의 단점 극복하기 위해 IEEE가 정해놓은 표준표현할 수 = (-1)^s * M * 2^E꼴 (s = 부호, M = 유효숫자, E = 자릿값(지수))부동소수점 인코딩(정규화 값: exp != 0000... and exp != 11111...): 한정된 비트에서 부호, 지수부, 유효숫자에 각각 비트를 할당한다.s(부호) = 0(양수), 1(음수)exp..

CS/컴퓨터 구조 2025.01.13
728x90
반응형