반응형
메모리는 레지스터와 마찬가지로 저장공간이며 휘발성이다. 단 레지스터는 공간이 제한적이지만, 메모리는 (레지스터에 비해) 매우 넉넉하다. 대신 느리다.
순서를 매겨본다면 이렇게 되겠다.
속도 : 레지스터 > 메모리 > 보조기억장치(HDD/SSD)
가격 : 레지스터 > 메모리 > 보조기억장치(HDD/SSD)
메모리를 사용할 때는 일반 상수와 구분을 하기 위해 대괄호를 씌운다.
ex) 메모리 주소가 402000이라고 할때, [402000]으로 사용한다.
mov 명령어에서 메모리를 사용할 때는 mov "크기" ptr ds:[메모리주소]의 꼴로 사용한다. 레지스터의 사용과 다르게 크기가 붙는 이유는 레지스터는 값의 크기가 정해저 있어 크기를 정해줄 필요가 없지만, 메모리는 값의 크기에 따라 내용이 완전히 바뀌고, 메모리의 공간을 지정해줄 때 복잡해지는 것을 막기 위해 크기를 미리 넣어주는 것이다.
실행 예시)
1 2 3 4 5 6 7 8 | mov byte ptr ds:[402000], 2 // 메모리 402000에 8bit '2'값을 넣는다. // 실행값 : 402000 | 02 ( 402000 ) mov word ptr ds:[402000], 2 // 메모리 402000에 16bit '2'값을 넣는다. // 실행값 : 402000 | 00 02 ( 402000, 402001 ) mov dword ptr ds:[402000], 2 // 메모리 402000에 32bit '2'값을 넣는다. // 실행값 : 402000 | 00 00 00 02 ( 402000 ~ 402003 ) | cs |
그리고 C언어의 포인터와 같이 메모리의 주소를 다른 메모리의 넣어 사용할 수 있다.
사용법은 간단하다.
1 2 3 4 | mov dword ptr ds:[402010], 402000 // 메모리 402010에 메모리 402000의 주소를 넣는다. mov eax, [402010] // 레지스터 eax에 402010의 값( 00402000 )을 넣는다. mov dword ptr ds:[eax], 1 // 대괄호 안에 들어 있는 값은 모두 메모리의 주소로 보기 때문에 eax에 1을 넣는것이 아닌, eax 안에 있는 메모리 402000에 1을 입력한다. | cs |
이렇게 실행하면 정상적으로 메모리 402000에 4바이트 1이 들어간것을 알 수있다.
반응형
'옛날 글들 > Assembly' 카테고리의 다른 글
[Assembly] 6. inc, dec, add, sub, adc, sbb의 사용 (0) | 2018.12.03 |
---|---|
[Assembly] 5. 조건분기 JUMP문 정리 (0) | 2018.12.02 |
[Assembly] 4. CMP의 사용과 상태 플래그 (0) | 2018.11.29 |
[Assembly] 3. JMP의 사용 (0) | 2018.11.29 |
[Assembly] 1. mov 명령어 (0) | 2018.10.24 |