Adventure of 빠타박스
article thumbnail
728x90
728x90
SMALL

데이터가 프로그래밍의 핵심일 수 있다.

데이터를 가공해서 사용하는 것

플레이어의 체력 또는 은행프로그램의 잔고

핵심은 데이터

데이터란?

컴퓨터에서 데이터 저장을 어떻게 할 것인가?

123이라는 숫자를 저장하고싶을때 어떤방식이건 컴퓨터에게 알려주는 것

컴퓨터가 어떤 데이터를 저장할 때 전기적 신호 유무를 이용해서 판단을 할 것이다.

비트 : 디지털에서 데이터를 저장할 때 정보가 1개 있다.

바이트 : 비트가 8개 뭉쳐서 구성된 것

왜 꼭 1바이트는 8비트 일까? 컴퓨터 단위라는 것

계산기

정보의 모양 아래 작은 비트가 0번 부터 시작 최종적으로 64개의 비트가 있다고보면된다.
1바이트라 하면 8개의 비트가 이루어져있다고 했다.


가운데 것을 클릭해보면 BYTE가 8개로 이루어진 상태라고 볼 수 있다.

이 상태에서 어떤 정보를 나타내는 상태
없으면 0 있으면 1


두번째 것을 클릭해보면 1이 아니라 2가 되어있는 것을 볼 수 있고, 이것이 2배씩 늘어나는 구나 유추할 수 있다.

첫번째 와 두번째 것을 누르면 3을 표현 할 수 있다.


이처럼 양수를 표현하는 방법은 논리적이다. 그저 세트를 이용해서 등불을 켜주면 합을 이용해서 정수를 표현한다.

음수를 표현하는 방법
음수는 존재하는 숫자가 아닌데 컴퓨터로 어떻게 음수를 표현하는가? 한개를 부호의 여부로 판단하고 나머지를 숫자로 판단하면 어떨까? 실제로 0000 0011 = 3 에 1000 0011 = -125 가 나와버린다. 앞에 수가 부호를 변경하는 것이면좋겠지만. 그렇게 작동하지 않는다.

최상위 비트를 마이너스 로만 사용하지 않는 이유는
0000 0000 이 다 꺼져있을때 0 이되는 것인데 1000 0000 이 었을때 그냥 마이너스로만 사용한다면 -0 이 되어야 하는데 -128 이 되버린다.
만일 저것도 -0이라 표기되면 0이라는 동일한 숫자를 두가지의 표현으로 사용하게 되기 때문에 문제가 된다. 어떤 데이터를 두번이나 검증해서 거쳐야 할 것이고, 이상한 방식이 되어버릴 것이다.

최상위를 그냥 -로 사용하는 것이 아니라 숫자도 붙여서 -128로 표현 된다.
2의 보수 숫자 표현 방법
거의 모든 언어에서 사용하는 합의된 방식이다.

-3을 표현하려면
0111 1111 다 켜준 값이 127이였다. 0에서 127의 양수를 이런식으로 표현
-128은 고정적으로 표현 1000 0000 여기에 적당히 숫자를 더해서 수를 만들어준다.

1111 1111 을 켜주면 -1 이된다.

이런식으로 값을 최상위 비트에 더해주어 마이너스를 표현할 수 있다..
그러나 최상위 비트라는 것은 사용하는 데이터의 크기에 따라 달라질 수 있다.
지금은 1byte 기준

이것을 WORD= 2 byte = 16bit
넣어준 값은 같은 상태에서 word 로 표현하면 253이 된 것을 볼 수 있다.

이제 또 최상위 비트는맨 첫번째로 다시 돌아갈것이다.

정수를 표현할 때 크기에 따라 맨 최상위 비트가 부호를 담당하고 어떤 특정한 값을 빼준다고 생각 하면된다.

데이터 크기를 얼마나 잡느냐에 따라 음수 크기가 달라진다.
기본적인 룰은 바뀌지않는다.

값을 넣어주게 되면


옆에 HEX, DEC, OCT , BIN 형식으로
숫자를 표현할 때 다양한 방법이 있다.
10진수를 사용할 때 가장 단순하지만.
경우에 따라 컴퓨터를 기준으로 하면. 16진수 10진수 2진수 등등 있다.

