어제에 이어서 helloos.nas내용을 살펴보는것부터 시작합니다.

떡하니 갑자기 새로운 helloos.nas를 주는군요.. 그러면서.. 뭐 같은거라 하니..저도 뭐 ^^;;
그리고는 여기서 나오는 어셈블 명령어를 설명해 줍니다.

여기서 사용하는 어셈블러는 nask라는 것으로 OS제작기 No1에 올려놨답니다. ^-^;

; hello-os
; TAB=4

  ORG  0x7c00   ; 이 프로그램이 어디에 read되는가

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

  JMP  entry
  DB  0x90
  DB  "HELLOIPL"            ; boot sector이름을 자유롭게 써도 좋다(8바이트)
  DW  512                       ; 1섹터 크기(512로 해야 함)
  DB  1                           ; 클러스터 크기(1섹터로 해야 함)
  DW  1                          ; FAT가 어디에서 시작될까(보통 1섹터째부터)
  DB  2                           ; FAT 개수(2로 해야 함)
  DW  224                       ; 루트 디렉토리 영역의 크기(보통 224엔트리로 해야 한다)
  DW  2880                      ; 드라이브 크기(2880섹터로 해야 함)
  DB  0xf0                       ; 미디어 타입(0xf0로 해야 함)
  DW  9                          ; FAT영역 길이(9섹터로 해야 함)
  DW  18                        ; 1트럭에 몇 개의 섹터가 있을까(18로 해야 함)
  DW  2                         ; 헤드 수(2로 해야 함)
  DD  0                          ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
  DD  2880                     ; 드라이브 크기를 한번 더 write
  DB  0,0,0x29                ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
  DD  0xffffffff                  ; 아마, 볼륨 시리얼 번호
  DB  "HELLO-OS   "      ; 디스크 이름(11바이트)
  DB  "FAT12   "             ; 포맷 이름(8바이트)
  RESB 18                     ; 우선 18바이트를 비어 둔다

; 프로그램 본체

entry:
  MOV  AX, 0                 ; 레지스터 초기화
  MOV  SS,AX
  MOV  SP,0x7c00
  MOV  DS,AX
  MOV  ES,AX

  MOV  SI,msg
putloop:
  MOV  AL,[SI]
  ADD  SI, 1                     ; SI에 1을 더한다
  CMP  AL,0
  JE  fin
  MOV  AH, 0x0e              ; 한 글자 표시 Function
  MOV  BX, 15                  ; 칼라 코드
  INT  0x10                       ; 비디오 BIOS 호출
  JMP  putloop
fin:
  HLT                               ; 무엇인가 있을 때까지 CPU를 정지시킨다
  JMP  fin                         ; Endless Loop

msg:
  DB  0x0a, 0x0a                ; 개행을 2개
  DB  "hello, world"
  DB  0x0a                        ; 개행
  DB  0

  RESB 0x7dfe-$                 ; 0x7dfe까지를 0x00로 채우는 명령

  DB  0x55, 0xaa

; 이하는 boot sector이외의 부분을 기술

  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 4600
  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 1469432


뭐.. 오늘은 어셈블러 명령어에 대해서 많이 배워보는 시간일듯 하다.ㅎ
차근차근 하나씩 해보자.ㅎ

ORG : 'origin' 기계어가 실행시에 PC의 메모리내 어디에 로딩되는지를 nask에 가르쳐주기 위한 명령 (이로 인하여 $표시의 의미가 바뀌게 된다는데, 출력파일로부터의 번지수가 아니라 ORG에 지정된 주소로부터 몇번째 번지인지를 나타내게 됨)

JMP : 'jump' C언어로 따지면 goto ~~ 긴말이 필요 없다.ㅎ 그냥 지정된 분기로 이동한다.

레이블의 선언 ( ex) entry: ) : <-요 표시를 하면 바로 레이블의 선언이 된다. JMP명령이 이동할 곳을 지정할때 등에 사용된다.

