bootstrapOS
1.0.0
많은 OS 튜토리얼은 어셈블리 또는 C ++에서 시작됩니다. 우리는 기계 코드로 시작합니다.
이 Raspberry Pi 4 튜토리얼에서는 기계 코드에 자체 호스팅 어셈블러를 작성합니다. 그런 다음 해당 컴파일러 (새로운 기능을 구현 한 다음 컴파일러 소스 코드에서 해당 기능을 사용하여)를 고급 언어를 정화 할 수있는 것으로 발전시킬 것입니다. 마지막으로, 대부분의 자습서가 시작되는 고급 언어에서는 단순한 웹 서버를 작성하여 언젠가 튜토리얼의 자체 문서를 호스팅합니다.
이정표 : 부트 스트랩 머신 코드?
; 주석에 대한 명령 이정표 : 빅 엔디안 기계 코드?
이정표 : Goto라는 라벨?
J : 이진이있는 상대 분기 L : GOTO에 대한 레이블 (Scheme pos4 name 있는 메모리 테이프 읽기) GOTO : GOTO 레이블 이정표 : 조건부 goto?
GOEQGONEGOGTGOLTGOGEGOLE이정표 : 라벨링 된 기능?
CALL : "Goto"그러나 연결된 분기와 함께 이정표 : 방출 줄
MOV reg charEMIT string : MOV reg char 의 일련의 매크로 및 Escape Sequence Support와 함께 CALL emit 이정표 : 부트 스트랩 어셈블리
RET : 기능 호출 후 반환 MOV reg hexMOV reg decMOV reg regADD reg reg [reg/value] : 레지스터 값 설정 SUB reg reg [reg/value] : 레지스터 값 설정 LDB reg reg_mem offset : 바이트를로드합니다 STB reg reg_mem offset : 바이트를 저장합니다 ORR reg reg (reg >>/<< value)AND reg reg (reg >>/<< value)이정표 : 스택 랭 함수
.func [name] [num locals].call [name]이정표 : 푸시, 팝 및 DUP
.push constant [val]
.dup
.pop local [idx]
.push local [idx]
.pop param [idx]
.push param [idx]
.pop global [idx]
.push global [idx]
이정표 : 스택 라인 메모리 액세스
.load (..., addr) -> (..., val) .store (..., val, addr) -> (...)이정표 : 산술
.add.sub이정표 : 힙 할당
malloc 스택 함수 (..., num bytes) -> (..., addr)이정표 : 파싱 및 컴파일
fn main 용 GOTO 포함) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png