연습장

2일차 본문

언리얼 개발자/어셈블리

2일차

도다람 2022. 7. 24. 18:21

4. 변수와 레지스터

프로세스 메모리의 구조

*메모리 <-> 레지스터
mov rax, a ;       a라는 바구니의 주소값을 rax에 복사
mov rax, [a] ;     a라는 바구니 안에 있는 값을 rax에다 복사

 

*변수의 선언 및 사용
변수: 데이터를 저장하는 바구니
처음에 바구니를 사용한다고 선언(이름과 크기 지정)


*

메모리에는 구분할 수 있도록 주소(번지수)가 있다
고정적X 실행할 때 마다 변화O


**초기화 된 데이터 
변수이름, 크기, 초기값
크기 db(1) dw(2) dd(4) dq(8)

section .data
	a  db  0x11
	b  dw 0x2222
	c  dd  0x33333333
	d  dq  0x4444444444444444

 **초기화 되지 않은 데이터 
변수이름, 크기, 개수
크기 resb(1) resw(2) resd(4) resq(8)

section  .bss
	e resb 10

5. 문자와 엔디안

a  db 0x11 ; 

a  db 17 ;

다양한 진수로 데이터 세팅 가능함, 결과물은 똑같음

 

*

a db 0x11, 0x11, 0x11, 0x11 ;

쉼표로 구분해서 일련의 데이터로도 연결 가능

 

*

msg db 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x0

PRINT_STRING msg

PRINT_STRING 공식 어셈블리어는 아니고 운영체제에서 제공하는 헬퍼매크로이다.

아스키코드로 분석하여 문자로 출력도 가능

★ 동일한 데이터라도 어떻게 분석하고 받아들이냐에 따라 다른 의미가 될 수 있다

 

*빅엔디안, 리틀엔디안(역순)

우리가 사용하는 환경에서는 대게 리틀엔디안으로 저장이됨

데이터가 뒤집어지는 경우와 아닌 경우가 있다 정도만


6. 사칙연산 

*인풋창에 데이터를 입력 받고 출력하는 프로그램

-> 인풋창에 1,2를 입력하면 1,2가 출력됨

GET_DEC 1, al
GET_DEC 1, num

PRINT_DEC 1, al
NEWLINE
PRINT_DEC 1, num

 

어셈블리 코드는 소문자 대문자 상관X

더하기 연산 add a, b
a는 레지스터 or 메모리 입력 가능
b는 레지스터 or 메모리 or 상수 입력 가능
단, a,b 모두 메모리 입력은 안됨

빼기 연산 sub a, b

곱셈과 나눗셈은 어셈블리 코드에서 자주 등장하진 않음

예제) 더하기 연산
인풋 1, 2로 줬을 때,

add al,1   ;레지스터+상수 
PRINT_DEC 1, al    ;1+1=2


add al, [num]   ;레지스터+메모리
PRINT_DEC 1, al   ;2+2=4


mov bl, 3   ;레지스터+레지스터
add al, bl
PRINT_DEC 1, al   ;4+3=7


add [num], byte 1   ;메모리+상수
PRINT_DEC 1, [num]   ;2+1=3
상수를 메모리에 담아줄땐 크기지정 해줘야 함 (byte)


add [num], al   ;메모리+레지스터
PRINT_DEC 1, [num]   ;3+7=10


곱하기 연산
mul reg

mul bl = al * bl
연산결과를 ax에 저장 //1바이트의 곱셈

mul bx = ax * bx
연산 결과는 dx(상위16비트) ax(하위16비트)에 저장

mul ebx => eaz *ebx

예제) 5 * 8 은?
mov ax, 0 / 입력 받아주기 위한 정리
mov al, 5
mov bl, 8
mul bl
PRINT_DEC 2, ax


나누기 연산
div reg 
div bl => ax / bl
연산 결과는 al(몫) ah(나머지) 저장됨 // 1바이트의 나눗셈

예제) 100 나누기 3은?
mov ax, 100
mov bl, 3
div bl
PRINT_DEC 1, al   ; 100/3 =33*3+1
NEWLINE
mov al, bh
PRINT_DEC 1, al

 

 

'언리얼 개발자 > 어셈블리' 카테고리의 다른 글

3일차  (0) 2022.07.25
1일차  (0) 2022.07.20
Comments