MOV : 'move' 간단하게 이동 예를들어 MOV AX,0 은 AX = 0 과 같은 의미이다. C언어의 대입연산자와 같다고 보면 됨. (뭐 추가적으로 설명이 있자면 MOV SS,AX 라고한다면 SS = AX; 이지만 AX의 데이터가 지워지는 일은 없다. copy에 가까운 행동이다...ㅡ.ㅡ;; 근데 왜 MOVE?뭐 나도 모르지..ㅜㅜ)

CPU 내부의 대표적인 레지스터 8개
AX ........ 어큐뮬레이터(accumulator: 누적 연산기라는 의미)
CX ........ 카운터(counter: 수를 세는 기계라는 의미)
DX ........ 데이터(data: 데이터라는 의미)
BX ........ 베이스(base: 기초, 기점이라는 의미)
SP ........ 스택 포인터(stack pointer: 스택용 포인터)
BP ........ 베이스 포인터(base pointer: 베이스 포인터)
SI  ........ 소스 인덱스(source index: 읽기 인덱스)
DI  ........ 데스티네이션 인덱스(destination index: 쓰기 인덱스)
:: 이것들은 모두 16비트 레지스터로 뭐 읽을땐 이름보다도 에이엑스 에스아이레지스터 등 표기 그대로 읽고 있단다.;;
:: 또한 위의 나열은 기계어에 따라 레지스터 번호순으로 나열한것이다.

CPU 내부의 8bit 레지스터 8개
AL ........ 어큐뮬레이터 로우(low:낮다)
CL ........ 카운터 로우
DL ........ 데이터 로우
BL ........ 베이스 로우
AH ........ 어큐뮬레이터 하이(high:높다)
CH ........ 카운터 하이
DH ........ 데이터 하이
BH ........ 베이스 하이
:: AX = AH + AL 
        = AH(8~15bit) + AL(0~7bit)
그런고로 CPU는 총 아무리 해봐야 16바이트 밖에 기억을 하지 못한다.!! ㅡ.ㅡ;; 좀충격적이다. 위의 CPU구조는 16BIT 컴퓨터 이다. 허나 요샌 32bit, 64bit이다. 요건 요거 나름대로 예를 들어 32bit같은 경우의 레지스터리는 
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
요렇게 진행이 된다고 한다. E는 extend(확장)의 의미...ㅎ뭐 16bit로도 지금은 벅차다 ^^;;

세그먼트 레지스터
ES ........ 엑스트라 세그먼트(extra segment:덤 세그먼트)
CS ........ 코드 세그먼트(code segment)
SS ........ 스택 세그먼트(stack segment)
DS ........ 데이터 세그먼트(data segment)
FS ........ 명칭 없음(덤 세그먼트 2번째)
GS ........ 명칭 없음(덤 세그먼트 3번째)
:: 16bit 레지스터 이다. 이 설명은....... 아쉽지만 내일 한다고 한다.ㅡ.ㅡ;;;쭈욱~~ 설명해주면 안되나?;;
다시 저위의 helloos.nas의 어셈블로 짜여진 소스를 보자면

MOV SI,msg
:: SI=msg 라는 표현이 맞는거지만 msg라는것은 레이블이므로 레이블에 해당되는 주소부분은 SI에 넣으라는 표현으로 생각하면 된다.

MOV AL,[SI]
:: 값자기 명령어 설명을 하다가 이부분에서 메모리 설명이 나오게 되네요 저도 이걸 어찌정리해야할지 난감하군요.ㅜ
   뭐 그래도 설명을 쭈욱 해보자면 이제껏 16bit CPU는 총 16바이트밖에 저장을 못한다는 아주 불우한 사실을 알게되었습니다. 네 바로 그겁니다. CPU는 처리장치 아니 처리밖에 못하게끔 만들어진 것이지요 그럼 그 많은 크기의 데이터들은 어떻게 하느냐 바로 RAM에 저장이 되어서 CPU가 1명령어씩 처리해주는것이지요 뭐 그렇다는 겁니다. 메모리를 소개해야 저 []가 설명이 되네요 .^^;
