검색결과 리스트
글
어셈블리 언어란 기계어와 일대일로 대응이 되는 컴퓨터 프로그래밍의 저급 언어입니다.
이 글에선 어셈블리 명령어를 이해하기 전에 필요한 기초 지식을 정리해 보았습니다.
Ⅰ. 16 진법
16 진법의 표기에는 여러가지 방법이 있지만 대부분 아래와 같은 표기법을 사용합니다.
1. 0x 접두사와 함께 표기하는 방법 - Ex > 0x12ab
2. h 접미사와 함께 표기하는 방법 - Ex > 12abh
16진수에서는 0부터 f까지의 숫자와 문자를 사용하는데 이는 10진수의 0부터 15까지의 수를 의미합니다.
( 0 ~ 9 까지는 같으나 10 = a, 11 = b, 12 = c, 13 = d, 14 = e, 15 = f 이다. )
⚀ 16진수를 10진수로 변환하기
16진수를 10진수로 변환하기 위해서는 오른쪽 부터 각각의 수를 16의 0제곱, 16의 1제곱... 만큼 곱해야 합니다.
다음의 과정은 0x12ab (12abh) 를 10진수로 변환하는 과정입니다.
( b*16의 0제곱 ) + ( a* 16의 1제곱 ) + ( 2* 16의 2제곱 ) + (1* 16의 3제곱 )
= (11*1) + (10*16) + (2*256) + (1*4096)
= 11 + 160 + 512 + 4096
= 4779
따라서 0x12ab (12abh) 는 4779 입니다.
16 진수가 나올때 마다 이 과정을 반복해야 하지는 않지만 00 ~ FF ( 0 ~ 255) 숫자에 익숙해 져야 합니다.
⚠ 반드시 오른쪽 부터 하여야 합니다! (저처럼 왼쪽부터 했다가 수정하는 일이 없기를...)
Ⅱ. 2 진법
2 진법은 숫자 0과 1을 이용한 수 표기법 입니다.
10 진수로 바꾸는 방법은 16 진수의 경우와 유사하지만 16의 제곱이 아닌 2의 제곱을 곱한 값들을 더해주어야 합니다.
⚀ 2진수를 10진수로 변환하기
1010 이라는 2진수를 10진수로 변환하여 보겠습니다.
( 0*2의 0제곱 ) + ( 1*2의 1제곱) + ( 0*2의 2제곱 ) + ( 1*2의 3제곱)
= 0 + 2 + 0 + 8
= 10
따라서 1010(2)의 10진수는 10 입니다.
⚁ 16진수에서 2진수로, 2진수에서 16진수로
- 0x0 = 0000
- 0x1 = 0001
- 0x2 = 0010
- 0x3 = 0011
- 0x4 = 0100
- 0x5 = 0101
- 0x6 = 0110
- 0x7 = 0111
- 0x8 = 1000
- 0x9 = 1001
- 0xa = 1010
- 0xb = 1011
- 0xc = 1100
- 0xd = 1101
- 0xe = 1110
- 0xf = 1111
예를 들어, 이진수 100101101001110를 16진수로 바꾸려면:
- 수의 길이가 4의 배수가 되도록 이진수 앞에 0을 추가합니다: 0100101101001110
- 수를 4자리만큼씩 나눕니다: 0100 1011 0100 1110
- 각각의 4자리 이진수를 16진수로 바꿉니다: 0x4 0xb 0x4 0xe
- 바꾼 수를 하나로 모아서 씁니다: 0x4b4e
반대로 16진수 0x469e를 2진수로 바꾸려면:
- 수를 한자리씩 나눕니다: 0x4 0x6 0x9 0xe
- 각각의 16진수를 2진수로 바꿔줍니다: 0100 0110 1001 1110
- 맨 앞의 0을 빼고 수를 하나로 모아서 씁니다: 100011010011110
자료형이란 16진수의 숫자가 어떻게 구분되고 나뉘어 지는지와 관련이 있습니다.
보통 자료형은 비트(혹은 바이트) 수와 음수 표현이 가능 여부에 따라 분류할 수 있습니다.
비트(혹은 바이트) 수는 수의 길이를 정의합니다.
예를 들어 8비트(1바이트) 수는 0x03, 0x34, 0xFF와 같이두 개의 16진수로 구성됩니다.
이와 달리 16비트(2바이트) 수는 0x1234, 0x0001, and 0xFFFF 와 같이 표현 될 수 있습니다.
부호수(signed)와 무부호수(unsigned)는 음수 표현의 가능 여부에 의해 구분됩니다.
음수 표현이 가능한 자료형은 그렇지 않은 경우에서 표현할 수 있는 최대값의 반 값까지만 표현할 수 있습니다.
음수와 양수를 표현하기 위해 수의 가장 앞자리 수를 이용합니다.
2진수의 경우 가장 앞자리가 1일때, 16진수의 경우에는 가장 앞자리 수가 8부터 F 사이의 수일때 그 수는 음수가 됩니다.
.
.
.
이 외에도 메모리, 포인터, 배열, 아스키 코드, 문자열 에 대해 알고 있다면 어셈블리어를 이해하는데 많은 도움이 될것입니다.
자료 참고 : http://carpedm20.blogspot.kr/2012/08/this-page-is-going-to-be-about.html
'Programming > Assembly' 카테고리의 다른 글
함수 프롤로그(Prolog), 에필로그(Epilog) (0) | 2015.08.27 |
---|---|
메모리 구조 (0) | 2015.08.27 |
함수 호출 규약 (Calling Convention)과 스택 프레임 (Stack Frame) (0) | 2015.08.27 |
어셈블리 명령어 이해하기 - 하 (0) | 2015.08.27 |
어셈블리 명령어 이해하기 - 중 (0) | 2015.08.27 |
RECENT COMMENT