본문 바로가기

IT 공부/컴퓨터 하드웨어 및 구조10

함수 호출 시 스택프레임이 관리되는 원리 (어셈블리 레벨) 1. 스택프레임이란 프로그램이 실행되다가 함수를 호출하면 제어흐름은 호출된 함수 내부로 넘어간다. 이때 해당 함수가 작업하고 있는 데이터를 저장할 새로운 공간인 메모리 블록이 생성되는데, 이 블록에는 함수가 전달받은 인자나 내부 지역 변수 등이 저장된다. 이러한 함수의 데이터 블록은 위 그림과 같이 스택 자료구조로 적재된다. 프로그램의 본질이 main 함수로부터 실행이 시작되어 하위 함수를 호출해나가는 top-down 방식이기 때문에 자신을 호출한 함수로 다시 제어흐름을 넘기기 위해서는 호출 히스토리가 필요하며, 이를 위해 스택이 사용되는 것이다. 2. SP(스택 포인터)와 BP(베이스 포인터) 스택이 실제로 어떻게 관리되는지 어셈블리어를 확인해보자. 2-1. 실행 환경 사실 어셈블리는 시스템마다 종류가.. 2023. 12. 26.
2의 보수 계산법의 의미 2의 보수를 구하는 법은 아래와 같다. 원래 양수의 비트를 반전시킨다 (NOT 연산) 1을 더한다 예를 들어, 1101(2)가 있으면 부호를 반전해 0010(2)를 얻는다. 여기에 1을 더한 0011(2)이 원래의 숫자 1101(13이다)의 보수다. 바로 이 보수(complement)를 음수로 간주하자는 것이 컴퓨터의 음수 표현법이다. 왜 보수를 음수로 취급할까? +10과 -10은 더하면 0이 된다. +123과 -123은 더하면 0이 된다. 즉, 수학적으로 말하면 음수는 원래의 수에 더해져서 덧셈의 항등원(0)을 만들어내는 수로 정의된다. 0과 1을 반전시키면 비트가 다른 데이터를 얻는다. 이 둘을 더하면 모든 비트열에 대해 0과 1을 더하는 것이므로 11111....이 된다. 여기서 1을 더하면 올림이.. 2023. 12. 26.
은근히 헷갈리는 비트, 바이트 단위 정리 1비트는 컴퓨터가 표현하는 정보의 이론적인 최소 단위. 정확하게는 어떤 특정한 정보 안에 들어 있는 정보량을 측정하는 단위다. 1바이트는 컴퓨터가 처리하는 정보의 최소 묶음 단위. 물론 비트 하나로 정보를 코딩할 수는 있다... 그러나 우리가 일상에서 컴퓨터로 처리하고 싶은 정보는 복잡한 맥락에 속해 있으므로 하나의 비트만으로는 적절하게 정보를 인코딩할 수 없다. 하나의 비트만으로 표현할 수 있는 정보는 고작 성별(남자 or 여자), 출석 여부(출석함, 안함) 따위에 불과할 것이다. 그렇다고 매번 정보를 표현하기 위해 하나의 비트들을 여러개 모아서 코딩하는 것은 보통 귀찮은 일이 아닐 것이다. 따라서 비트를 세트로 모아 미리 묶어서 처리하는 것이며, 보통 1바이트(8비트)를 한 단위로 묶어 사용하는 것이.. 2023. 12. 26.
C언어 컴파일 과정 1. C언어 컴파일 C언어를 처음 배울 때 C언어의 컴파일을 상세하게 공부하지 않았다. 사실 알고 싶었으나 설명이 워낙 어려워 그냥 그려려니 하고 넘어갔던 것 같다. 그러나 공부를 하면 할수록 하드웨어에 가까운 C언어를 익힌다는 것이 얼마나 중요한지 체감하게 되었다. (소프트웨어의 원형이 결국 C언어 스타일의 프로그램으로 귀결되더라.) 특히 window10과 같은 GUI 환경에서 Visual Studio 툴로 컴파일을 하게 되는데, 이 컴파일은 컴파일하자마자 즉시 실행 파일을 만들어준다. 그래서 C언어 컴파일 과정을 눈으로 익히기가 쉽지 않다. 이후 리눅스 환경에서 디폴트로 설치되어 있는 gcc 컴파일러 프로그램을 통해 C언어 소스코드의 컴파일 과정을 천천히 할 수 있게 되면서 신기해했던 경험이 있다. .. 2023. 11. 15.