:: MOV AL, BYTE [SI] 와 위의 표현은 같은 표현으로써 AL에 메모리의  SI번지에 해당하는 데이터를 옮겨라 입니다.ㅎ 이부분이 중요하죠 되지꼬리 별표 땡땡 ㅎㅎ BYTE와 같은 표현으로는 WORD, DWORD라고 있습니다. BYTE가 8bit WORD 16bit DWORD 32bit입니다.ㅎ
:: MOV WORD[678], 123 이라는 명령구문에 대해 잠깐 살펴보자면 메모리의 678번지와 679번지에 걸쳐서 123이라는 데이터를 넣어라 입니다만 여기서 단한가지 주의하고 놀라운 사실이 678번지에 123에 해당하는 01111011의 데이터가 들어가고 0에 해당되는 00000000의 데이터가 679번지에 들어가 진다는 것이지요 이것은 CPU설계부터가 그런것이라 무조건이라고 하니 어쩌겠습니까 잘 알아둘수 밖에 책의 그림의 설명이 너무 자세하고 분명하게 나와서 ㅎ 그대로 붙여보아요.ㅎ

 


ADD : 더하기

CMP : 'compare' 비교하라 ( ex) CMP AL,0 )
JE : 'jump if equal' CMP명령시 두 값이 같을경우 실행 ( AL == 0 일 경우 실행하라는 의미)

INT : 'interrupt' 방해하다. 자세한 설명은 다음기회에...ㅡ.ㅜ;
BIOS(Basic input output system)
OS제작자가 자주 사용할 것 같은 프로그램을 PC제조사가 미리 준비해둔 매우 고마운 물건 !?!!;; 이라고 소개가 되어있네요 처음 알았읍니다. 요런 용도일줄은..ㅋㅋㅋ

INT 뒤의 숫자를 적게 되는데 이를 통하여 BIOS내부 함수를 호출한다고 합니다.
뭐 자세한 내용은 AT-BIOS라는 글 참조해주세요 ^-^;;

HLT : 'halt' CPU를 정지시킨다는 의미랍니다.

아래는 위의 어셈블리어로 작성된 소스의 내용을 C언어식으로 다시 써본것입니다. 역시 C가 이해가 쉽네요.ㅎ;;;;
 entry:
    AX = 0;
    SS = AX;
    SP = 0x7c00;
    DS = AX;
    EX = AX;
    SI = msg;
putloop:
    AL  = BYTE [SI];
    SI = SI + 1;
    if( AL == 0 ) { goto fin; }
    AH = 0x0e;
    BX = 15;
    INT 0x10;
    goto putloop;
fin:
    HLT;
    goto fin;

자.. 여기까지하면 어셈블리어에 대한 설명과 우리가 만들어보았던 간단한 Hello OS도 살펴본 셈이 된다. CPU의 내부구조와 BIOS RAM의 관계까지 알게되었다.

여기서 한가지의 포인트가 존재하는데 바로 ORG의 번지이다.
고정으로 지정되어있는 번지.. 왜 거기서부터 시작되어야 하는가를 설명한다면
0x00007c00 ~ 0x00007dff : 부트섹터가 읽혀지는 어드레스
부트섹터 따로 어떻게 설명해야 좋을지 모르겠지만 간단하게 컴퓨터가 켜지자 마자 건드는 곳! 이라고 하면 되겠다. 내가 만들 OS의 메모리의 시작주소들을 심어놓을곳? 이라고 이해하면 되려나?어떻게 이해해야 할지는 모르겠지만 간단하게 부트섹터에 대해 저자는 이렇게 말하고 있다.

[ 디스크 이미지 전체를 nask로 만드는 것이 아니고, nask로는 일단 512바이트의 부트섹터만 만들고 나머지는 디스크 이미지 관리툴로 만든다. ] 라구... 뭐 부트섹터가 시작이라는 것과 거기에 모든 프로그램을 심는 것이 아니라 시작할 프로그램의 주소 번지를 심어두면 된다!?라는거겠지 ^^;;;

자 이렇게 어셈블리어로 프로그램을 짰다면 당당히 테스트 해봐야 할것이다.
헌데 복잡하게 어셈블 파일을 어셈블러로 컴파일하고 컴파일된 파일을 img파일로 만들고 이렇게 두번의 과정을 거친후 플로피 디스켓에 담아 테스트를 해야하는 것이다.;;;ㅡ.ㅡ;;

