본문 바로가기

Programming Language

Java에서 SQLite 사용하기 Java에서 SQLite를 사용하는 방법은 아래와 같습니다. 1단계. 아래 사이트에서 SQLite파일을 읽는 최신버전의 JDBC(sqlite-jdbc-3.7.2.jar)를 다운받습니다. 여기에서 바로 받을 수 있습니다. 링크: https://bitbucket.org/xerial/sqlite-jdbc/downloads 2단계. 자바 소스를 아래와 같이 작성합니다. /* Program.java */ import java.sql.*; public class Program { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; try { /* SQLite J.. 더보기
C-Style의 문자열 출력 C-Style의 문자열은 끝이 \0(NULL문자)로 끝나는 문자열을 말한다. 어셈블리어에서는 긴 문자열을 별도의 변수에 보관하였다가 int 21h-02h의 반복구문을 사용하거나 문자열을 자체적으로 출력해주는 int 21h-09h를 사용할 수 있다..model small .stack 64 .data message DB "Hello, World!", 0 ; 데이터 영역에 문자열을 정의한다. .code main proc far mov ax, @data ; ax를 거쳐서 데이터영역이 시작되는 메모리 주소를 DS와 ES 레지스터에 넣는다. mov ds, ax mov es, ax mov cx, 0 main_loop: mov ax, offset message ; message라는 이름의 문자열 데이터가 @data에서.. 더보기
산술 비교 알고리즘 - 3편. "<"와 ">=" .386 .model flat, stdcall .stack 1024 .data .code main PROC MOV AH, 99 MOV AL, 1 CMP AH, AL JL JMP_LESS; AH =AL이면 JMP_NLESS로 이동 JMP_LESS: MOV AH, 02h MOV DL, 3Ch; ASCII 문자 '' 출력 INT 21h MOV DL, 3Dh; ASCII 문자 '=' 출력 INT 21h JMP JMP_EXIT JMP_EXIT: MOV AH, 4Ch INT 21h main ENDP END main 실행 결과 AH이 AL보다 작지 않으므로 ">= " 문자가 출력됩니다. 더보기
산술 비교 알고리즘 - 2편. ">"와 "<=" .386 .model flat, stdcall .stack 1024 .data .code main PROC MOV AH, 99 MOV AL, 1 CMP AH, AL; AH - AL의 연산을 합니다. JG JMP_GREATER; AH > AL이면 JMP_GREATER로 이동 JNG JMP_NGREATER; AH 더보기
산술 비교 알고리즘 - 1편 "!="과 "==" option casemap: none ; 대/소문자를 구분하지 않습니다. .386; 386 CPU용 명령어들을 사용합니다. .model flat, stdcall; 메모리 모델은 stdcall을 사용합니다. .stack 1024; 스택의 크기는 1024 워드로 합니다. .data; 데이터 영역은 아직 없으므로 비워둡니다. .code; 코드 영역 시작 main PROC; main 프로시저 선언합니다. MOV AH, 99; AH 레지스터에 99를 넣습니다. MOV AL, 1; AL 레지스터에 1을 넣습니다. CMP AH, AL; AH - AL 연산을 하여 대소비교를 합니다. JZ JMP_EQUALS; AH - AL == 0이어서 ZF Flag가 1이 되면 JMP_EQUALS 위치로 점프합니다. JNZ JMP_.. 더보기
산술비교 명령어 모음 CMP , 위 명령은 두 정수를 빼서 대소 비교를 하라는 뜻입니다. A - B의 결과는 양수 또는 0 또는 음수 중 하나일텐데, 각 상황별로 CPU에 내장된 ZF(Zero Flag), CF(Carry Flag)라는 두 플래그에 값이 저장됩니다. 그리고 ZF, CF의 상태에 따라 몇 가지 분기 구문이 존재합니다. 분기 구문은 A와 B는 최상위 비트는 부호 비트로 쓸 것인지 여부에 따라 signed, unsigned 형으로 나뉘는데 각 명령은 다음과 같습니다. 상태 플래그 레지스터 AF (Auxiliary Flag) : 반 워드 단위로 자리수가 바뀔때 1로 설정. 예를 들어 8비트 CPU에서는 0100에서 10100이 되는 경우, 또는 11011에서 1011이 되는 경우CF (Carry Flag) : uns.. 더보기
점프 명령어 JMP 이번에는 점프 명령어를 알아보려 합니다. 점프 명령어는 프로그램 진행상 필요시 특정 위치로 프로그램의 흐름을 건너뛰는 역할을 합니다. 점프 명령어는 다음과 같이 선언합니다. 명령 1 명령 2 JMP 명령 3 명령 4 레이블: 명령 5 명령 6 JMP 명령어가 없다면 프로그램의 순서는 명령 1-2-3-4-5-6의 순차적으로 진행될 것입니다. 그러나 JMP를 통해 특정 레이블로 점프시킨다면 1-2-5-6의 순서로 진행 됩니다. 그럼, 이전에 테스트 해 보았던 헬로 월드 예제로 적용해 보죠. .386 ; 386 CPU용 명령어들을 사용합니다. .model flat, stdcall ; 메모리 모델은 stdcall을 사용합니다. .stack 1024 .data ; 데이터 영역은 아직 없으므로 비워둡니다. .cod.. 더보기
두 번째 예제: Hello, World! .386 ; 386 CPU용 명령어들을 사용합니다. .model flat, stdcall ; 메모리 모델은 stdcall을 사용합니다. .stack 1024 .data ; 데이터 영역은 아직 없으므로 비워둡니다. .code ; 코드 영역 시작 main PROC ; main 프로시저 선언합니다. MOV AH, 02h ; AH 레지스터에 문자 1개를 출력하는 명령인 02h를 넣습니다. 반복적으로 사용될 값이므로 첫 번째 예제와는 순서를 바꿔서 가장 처음에 배치해 봤습니다. MOV DL, 48h ; DL 레지스터에 아스키문자 'H' (0x48)를 넣습니다. INT 21h ; 만능 인터럽트 21h를 발생시켜 AH, DL에 담긴 내용대로 처리합니다. MOV DL, 65h ; DL 레지스터에 아스키문자 'e' (0.. 더보기
첫 예제: 1개의 문자 출력 MASM 어셈블리 코드는 다음과 같은 기본 뼈대를 갖습니다. .386 .model flat, stdcall stack segment para stack db 1024 dup(?) stack ends data segment data ends code segment main proc far main endp code ends end main 이를 좀 더 단순화하면 .386 .model flat, stdcall .stack 1024 .data .code main proc main endp end main .386 .386 지시어는 386 CPU를 위한 명령어들만 사용한다는 의미입니다. 286, 486, 586p 등 다양한 지시어를 사용할 수 있고 여기에 지정한 CPU에 따라 사용할 수 있는 명령어가 달라지고,.. 더보기
MASM PWB 사용하기 1. MASM을 설치하면 C:\MASM611 디렉터리가 생성된 것이 보입니다. 그러면 C:\>cd masm611 하여 해당 디렉터리로 들어갑니다. 2. 여러 디렉터리가 보이는데요 그 중에 binr 디렉터리로 들어갑니다. 3. 여러 파일들 중 pwb가 보입니다. 이것이 우리가 사용하게 될 IDE입니다. 4. 글자가 깨져서 보기 불편합니다. 다시 프로그램을 종료하고 명령줄로 돌아갑니다. 5. C:\MASM611\BINR>chcp 437하여 영어 모드로 전환합니다. 6. 이제 메뉴가 깔끔하게 보입니다. 더보기
MASM 설치하기 (MS-DOS 버전) 저는 편의상 VMWare에 MS-DOS를 설치한 환경에서 진행합니다. VMWare에 MS-DOS 설치하는 방법과 플로피디스크 이미지 삽입 방법 대해서는 VMWare로 Windows 3.1 설치하기 - 3. MS-DOS 설치(http://tapito.tistory.com/253) 편을 참조하세요. 먼저 아래 첨부 파일을 다운로드 받으세요. MASM 6.11 설치파일입니다. 1. Disk 1을 A: 드라이브에 넣고 A:\>setup을 입력하면 위와 같은 화면이 뜹니다. MASM 6.11 설치프로그램에 오신 것을 환영합니다. 여기 파일들은 압축되어 있고, 프로그램을 사용하려면 이 프로그램으로 압축을 풀어야 실행 가능합니다. 끝내려면 Ctrl+C, 계속하려면 Enter를 누르세여... 이런 의미겠지요. Ente.. 더보기
MS-DOS API로 배우는 어셈블리어 윈도우에 Windows API가 있다면, MS-DOS에는 MS-DOS API가 있습니다. 차이가 있다면 WinAPI는 C언어로 된 반면, MS-DOS API는 어셈블리어를 사용한다는 차이가 있겠지요. WinAPI에서는 함수를 호출하는 방식으로 API를 사용하지만, MS-DOS API는 레지스터에 특정 값을 넣고, 인터럽트를 발생시키는 방식으로 API를 사용합니다. MS-DOS API의 인터럽트 인터럽트 벡터설명버전비고 20h 프로그램 끝내기 1.0 이상 도스 커널에 추가됨 21h 주요 도스 API 1.0 이상 도스 커널에 추가됨 22h 프로그램 끝내기 주소 1.0 이상 프로그램 호출시 주소 반환 23h Control-C 핸들러 주소 1.0 이상 기본 핸들러는 도스 셸에 있음 (일반적으로 COMMAND.C.. 더보기
NSDate로 현재 날짜 얻기 NSDate: 어떤 기준일로부터의 경과 시점을 나타내는 클래스입니다. 기준일이 언제인지는 이 클래스만으로 알 수 없습니다. NSCalendar: 특정 지역에서 사용하는 달력을 나타냅니다. 이 클래스는 달력의 기준일, 1년당 날 수 계산 및 1달당 일 수 계산과 같은 역할을 수행할 수 있습니다. NSDateComponents:NSCalendar에서 제공하는 역법과 NSDate에서 제공하는 기준일로부터의 시점을 사용하여 연, 월, 일, 시, 분, 초의 시각 요소를 추출합니다. 반대로 지정된 시각 요소와 NSCalendar에서 제공하는 역법을 사용해 NSDate 클래스의 인스턴스를 합성하기도 합니다. NSDateComponents에서 지원하는 날짜 및 시각 요소는 다음과 같습니다. 자료형은 NSCalendar.. 더보기
NSString과 C 문자열간 변환하기 Foundation에서 제공하는 NSString 문자열을 C 문자열로 변환하기 위해서는 -cStringUsingEncoding: 메시지를 사용하면 된다. 반대로 C 문자열을 NSString로 변환하여 쓰기 위해서는 +stringWithCString:encoding:을 사용한다. 메시지 원형- (const char *) cStringUsingEncoding : (NSStringEncoding) encoding+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc encodingconst char * 형 버퍼가 갖는 데이터의 인코딩 종류를 지정한다. (아래 참조) 사용 예#import #import #import #import.. 더보기
Objective-C 첫 예제 모든 프로그래밍이 그러하듯 텍스트 출력부터. Objective-C의 헤더 파일 확장명은 .h이고, 소스 파일 확장명은 .m이다.test.m#import int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"tapitolife\n"); NSLog(@"http://tapito.tistory.com/\n"); NSLog(@"Hello, World!"); [pool drain]; return 0; } 더보기
C언어 표준 문자열 관련 함수 – ANSI, Wide Char별 함수 이름 정리 C 언어 표준 문자열 관련 함수 ANSI, Wide Char 별 함수 이름 정리 - by Tapitolife C언어에는 문자열 처리 방식이 크게 4가지가 있습니다. SBCS: 1글자의 크기가 1바이트인 문자세트입니다. 흔히 쓰는 ASCII 코드라고 보면 됩니다. 이 경우 한글을 포함한 로마자 외 다른 글자는 지원되지 않습니다. (도스를 생각하시면 되겠네요.) DBCS: 1글자의 크기가 2바이트인 문자세트입니다. 유니코드를 이야기하지는 않습니다. SBCS로 나타내기에는 너무 많은 글자들을 표현하는 방식으로 KS-X-1001과 같은 코드가 대표적입니다. MBCS: 문자의 종류에 따라 1글자의 크기가 다른 문자세트입니다. SBCS + DBCS의 짬뽕인데요. 아마 컴퓨터 처음 배우셨을 때 들으셨을 내용. 한글은.. 더보기
코드 컨벤션 정리 – 낙타, 파스칼, 헝가리안 코드 컨벤션 정리. 낙타 케이싱, 파스칼 케이싱, 헝가리안 표기법 - by Tapitolife 좋은 프로그래밍 습관을 만들기 위해 총 2편으로 좋은 코드 컨벤션을 정리 해 보았습니다. 그냥 거두절미하고 여기 첫 번째 포스팅에서는 변수 표기법에 대해 정리해 보았습니다. ▶ 변수명 표기법 상용 프로그램 하나 만들기 위해서 보통 여러 명의 개발자가 수 백만 라인의 코드를 작성합니다. 이 때 개발자들은 필요에 따라 변수, 상수, 함수 등을 선언합니다. 그런데 이때 문제가 생깁니다. ▶ 첫 번째 문제 상황 – 데이터 형의 혼란 개발자 여럿이 모여 수백만 라인의 코드를 작성하다 보면 자연스럽게 수 많은 변수/함수들이 선언됩니다. 이 때 그것들을 사용함에 있어 혼돈의 소지가 있습니다. "지금 이게 전역 변수였나?",.. 더보기