오히려 컴퓨터는 2진수로 표현하는게 더 편할 수 있다. 옆에 HEX, DEC, OCT , BIN 형식으로
숫자를 표현할 때 다양한 방법이 있다.

어셈블러 SAMS 표현
; = 주석 표시 아라비아 숫자로 10개를 만들어주고 실질적으로 9다음 숫자를 넘어가려면 처음 상태로 리셋 시키고 0 옆에 있는 숫자를 1 증가 시키는 방법으로 10 을 표현

같은 로직을 타서 10 11 12 13 …. 19
또 20을 표현 하려면 0으로 셋팅 시키고 옆에 있던 숫자를 2를 넣어주어 20을 표현

2진수 ( 0 , 1)로 표현
2진수에는 2라는 숫자가 없다. 이경우에는 2진수 기준으로 10이라는 숫자는 십진수를 기준으로 2가 된다.
2진수는 0b를 붙인다. 0b0 0b10

0b10 = 2 가 된다.
0b11 = 3
0b100 = 4

2진수는 숫자가 너무 빨리 증가한다는 단점이 있다. 숫자가 커질수록 표시해야할 숫자가 많아진다는 어려운점


10진수와 2진수의 절충안
16진수 (0 1 2 3 4 5 6 7 8 0 A B C D E F)
0 1 2 3 4 5 6 7 8 9 A B C D E F
F= 15
16을 표현 하려면 어떻게 해야할까?
F 가 마지막 이니까 0으로 리셋 시키고 앞에 1을 증가시키면 F 다음이 10이 된다.

16진수도 0x(헥사의 약자) 16진수 표현
0x00 = 0

16진수의 장점 : 16진수에서 2진수로 왔다갔다 하는게 편하다.
2진수를 기준으로 0b1001 0101 이 있다면 = 0x?
4개씩 끊어서 보면 편하다.

0101 = 5 = 4+1
0x5?

1001 = 8 + 1 = 9
0x95

이렇게 4개씩 끊어서 보면 16진수로 표현이 가능하다.
= > 이처럼 2진수 처럼 컴퓨터 친화적으로 표현하고 싶고 표기 공간이 부족한데 어떻게 할까 할때 16진수를 사용할 때 좋다.

10진수 혹은 16진수를 많이 사용한다.
86이라는 숫자 10진수를 16진수 기준으로 56이 된다. 4개씩 끊어서 읽어주면 된다.
0101 0110

2의 보수
만약 10진법으로 표기된 86이라는 숫자가 있을때 -86이라 표기하고 싶다면 간단하게 하는 방법- 규칙이 있다. 모든 비트를 거꾸로 반환 시킬 것이다.

1 부분은 0 , 0 부분은 1로 바꿔준다.


이상태에서 1을 더해준다.
이곳에서 1을 더한다 하면
1010 1010이 된다. 그러면 그 값이 -86이 된다.

이처럼 2의 보수 방법을 이용하면 어떤 특정 숫자에서 자기의 음수숫자도 구하기 쉽다는 장점이 있다.
→ 기초적인 내용

사용된 코드 (SAMS 사용)

%include "io64.inc"

section .text
global CMAIN
CMAIN:
    ;write your code here

    ;메모를 남길 수 있는 기능 = 주석
    ; 10진수(진법) = (0 1 2 3 4 5 6 7 8 9) 
    ; 10 11 12 13 ... 19 20 = 앞의 숫자가 넘어갈 때 마다 0으로 셋팅해준다.

    ; 2진수 (0 1)
    ; 0 1 만약 2를 표현 할 때 10 = 2 로 표현한다.
    ; 위처럼 표기하면 헷갈리니까. 0b 를 붙여준다. 
    ; 0b10 = 2  0b11 = 3 0b100 = 4 


    ; 16진수 (0 1 2 3 4 5 6 7 8 9 A B C D E F)
    ; 0 1 2 3 4 5 6 7 8 9 A B C D E F 10
    ; 0x00 = 0 

    ; 0b10010101 => 1001 0101 = 0x95

    PRINT_STRING msg

    xor rax, rax
    ret

section .data
    msg db 'Hello World', 0x00
728x90
728x90
LIST

'Programming > ASSEMBLY' 카테고리의 다른 글

[Assebly_SASM_기초] Assembly Setting_0  (0) 2023.05.30
profile

Adventure of 빠타박스

@PPATABOX

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!