티스토리 뷰

[전광성의 어셈블리어 이해하기:1회] 어셈블리어를 배우기 위한 기본개념 (3)
저자: 전광성 |  날짜: 2004년 11월 24일  

/
1 .0 어셈블리어를 배우기 위한 기본개념 (1)
2 .0 어셈블리어를 배우기 위한 기본개념 (2)
0 어셈블리어를 배우기 위한 기본개념 (3)
/
  • 이진수로 나타낸 부호있는 정수

    컴퓨터는 음의 정수를 어떻게 표현하는가에 대해 알아보겠다. 컴퓨터는 -1을 만들기 위해 1에다가 2의 보수를 취한다. 2의 보수가 어떤 것인지는 다음 표를 보면 알 수 있다. 참고로 표에서 데이타의 크기는 1바이트이다. 또 비트반전은 1의 보수와 같은 말로서, 1은 0으로, 0은 1로 바꾸어주는 것을 의미한다.

    1
    0000 0001
    비트반전(1의보수)
    1111 1110
    더하기 1
    1111 1111
    결과
    1111 1111
    <표 5 : -1에 대한 2의 보수표현>

    이번엔 거꾸로 해보겠다.

    -1
    1111 1111
    비트반전(1의보수)
    0000 0000
    더하기1
    0000 0001
    결과
    0000 0001
    <표 6 : -1에 2의 보수 취하기>

    ‘비트반전후 더하기 1‘하는 것을 ’2의 보수를 취한다‘ 라고 한다. 2의 보수를 취한 후 다시 2의 보수를 취하면 자기 자신이 된다는 것을 알 수 있다.

    참고로, 최상위 비트가 1이면 음수고 0이면 양수가 된다. 즉 1111 1111은 음수고, 0111 1111은 양수이다. 2의 보수표현을 했을 때의 특징을 알아보자.

    크다
    -2
    1111 1111
    크다
    -3
    1111 1110
    -4
    1111 1101
    -5
    1111 1100
    -6
    1111 1011
    -7
    1111 1010
    -8
    1111 1001
    -9
    1111 1000
    -10
    1111 0111
    작다
    -11
    1111 0110
    작다
    <표 7 : 음수의 2의 보수표현>

    음수를 2의 보수표현으로 나타내면 숫자의 크기가 작아질수록, 실제 그 이진수의 크기는 작아짐을 알 수 있다. 따라서 이대로 가면 -128은 1000 0000이 될 것이라고 예측할 수 있다. 그것보다 한 숫자 작아지면 0111 1111이 되고, 이는 1바이트로 표현할 수 있는 최대값이 된다.

    저장 종류(Type) 사용하는 비트수범위
    byte
    8
    -(2의 7승) ~ 2의 7승
    word
    16
    -(2의 15승) ~ 2의 15승
    doubleword
    32
    -(2의 31승) ~ 2의 31승 - 1
    quadword
    64
    -(2의 63승) ~ 2의 63승 - 1
    <표 8 : 데이터형과 범위>

    상식적으로, 최상위비트로는 부호부분을 나타내고 나머지 비트들로 숫자부분을 나타내는 것이 편하다고 생각할 수도 있다. 하지만, 위의 표를 보라. 2의 보수표현을 하면 음수에서 대소관계가 그대로 지켜진다. 2의 보수표현이 좋은 이유가 한 가지 더 있는데 이는 다음에서 알아본다.

  • 정수의 뺄셈

    컴퓨터는 ‘뺄셈’은 할 줄 모른다. 그럼 뺄셈을 어떻게 할까? 바로 앞에서 배운 2의 보수를 취하는 방법을 이용한다. 컴퓨터가 A-B를 계산해야 한다고 하자. 그러면 컴퓨터는 A + (-B)를 한다. 여기서 B에 -부호를 붙인다는 것은 2의 보수를 취한다는 것이다. 2의 보수표현방법의 강력한 장점중의 하나는 이 뺄셈에서 드러난다. A + (-B)로 함으로써 빼기 연산을 따로 만들 필요 없이, 음수표현 방법을 그대로 이용하여 계산할 수 있다는 것이다. 예를 들어보겠다.

    a. 4 0000 0100 b. 1 0000 0001 c. -1 1111 1111 a+c 3 0000 0011

    보다시피 a - b는 a + c와 같다. 마지막 단계에서 8비트를 넘어선 비트8(왼쪽에서부터 9번째 비트)에 넘어간 숫자는 어디갔을까? 컴퓨터는 지금 8비트(1바이트)형의 데이터에 대해 연산을 하고 있으므로, 이 범위를 벗어난 것은 그냥 버린다.

  • 문자의 표현

    컴퓨터는 0과 1밖에 모른다. 그런데 어떻게 문자를 표현할까? 문자를 표현하기 위해 아스키(ASCII)코드라는 것이 정의 되어있다. 128가지를 표현할 수 있으며, 각 코드는 숫자와 문자를 일대일 대응 시켜놓았다. 따라서 48에 대응되는 문자를 출력하라고 하면 미리 대응시켜놓았던 그 문자가 표시되도록 하는 방식으로 문자를 처리한다.

    표현 방법이 어떻든 간에 컴퓨터는 숫자로 이루어져 있다는 사실을 명심하라. 우리 눈에 보이는 a는 눈에만 문자로 보이지 사실은 65라는 숫자값이다. 다음은 자주쓰는 문자에 대한 아스키 코드값이다.

    문자아스키코드값
    0
    48
    9
    57
    A
    65
    Z
    90
    a
    97
    z
    122
    <표 9 : 주요문자의 아스키코드값>

    0~9, A~Z, a~z은 각각 오름차순으로 아스키코드에 들어가 있다. 따라서 문자의 대소를 비교할 때(예를 들면, 오름차순 정렬) 이에 대응하는 아스키 코드 값으로 대소를 비교할 수 있다.

  • 이진 연산

    컴퓨터를 아무리 깊이 모른다고 해도 이진 연산 쯤은 알고 있을 것이다. 수학에서도 가장 기초적인 개념으로 나오니 말이다. 이진수에 대한 AND, OR, NOT연산에 대해서는 간단히 표를 보여주고 넘어가겠다. 여기서 F는 false(거짓, 0)을 의미하고 T는 true(참, 1)을 의미한다. X, Y는 이진 변수로서 1 또는 0의 값을 가질 수 있다.

    XYX AND Y X OR Y NOT X NOT Y
    T
    T
    T
    T
    F
    F
    T
    F
    F
    T
    F
    T
    F
    T
    F
    T
    T
    F
    F
    F
    F
    F
    T
    T
    <표 10 : 이진연산표>

  • 마치는 글

    이번 회에서는 어셈블리어를 배우는데 있어 필수적인 기본 컴퓨터 '상식'들에 대해 공부해 보았다. 상식이라고 해서 크게 부담 가질 것 없다. 모를때 자꾸자꾸 다시 보다 보면 어느새 내 것이 되어있을테니까. 다음시간에는 CPU와 관련된 내용을 알아볼 것이다. 어셈블리어가 어떻게 CPU에 직접 접근하는지, 다음 강좌를 통해 알아보도록 하자!!

  • 댓글
    안내
    궁금한 점을 댓글로 남겨주시면 답변해 드립니다.