본문 바로가기
공부,일/어셈블리

어셈블리 변수 선언 , 명령어 구조

by fromnothing1 2021. 8. 25.

 

.data 디렉티브에서 

변수를 선언해주면 된다. 

여기서 선언해준 변수는 모두 전역변수이며 , 지역변수는 따로 선언하지 않고 주소로만 가지고 있다.

.data

FIRST_NUMVER1 BYTE  01111101b; byte FIRST_NUMVER1 = 0x7D
FIRST_NUMVER2 BYTE  0ABh; byte FIRST_NUMVER1 = 0xAB; 무조건 앞에 0을 붙여야지 숫자로 인식한다. 
FIRST_NUMVER3 BYTE  77o;
FIRST_NUMVER4 BYTE  100;

FIRST_NUMVER6 DWORD 12345678h
FIRST_NUMVER5 WORD  1234h

little endian 으로 숫자가 뒤집힌다.

 

배열 사용법 

STRING1       BYTE  "Test"   ; string STRING1 = "Test"
FIRST_NUMVER7 WORD 100, 101, 102, 103;
FIRST_NUMVER9 WORD 10 DUP(? ); 초기화 하지 않은 값으로 10개 생성
FIRST_NUMVER8 WORD 10 DUP(0ABCDh); 0ABCD 가 들어있는 10 개짜리 WORD 배열

 

계산식 은 컴파일러가 미리 계산해서 변수에 집어 넣는다. 

 

Instruction Operands

 

3 source  operand 자리에는 3가지 구조가 올수 있다. 

 

1. 상수

2. 레지스터

3. 메모리 주소 

mov EAX , 100        ; EAX = 100 대입 
mov EAX , EBX       ; EAX = EBX  
mov EAX , FIRST_NUMVER6 ; EAX = FIRST_NUMVER2 memory;

 

3. 메모리 주소를 넣을 때는 2가지 mode 가 존재한다. 

 

1. direct mode - 위와 같이 직접적으로 주소를 넣음 

2. regist indirect mode - 레지스터를 넣는데 레지스터는 주소 값을 가지고 있음 

mov EAX , FIRST_NUMVER6 ;  memory direct
mov EAX , [ESP]         ;  register indirect

 

 

 

 

 

 

 

 

Smart.asm
0.00MB

 

 

 

 

 

 

 

 

댓글