데이터가 프로그래밍의 핵심일 수 있다.
데이터를 가공해서 사용하는 것
플레이어의 체력 또는 은행프로그램의 잔고
핵심은 데이터
데이터란?
컴퓨터에서 데이터 저장을 어떻게 할 것인가?
123이라는 숫자를 저장하고싶을때 어떤방식이건 컴퓨터에게 알려주는 것
컴퓨터가 어떤 데이터를 저장할 때 전기적 신호 유무를 이용해서 판단을 할 것이다.
비트 : 디지털에서 데이터를 저장할 때 정보가 1개 있다.
바이트 : 비트가 8개 뭉쳐서 구성된 것
왜 꼭 1바이트는 8비트 일까? 컴퓨터 단위라는 것
계산기
정보의 모양 아래 작은 비트가 0번 부터 시작 최종적으로 64개의 비트가 있다고보면된다.
1바이트라 하면 8개의 비트가 이루어져있다고 했다.
가운데 것을 클릭해보면 BYTE가 8개로 이루어진 상태라고 볼 수 있다.
이 상태에서 어떤 정보를 나타내는 상태
없으면 0 있으면 1
두번째 것을 클릭해보면 1이 아니라 2가 되어있는 것을 볼 수 있고, 이것이 2배씩 늘어나는 구나 유추할 수 있다.
첫번째 와 두번째 것을 누르면 3을 표현 할 수 있다.
이처럼 양수를 표현하는 방법은 논리적이다. 그저 세트를 이용해서 등불을 켜주면 합을 이용해서 정수를 표현한다.
음수를 표현하는 방법
최상위 비트를 마이너스 로만 사용하지 않는 이유는
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 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의 보수
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
'Programming > ASSEMBLY' 카테고리의 다른 글
[Assebly_SASM_기초] Assembly Setting_0 (0) | 2023.05.30 |
---|