일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 동시접속
- 코로나바이러스
- certification
- gbd-200
- 성능측정
- JMeter
- 5G
- QA
- 일본대학원
- 4차산업
- 부자아빠가난한아빠
- 리눅스
- ads.txt
- 한국판뉴딜
- 다음메일
- 환경정보
- 사양정보
- move앱
- 스마트시티
- 일본유학
- 명령어
- ios
- 정보처리기사
- DevNet
- 스펙정보
- 200-301
- 韓国
- 사양
- 사용자100명
- 韓国ヒップホップ
- Today
- Total
IT 컴퓨터공학 자료실
초급편 2. 유사 어셈블리의 정의 본문
포인터 토대가 된 책
유사 어셈블리의 정의
다음 설명은 단순화 된 어셈블리 언어로 해설 해 나간다. 어셈블리 언어는 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
'컴퓨터공학 > 포인터' 카테고리의 다른 글
초급편 5. 포인터의 형태 (0) | 2015.06.30 |
---|---|
초급편 4. 주소 가져오기 (0) | 2015.06.30 |
초급편 3. 문자열 처리 (0) | 2015.06.30 |
초급편 1. 변수 란 무엇인가? (0) | 2015.06.30 |
초급편, 중급편 목차 : ポインタ虎の巻 (포인터에 대한 글) (0) | 2015.06.30 |