부트스트랩 만들기


어셈 파일을 만들어 주기 위한 파일



nasm-2.11.09rc1-win32.zip



플로피 디스켓, 또는 드라이버에 쓰기 위한 파일

rawwritewin-0.7.zip

boot.txt 파일을 만든다.

[org 0]

[bits 16]

jmp 0x07C0:start

start:

mov ax, cs    -> cs에는 0x07C0이 들어있음

mov ds, ax    -> ds를 cs와 같게 해준다.

mov ax, 0xB800    -> 비디오 메모리의 세그먼트를 es 레지스터에 넣는다.

mov es, ax

mov di, 0        -> 제일 윗줄의 처음에 쓸 것이다.

mov ax, word [msgBack]    -> 써야할 데이터의 주소값을 지정한다.

mov cx, 0x7FF        -> 화면 전체에 쓰기 위해서는 0x7FF(10진수 2047)개의 WORD가 필요하다.


paint:

mov word [es:di], ax    -> 비디오 메모리를 쓴다.

add di, 2    -> 한 WORD를 썼으니 2를 더한다.

dec cx    -> 한 WORD를 썼으니 cx의 값을 하나 줄인다.

jnz paint    -> CX가 0이 아니면 paint로 점프하여 나머지를 더 쓴다.


mov edi, 0    -> 제일 윗줄의 처음에 쓸것이다.

mov byte [es:edi], 'A'    -> 비디오 메모리에 쓴다.    비디오 메모리는 2바이트이며 아스키코드 1바이트, 배

경 및 글자색 지정하는 1바이트

inc edi    -> 한개의 BYTE를 썼으므로 1을 더한다.

mov byte [es:edi], 0x06    -> 배경색을 쓴다.

inc edi    -> 한개의 BYTE를 썼으므로 1을 더한다.

mov byte [es:edi], 'B'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], 'C'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], '1'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], '2'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], '3'

inc edi

mov byte [es:edi], 0x06

jmp $    -> 이 번지에서 무한루프를 돈다.


msgBack db '.', 0x67    -> 배경색으로 사용할 데이터


times 510-($-$$) db 0    -> 여기서부터 509번지까지 0으로 채운다.

dw 0xAA55    -> 510번지에 0x55를, 511번지에 0xAA를 채워준다.    -> Magic Number라고 부름


위와 같이 소스를 짠다.


그 후 아래와 같이 컴파일 한다.

nasm -f bin -o test.img boot.txt

-f bin 옵션은 제작할 실행 파일이 exe나 com등의 일반 DOS 실행파일이 아닌 바이너리 실행 파일이라는 것을 어셈블러에게 알려줌

vmware 내 플로피디스크 드라이버를 추가한다. 추가 후 img 파일 적용 후 부팅 시 아래 그림과 같이 적용된다.



부팅 시 아래 그림과 같이 적용되는것을 확인할 수 있다.



부트스트랩 만들기 및 적용 성공










+ Recent posts