레지스터와 메모리에 대하여 알아보기
레지스터 / 메모리
컴퓨터 프로그램의 내용은 대부분 자료를 주고 받는 작업으로 이루어진다. 앞에서 다룬 레지스터도 자료를 주고 받을 수 있다. 하지만, 한정된 개수의 레지스터는 많은 자료를 저장하거나 관리 할 수가 없다. 그래서 메모리라는 자료 저장 장소가 필요한 것이다. 메모리는 레지스터에 비교할 바가 못 될 정도로 방대하다.
메모리는 레지스터보다 엄청나게 많은 것을 기억할 수 있지만, 메모리를 이용하면 속도가 느립니다.
메모리 접근 방법
리틀 엔디안 방식을 사용합니다.
리틀 엔디안은 주로 Intel 프로세서 계열에서 사용하는 바이트 오더 방식이며, 메모리 시작 주소에 하위 바이트부터 기록합니다.
Ex) MOV WORD [678], 123 (사진)
데이터 타입
타입 설명
BYTE 8비트 부호 없는 정수
SBYTE 8비트 부호 있는 정수
WORD 16비트 부호 없는 정수
SWORD 16비트 부호 있는 정수
DWORD 32비트 부호 없는 정수
SDWORD 32비트 부호 있는 정수
FWORD 48비트 정수
QWORD 64비트 정수
TBYTE 80비트 정수
세그먼트(Segment)와 오프셋(Offset)
세그먼트(Segment)란 현재 사용할 메모리의 영역을 정하고, 이를 상대로 64KB의 메모리를 관리하는 것을 오프셋(Offset)이라고 한다.
메모리 전체를 16Byte (=10h)씩 나누어 큰 구역을 만들고 번호를 부여한다.
세그먼트의 내부를 세밀하게 접근할 때는 오프셋으로 한다.
Ex) 메모리 주소 27h에 대한 접근 방법을 알아보면 세그먼트 2h : 오프셋 7h입니다.
세그먼트의 실제 주소를 계산할 때는 세그먼트의 값에 10을 곱하면 실제 주소 값이 나옵니다.
Ex) 세그먼트 3000h의 실제 주소는 30000h이다.
3000h : 1234h 주소를 실제 메모리 번지로 계산을 해보면 3000h * 10 + 1234h = 31234 결과 값이 나옵니다. 그리고 한 칸당 4 Bit를 가지며 총 5칸을 가지고 있어 실제 주소는 총 20 Bit가 됩니다.
2^20 = 1048576 바이트 크기의 메모리를 사용할 수 있게 되어 1MB 메모리 접근이 가능하게 됩니다.
세그먼트(Segment)
ES, 엑스트라 세그먼트(Extra Segment)
CS, 코드 세그먼트(Code Segment)
SS, 스택 세그먼트(Stack Segment)
DS, 데이터 세그먼트(Data Segment)
오프셋(Offset)
BX, BP, SI, DI
이상으로 레지스터와 메모리에 대하여 알아보았습니다.
감사합니다.
'어셈블리어와 악성코드' 카테고리의 다른 글
MINI-100 바이러스에 대하여 알아보기 (0) | 2018.11.25 |
---|---|
어셈블리어를 이용하여 1부터 100까지의 합을 구해보자 (0) | 2018.11.23 |
INT(Interrupt), NOP(No Operation), LOOP (0) | 2018.11.21 |
스택(Stack), PUSH, POP (0) | 2018.11.20 |
어셈블리어 명령어 [SHL, SHR]과 Flag (0) | 2018.11.19 |