분류 전체보기 123

어셈블리어 - 함수

단순히 Parameter 및 반환값 없이 Hello World를 출력하는 함수를 만들고 호출하는 예제는 아래와 같다. 함수에서 인자값과 반환값을 사용하기 위해서는 Stack 메모리 영역을 사용한다. Stack 메모리 영역과 관련된 포인터 레지스터는 다음과 같다. IP (Instruction Pointer) : 다음에 수행 할 명령어 주소 SP (Stack Pointer) : 현재 Stack의 top 주소 BP (Base Pointer) : 스택과 관련해 상대 주소를 계산하기 위한 용도 어셈블리어에서 스택에 push/pop 하기 위해서는 다음과 같이 사용한다. push 1 pop rax; 스택에서 pop하여 rax로 가져옴 Stack에 1,2,3을 push하고 pop을 한번하는 과정에서 메모리의 변화는 다..

어셈블리어 - 반복문, 배열

[ 반복문 ] 1부터 100까지의 합 구하기. [ JMP를 사용하는 방법 ] [ loop를 사용하는 방법 ] 사용법 : loop [label] 레지스터 C를 반복문의 Counter로 사용하게 된다. loop를 돌 때마다 C의 값이 하나씩 감소하며 0보다 크면 반복하고 0이되면 중지된다. [ 배열 ] data section에 1byte 원소 10개를 갖는 a배열 선언하기. 초기값은 1-10으로 정의 section .data a db 1,2,3,4,5,6,7,8,9,10 ; char b[10] = {1,2,...,10} data section에 2byte 원소 5개를 갖는 b배열 선언하기. 초기값은 모두 1 .section data b times 5 dw 1 ; short b[5] = {1,1,1,1,1} ..

어셈블리어 - Shift, 논리연산, 분기문

[ Shift 연산 ] [ 논리 연산 ] 자기 자신과 XOR하면 무조건 0이 되는데, 아래 부분은 C에서 return 0의 의미를 갖게 된다. [ 분기문 ] C에서의 if문을 구현하기 위해 CMP 및 JUMP 계열의 명령어를 사용하게 된다. 먼저 if문 안의 조건에 해당하는 비교 연산을 수행하기 위해서는 CMP 명령어를 사용한다. cmp rax, rbx; 여기서 아래 나올 조건 (Jump If Greater 등)의 기준은 rax이다. 비교를 위해서 cmp a, b 했을 경우 a에서 b를 빼게 되며, 그 결과는 Flags Register에 저장된다. 만약, a와 b가 같으면 a - b = 0이므로 ZF(Zero Flag)가 1이 된다. 그리고 이 eFlags Register의 값에 따라서 코드의 분기를 수..

어셈블리어 - add/sub, mul, div

[ SAMS 툴에서 숫자 입력/출력하기 ] - [Help] - [Help]에서 방법을 찾아보면 - 레지스터나 변수에 사용자로부터 부호있는 10진수를 입력받기 위해서 GET_DEC를 사용하면 된다는 것을 알 수 있다. - 부호있는 10진수 데이터 출력은 PRINT_DEC임을 알 수 있다. [ Add/Sub : Carry를 포함하지 않는 덧셈/뺄셈 ] - a는 레지스터 또는 메모리 - b는 레지스터 또는 메모리 또는 상수 - 주의) a,b가 둘다 메모리이면 안된다. Q) 레지스터 A에 1byte를 입력받고, 초기화 되지 않은 전역변수 B에 1byte를 입력받아 A + B를 계산하는 프로그램을 작성하시오. %include "io64.inc" section .text global CMAIN CMAIN: ;wri..

어셈블리어 - 변수 선언/활용하기

[ 프로세스 메모리 구조 ] - 변수를 선언하고 사용하기 위해서는 변수로 사용될 메모리 공간이 필요한데, 용도에 따라(초기화 유무, 지역변수/정적 또는 전역) 어느 영역에 할당하여 사용할지 결정해야 한다. [ 변수 선언하기 ] - 초기화 된 데이터 정적/전역변수를 메모리에 할당하기 위해서는 data 영역에 크기와 함께 지정하여 사용한다. - 초기화 되지 않은 정적/전역변수를 메모리에 할당하기 위해서는 bss 영역에 크기 및 개수와 함께 지정하여 사용한다. %include "io64.inc" section .text global CMAIN CMAIN: mov rbp, rsp; for correct debugging ;write your code here xor rax, rax ret section .dat..

어셈블리어 - 레지스터(Register)

[ Register ] - 레지스터 : 프로세서(CPU)가 사용하는 메모리 - CPU 안에 존재하며 가장 속도가 빠른 저장장치이며 비용이 비싸고 용량이 작다. (레지스터 > 캐시 메모리 > 메인 메모리(주로 DRAM) > 하드디스크/SSD) [ 64-Bits General Purpose Register ] - 범용 레지스터. 연산결과, 상수, 주소 등을 저장한다. - RAX, RBX, RCX, RDX, RSP 등 여러개가 존재하는데 우리는 주로 A,B,C,D를 사용한다. - 어셈블리어에서 해당 레지스터의 몇 byte를 사용할 것인지에 따라 아래와 접두어/접미어를 다르게 붙여서 사용한다. - RAX : 8bytes = 4 word = 1 qword - EAX : 4bytes = 2 word = 1 dwor..

괄호

9012번: 괄호 (acmicpc.net) 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 예제 입력 1 6 (())()) (((()())() (()())((())) ((()()(()))(((())))() ()()()()(()()())() (()((())()( 예제 출력 1 NO NO YES NO YES NO 예제 입력 2 3 (( )) ())(() 예제 출력 2 NO NO NO - 스택을 사용하여 풀 수도 있지만, 간단한 방법이 있다. - cnt 변수를 두고 0으로 시작하여 '..

포켓몬고 걷기 기계 사용방법 총정리(Android)

집에서 전설몬 사탕 얻기, 알까기 등등을 하기 위해 자동 걷기기계를 처음 장만하신 분들을 위해 포켓몬고 걷기 기계 사용법에 대해서 정리하였습니다. 구매 후 걷기기계를 돌렸음에도 게임에서 거리가 반영되지 않는 현상 등 여러가지 삽질을 겪고 계신 분들께 도움이 되었으면 합니다. 걷기 기계의 구매는 Gx켓 등에서 "포켓몬고 걷기 기계" 등으로 검색하시면 여러 종류가 뜨므로 그 중 하나를 선택하셔서 구매하시면 됩니다. 참고로 이 기계는 전자석으로 휴대폰을 그네(?)를 태우는 방식이기 때문에 많이 사용하면 자력이 약해져 더이상 사용할 수 없게 되는 소모품입니다. (1) 먼저, Play스토어를 통해 구글피트니스를 설치해줍니다. (삼성헬스 아님) (2) 설치한 구글 피트니스를 실행하여 프로필을 설정합니다. 주변에 포..