이 복잡한 과정을 쉽게 해결하기위한것이 바로 Makefile의 도입!!!
 #파일 생성 규칙

ipl.bin : ipl.nas Makefile
    ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
    ../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek/wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img

우선 저 위의 내용을 소개 하기전에 저자가 사용하는 z_tools에 대해 설명하고자 한다. 간단하게 nask나 gcc, make 등의 툴을 모아놓은것이다. 가상머신 qemu까지 있으므로 위의 저대로 실행을 한다면 바로 플로피디스켓을 이용한 VMware방식을 사용하지 않더라도 에뮬레이터로 돌려볼수 있는것이다.

 
그럼 다시 본문으로 돌아가서
#은 Makefile에서 주석과 같은 역할.
ipl.bin : ipl.nas Makefile
:: ipl.bin을 만들고 싶으면 먼저 ipl.nas 라는 파일과 Makefile이라는 파일이 갖추어져있는지 확인하시오. 갖추어져있다면 자동으로 실행됩니다.

뭐 이런 Makefile을 통해 여러가지 배치파일들을 간소화하고 명령어들을 묶어버리는 것이지요 ^^: 요부분은 깊게 다루지 않도록 하겠습니다.ㅎ

오늘은 어셈블러와 간단한 Makefile을 알아보는것으로 마치게 되네요 ^^! 이렇게해서 OS!! 되는거니? 그런거니? ㅎㅎㅎ;;

 
 

OS = 운영체제
정말 어려운 단어입니다. 대학교 시험 시간에도 자주 나오고... 제 인생의 단 두개뿐인..최악의 학점을 받았던 과목이기두 하구요 ^^;;; ㅡ.ㅜ;;; 여튼 그래도... 여튼 매력있는 단어이죠 조금알면 알수록 더 깊이 알아가게되고 지금 사용하고 있는 운영체제의 종류나 그 성향등도 궁금해지는게 많은게 당연합니다.
제 꿈이! 인공지능에 있다보니... 임베디드나 요런 분야에 관심이 가는데 OS또한 모르고 가려해도 갈수가 없더라구요 그래서 여러권의 책도 관심있게 보구 사기도 했으나 오늘 !! 드뎌 쾈하구!! 꽃히는 책을 만났답니다.
 OS구조와 원리 - OS 개발 30일 프로젝트 - _한빛미디어_(카와이 히데미 저, 이영희 역, 노재현 감수)
책 광고하려고 쓰는건 아니구요 ^^; 책의 1장전.. 프롤로그? 요걸 읽었는데 작가의 대화하듯 프로그램을 소개하는 그 어감과 ㅎ 뭐 다소 파격적인 30 일만에 만드는 OS라는 거에 이끌리게 되어 ^^;; 이렇게 하루하루 읽어 가보기로 했답니다.ㅎ
쩝..^^;; 포기하지 않고 30일만에 끝내야 할터인데..ㅜㅜ 그게 가장큰 걱정이네요.ㅎ 화이팅!!

뭐 무작정 따라하기 느낌이니 두서가 없어도 ^^;; 이해해주세요. 꾸벅 --) __) --) ^^;;

우선 갑자기 엄청 간단한 hello world라는 메시지만 출력되는 OS를 만듭니다.! ㅎㅎ

bz.exe 라는 프로그램을 이용해서 만드는데요
기계어를 다이렉트로 만들어주는 프로그램이랄까나요?;;
뭐 어디 찾아보니 게임 핵같은데도 쓰이는것 같습니다만 ^^;;;;;거기까진 모르겠구요
책에서 소개된 페이지는 막힌 페이지더라구요...ㅜㅜ 그래서 무식하게 일본 야후 들어가서 c.mos bz로 검색하니 ㅎㅎㅎ 나오더군요 ^^;; 책과 같은 버전으루..ㅎㅎㅎㅎ
뭐 그래서 냅다 다운받아서 아래와 같이 열심히 타이핑 했답니다.ㅜㅜ;;

bz.exe : 바이너리 에디터의 일종으로 간단하게 직역하면 2진수 편집기 ^^!


