1. 범용 레지스터에 값 넣기
(범용 레지스터에 대한 내용은 전 장에 간단하게 표로 소개되어있다.)
범용 레지스터인 EAX, EBX, ECX, EDX에 각각 1, 2, 3, 4를 넣어주었다. (MOV EAX, 1 등)
# 레지스터에 값을 넣어주는 방법
① 레지스터에 직접 값을 넣어주는 방법 : MOV REG, 값
② 한 레지스터에 다른 레지스터 값을 넣어주는 방법 : MOV REG(목표지점), REG(읽어올 지점)
현재 ECX에는 3이라는 값이 들어가있다. MOV REG, REG를 이용하여 ECX에 다른 레지스터의 값을 넣어보자.
ECX의 값에 EAX값을 넣어주기 위해 다음과 같이 어셈블을 작성하였다.
어셈블을 해준 후 실행시켜주면 ECX의 값이 EAX의 값과 같은 1로 변경되었음을 알 수 있다.
2. Modify Register
다음은 register를 더블 클릭했을 때 나타나는 창으로, 레지스터 EAX, AX, AH, AL이 나타나있다.
본래 16 bit CPU 당시에 레지스터는 AX라는 이름으로 만들어졌지만, 현재 레지스터는 확장되어 EAX, Extended AX로 변경되었다.
따라서 다음과 같이 나타낼 수 있다.
AH는 AX의 앞 8bit이고, AL은 AX의 뒤 8bit이며, AX는 EAX의 뒤 16bit이다. 따라서 AX가 확장된 EAX는 32bit이다.
현재 EAX에는 값 1이 들어있으므로 EAX에는 00000001이, AX는 0001, AH에는 00, AL에는 01이 들어있다. (여기에는 16진수로 들어간다.)
현재 EAX 레지스터에는 1 값이 저장되어있다.
Modify EAX 창을 켜서 00000023 이라는 값을 EAX에 넣어주면 자동으로 AX에는 0023, AH에는 00, AL에는 23이라는 값이 들어간다.
OK를 눌러주면 EAX의 값이 23으로 변경된 것을 알 수 있다. (ECX의 값은 캡쳐하기 전에 모르고 꺼버려서 MOV ECX, EAX를 실행하기 전에 캡쳐한 사진이라 값이 3으로 저장되어있다;;).
# MOV REG, REG 어셈블리를 사용할 때 주의할 점
: 서로 크기가 다른 레지스터로 값을 주고받을 수 없다.
EX 1) CH는 ECX에서 CX의 앞부분을 말하는데, EAX(32bit)와 CH(8bit)의 크기는 서로 다르므로 다음과 같이 오류가 발생한다.
EX 2) DL은 EDX에서 DX의 뒷부분을 말하는데, 1234(16bit)와 DL(8bit)의 크기가 서로 다르므로 다음과 같이 오류가 발생한다.
3. CPU, RAM, HARD DISK 비교
- 용량 : CPU < RAM < HARD DISK
- 속도 : CPU > RAM > HARD DISK
'SISS > Assembly' 카테고리의 다른 글
증감 명령어 (0) | 2018.07.28 |
---|---|
JMP 명령어 (0) | 2018.07.22 |
메모리 크기 지정과 저장방식 (0) | 2018.07.18 |
메모리 주소와 접근 (0) | 2018.07.18 |
Assembly의 시작 (0) | 2018.07.01 |