Register

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

범용 레지스터 종류(32-bit)

이름 명칭 기능
EAX Accumulate. 누산기 변수의 주소값을 rax에 복사. 함수의 return값 저장. 곱셈, 나눗셈 연산 자동 사용
EBX Base. 베이스 레지스터 주소 지정
ECX Count. 숫자 카운팅 자동 루프 카운팅
EDX Data. 데이터 레지스터 간접 주소 지정
EBP Base Pointer. 베이스 포인터. 스택의 데이터 접근
ESP Stack Pointer. 스택 포인터. 스택의 위치 저장
ESI Source Index. 읽기 인덱스. 문자열 비교/전송
EDI Destination. 쓰기 인덱스. 쓰기
EIP Instruction Pointer. 명령어 포인터 레지스터. 다음 명령어의 주소 
EFLAGS    

 

 

 

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
%include "io64.inc"
 
section .text
global CMAIN
CMAIN:
    mov rbp, rsp; for correct debugging
;;        mov rbp, rsp; for correct debugging
    ;write your code here
    
    mov eax, 0x1234
    mov rbx, 0x12345678
    mov cl, 0xff
                
    mov al, 0x00
    mov rax, rdx            
           
    ; 메모리(Memory) <-> 레지스터(Register)
    ; mov rax,  a  ;a라는 바구니의 주소값을 rax에 복사
    ; mov rax, [a] ;a라는 바구니 안에 있는 값을 rax에 복사
    mov al, [a] 
          
    mov [a], byte 0x55
    mov [a], word 0x6666
    mov [a], cl
                                                                                                                                                    
    xor rax, rax
    ret
    
    ; 변수의 선언 및 사용
    ; 변수는 그냥 데이터를 저장하는 바구니
    ; - 처음에 바구니 사용하겠다 선언 (이름과 크기 지정)
    
    ; 메모리에는 구분할 수 있도록 주소(번지수)가 있다
    
    ; 초기와 된 데이터
    ; [변수이름] [크기] [초기값]
    ; [크기] db(1) dw(2) dd(4) dq(8)
  
section .data
    a db 0x11     ; [0x11] 형태로 저장
    b dw 0x2222
    c dd 0x33333333
    d dq 0x4444444444444444
    
    ; 초기화 되지 않은 데이터
    ;[변수이름] [크기] [개수]
    ;[크기] resb(1) resw(2) resd(4) resq(8)
 
 section .bss
    e resb 10
    
cs