ㅎㅎ 이게 바로 BZ (바이너리에디터)입니다.ㅎㅎ

뭐 그냥 이게 다에요 ...;;;; 이룬.ㅜ;
그리고는 아래와 같이 쭈욱~~ 따라하시면 됩니다.
우선은 아래와 같이 절대 틀리지 않게 타이핑 하시면 되요 스페이스는 자동이니 뭐 무시하시고 열심히 입력하시면..ㅎㅎ 뭐 됩니다.;;;


이렇게 쭈욱 숫자랑 영어만 .. 뭐 아시는분은 아시겠지만 16진수로 0번지부터 쭈욱 입력해 나가시다 보면 옆에 자동적으로 뭐가 막 나타나는데요~~ 뭐 말그대로 자동으루요 ^^ㅎ 요게 엄청 신기하더군요....ㅎ
저아래 나지막히 겨우 읽을수 있는건 hello, world 요부분?ㅎ

뭐 우선 백문이 불여일견!! 한번 보시죠! 계속해서 입력합니다. 00만 .~~ 언제까지? 168000번지까지.. 왼쪽이 주소번지를 가리키는 거거든요.ㅎ 뭐 계속해서 넣으세요!! 쭈욱!! 팁은 Copy&Paste가 되는거니깐요 ^^;; 요거 잘쓰시면 되요.. 뭐... 한가하시다면 00을 계속 누르라고.. 저자가 말하더라고요.. 제가아니구 책 저자가...ㅡ.ㅡ;;



이렇게 00~을 쭈우~~~~욱 원없이 복사하고 나니.... 갑자기

0001F0주변과 001400주변에다가.. 다음과 같이.. 00이 아닌 숫자를 넣어주어야 한다는군요.;; 나참 어이없어서..뭐 우선 하라는대로 해야죠 ^^;;



처음엔... 이글쓰기 전까지만 해도.. 0001F0 주위에 값들을..바꾸는걸 몰랐었답니다.ㅜ;; 다시보이니 보이는군요.. 헌데 신기한건.. 그 주위의 값들 고치지 않고 돌려봤는데 되던걸요 ^^;; 뭐..;; 중요한건 아니었나봐요.ㅎ;;

여튼.. 잘 모르는 관계로 패스~~

그리고 Save 를 누르고는 helloos.img 로 저장을 합니다.ㅎㅎㅎ~~ 헬로~~OS~~

그리고는 갑자기 황당한 요구를 합니다.;;
이 시대에.. 플로피 디스켓을 이용해서 부팅해보라합니다.ㅡ.ㅜ;;
지금이 어느시대인데. ..ㅡ.ㅜ;;

ㅋㅋㅋ 뭐.. 그래서 VMware로 가상머신으로 돌리기로 맘먹었지요..ㅎ
VMware 환경은.. 간단하게 Setting했답니다. ㅎ


 

VM의 간단한 셋팅입니다.
VMware Version은 7.1.0 build-261024 를 사용합니다.ㅎ

중요한 포인트는 플로피 디스켓입니다.
위와 같이 Use floppy image file을 선택해서 위에서 열심히 BZ로 작업하고 저장했던 파일을 선택합니다.

그리고 당당하고 과감하게!! VM 가동!!ㅡㅡㅎ

참... 아주... 깜찍하죠? ㅎㅎㅎㅎ
그래도 감개가 무량합니다. 오오~~ 오오~~ 오오~~ 3번하고 나니.. 뭐 별다른 감흥은 없더군요.ㅜㅜ;;
OS라는게.. 참.. 하드웨어 장치를 쓰기 편하게 해주는 프로그램이다!! 라고 생각을 하면서.. 구동자체는 간단하구나.. ㅋㅋ
뭐 별생각이 다들면서.. 결론은.. 신기하더군요.ㅎ 재밌꾸!! 흥미진진하잖습니까? 나만 그런가 ^^;;; 뭐 여튼..다음 단계로 ㄱㄱㄱㄱㄱ~~~

뭐 끄는 건.. 전원을 눌러서 꺼버리라네요.ㅜㅜ;;
자 그렇게 전원을 끄구 계속 해서 궈궈궈궈~~

