ch3.2 과제
.586
.model flat, stdcall
.STACK 4096
.DATA
number DWORD -105
sum DWORD ?
.CODE
main PROC
mov eax, number
sub eax, 1000
mov sum, eax
mov eax , 0
ret
main ENDP
end main
ch3.3 ( . data)
BYTE , WORD , DWORD , QWORD 등 데이터를 저장하는 directive 존재
위처럼 1개의 byte 뿐만아니라 여러 바이트를 연속해서 저장할 수도 있다.
DUP ( 배열 선언 할때 사용 )
DblArray DWORD 100 DUP(999)
- DWORD 100 개를 reserves 한다. 각 DWORD 는 999 로 초기화 한다.
DUP(?) 아무걸로나 초기화 해라 라는 뜻이다.
ch 3.4 Instruction Operands
3가지 종류가 존재함
(1) constants
(2)CPU register designations
(3) references to memory locations.
add eax(register), 158(immediate)
Two 80x86 memory addressing modes
direct Memory Mode 예제
0000000A A3 00000004 R mov sum, eax ;
- eax register mode
0000000A eax 를 어떤주소에 복사해라
00000004 - sum 주소
R : 주소가 바뀔수 있음을 알림
register indirect Memory Mode 예제
add eax, [edx] ; 03 02
- edx 레지스터에 담겨져 있는 주소의 값을 eax에 저장되어 있는 값과 더해서 eax 에 넣어라
: register indirect Memory Mode 는 레지스터안에 메모리의 주소가 있을때 사용한다.
EAX, EBX, ECX, EDX 뿐만 아니라 ESI EDI 와 같은 레지스터들이 indirect mode 의 레지스터로 이용 가능하다.
하지만 범용레지스터 외에는 특정한 목적이 있음으로 왠만하면 범용 레지스터를 이용하자 .
- 주의
register indirect 마치 포인터 처럼 사용 가능 하지만 밑에서 처럼은 사용불가능하다.
mov [ebx], 0 ; 주소의 몇 바이트를 사용해야 하는지 모름
때문에
mov BYTE PTR [ebx], 0
와 같이 1byte 를 사용한다는 명령어를 따로 추가 해야 된다. ( WORD PTR,DWORD PTR, or QWORD PTR)
참고로 mov [ebx],ecx 처럼 레지스터값을 줄때는 자동으로 DWORD 만큼 할당한다.
'공부,일 > 어셈블리' 카테고리의 다른 글
ch4. 2 Integer Addition and Subtraction Instructions (0) | 2021.08.17 |
---|---|
ch.4 - mov 완전정리 ( copy data) (0) | 2021.08.17 |
listing 파일 만들기 (0) | 2021.08.16 |
튜토리얼 3 simple window (0) | 2021.08.16 |
튜토리얼 2(메세지 박스 만들기) (0) | 2021.08.15 |
댓글