관리 메뉴

IT 컴퓨터공학 자료실

초급편 2. 유사 어셈블리의 정의 본문

컴퓨터공학/포인터

초급편 2. 유사 어셈블리의 정의

윤맨1 2015. 6. 30. 11:04

                                            포인터 토대가 된 책

                                           유사 어셈블리의 정의

다음 설명은 단순화 된 어셈블리 언어로 해설 해 나간다. 어셈블리 언어는 CPU 내부에있는 '레지스터'라는 상대적으로 적은 특수 메모리 (Intel 사의 CPU는 범용 레지스터는 보통 6 개)를 사용하여 다양한 계산이 이루어진다. 왜냐하면 메모리에있는 모든 주소에 대해 계산을 할 수있게되면 느린 메모리 액세스가 필요하기 때문에 효율도 나쁘고, 어셈블리 언어 자체도 복잡하게되기 때문에, 특별한 CPU 내부의 메모리 인 레지스터에서만 계산을 할 수 없도록하고 레지스터에 어떤 주소에서나 값을 저장할 수 있으며 또한 레지스터의 값을 임의의 주소에 저장 할 수있는 2 단이 이전 구조를 가지고있는 것이다. 이 설명에서 레지스터의 이름을 「AX」 「BX」 「CX」 「DX」라고한다.

우선 정의되는 메모리에 대한 참조 (읽기)이다.

MOV AX, [1000]

이 어셈블리 명령어는 메모리의 1000 번지의 내용을 AX 레지스터에 저장하는 것을 보여준다. 만약 1000 번지부터 100 101 102 저장되어있는 것이라면, AX 레지스터의 값은 100이된다. 이 「메모리의 몇 번지의 내용 '을 사용하는 타입의 참조를 특히 "간접 참조"라고 부른다. 이 명령은 다음 명령과 구별 할 필요가있다.

MOV AX, 1000

이것은 AX 레지스터에 1000이라는 숫자를 저장하는 것이다. 그래서 AX 레지스터의 값은 1000이된다. 이 두 가지 서법의 구별을 확실히 기억한다.

레지스터에서 메모리에 저장 비슷한 서법이다.

MOV [1000], AX

그렇다면 메모리의 1000 번지에 AX 레지스터의 내용을 포함한다. "MOV 1000 AX」는 숫자에 메모리를 저장하려고하는 것이니까, 완전한 넌센스이다.

또한 레지스터끼리의 저장도있다.

MOV AX, BX

또한 이른바 계산은 다음과 같이한다.

ADD AX 3

이것은 AX 레지스터의 내용에 3을 추가한다. 마찬가지로

SUB AX 1

이것은 AX 레지스터의 내용에서 1을 끈다.

그래서 C 언어로 다음과 같은 식을 계산한다.

y = x + 3;

이를 컴파일하면 이상 어셈블리 언어라고 쓴다면 다음과 같은 기계어가 생성된다. 변수 x의 주소가 1000 변수 y의 주소가 1004하다고한다.

MOV AX, [1000]
ADD AX 3
MOV [1004], AX

마찬가지로 C 언어에서 다음과 같은 식을 계산한다.

y = x - z;

x, y의 주소는 이전과 같이, z의 주소는 1008하다고한다.

MOV AX, [1000]
MOV BX, 1008]
SUB AX, BX
MOV [1004], AX