; hello-os
; TAB=4

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

  DB  0xeb, 0x4e, 0x90
  DB  "HELLOIPL" ; boot sector의 이름은 자유롭게 써도 좋다(8바이트)
  DW  512  ; 1섹터의 크기(512로 해야 함)
  DB  1  ; 클러스터의 크기(1섹터로 해야 함)
  DW  1  ; FAT가 어디에서 시작될까(보통은 1섹터째부터)
  DB  2  ; FAT의 개수(2로 해야 함)
  DW  224  ; 루트 디렉토리 영역의 크기(보통은 224엔트리로 한다)
  DW  2880  ; 드라이브 크기(2880섹터 해야 함)
  DB  0xf0  ; 미디어 타입(0xf0해야 함
  DW  9  ; FAT영역 길이(9섹터로 해야 함)
  DW  18  ; 1트럭에 몇개의 섹터가 있을까(18로 해야 함)
  DW  2  ; 헤드 수(2로 해야 함)
  DD  0  ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
  DD  2880  ; 드라이브 크기를 한번 더 write
  DB  0,0,0x29 ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
  DD  0xffffffff ; 아마, 볼륨 시리얼 번호
  DB  "HELLO-OS   " ; 디스크 이름(11바이트)
  DB  "FAT12   " ; 포맷 이름(8바이트)
  RESB 18   ; 우선 18바이트를 비어둔다

; 프로그램 본체

  DB  0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
  DB  0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
  DB  0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
  DB  0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
  DB  0xee, 0xf4, 0xeb, 0xfd

; 메세지 부분

  DB  0x0a, 0x0a  ; 개행을 2개
  DB  "hello, world"
  DB  0x0a   ; 개행
  DB  0

  RESB 0x1fe-$    ; 0 x001fe까지를 0x00로 채우는 명령

  DB  0x55, 0xaa

; 이하는 boot sector이외의 부분을 기술

  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 4600
  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 1469432


바로 어셈블로 위와 같은 프로그램을 만드는거다.ㅎㅎ
뭐 여기부턴.. 뭐랄까.. 훔.. 심오하달까? 왠지 모르고 막무가내로 끌려간달까?
따라하래서 따라했지만.. 내꺼는 아닌듯한 그런기분? 훔..ㅡ.ㅡ;;

뭐 왠만한건 주석으로 나와있지만..
약간의 소개를 더 하자면

DB : 'data byte' 파일의 내용을 1바이트만 직접 쓰는 어셈블러의 명령어 소문자 'db'도 사용가능
RESB : 'reserve byte' 바이트 예약? RESB뒤의 나오는 숫자만큼 띄어놓는다.
           (단 여기서 사용되는 nask 어셈블러에서는 숫자만큼 0x00으로 채워놓는다.)
DW : 'data word' 16비트 2바이트
DD : 'data double-world' 32비트 4바이트
RESB 0x1f-$
 : 채워야 할 0x00의 개수를 유동적으로 알아서 채워주게끔 만들기 위해서 사용..?;;; 잘 이해되지 않는군요.ㅜ

뭐 첫날은.. 어셈블러를 이용해서 OS를!?아직 OS라 불러야 할지는 모르겠지만 여튼 돌아가는것!!
OS 끝까지 정복해 보겠으~~ 아자아자!!ㅎㅎ


첨부파일은 바이너리 에디터 bz와 nask라는 어셈블러 nas파일로 만들어준후에 어셈블러를 통해서 img파일을 만들면 된다.
ex) nask.exe helloos.nas helloos.img

간단한 스위칭 대수의 기본 성질... 매번...까먹어서 다시 찾곤하다니..ㅜㅜ 이젠 안까먹어..ㅋㅋㅋ

a + 0 = a                a + 1 = 1                a + a' = 1
a * 1 = a                a * 0 = 0                a * a' = 0

a + a = a                a * a = a

(a')' = a

a(b+c) = ab + ac     a + bc = (a+b)(a+c)

DeMorgan 법칙
(ab)' = a' + b'
출처:디지털시스템(Alan B. Marcovitz)_인터비젼

+ Recent posts