บทช่วยสอน OS จำนวนมากเริ่มต้นในแอสเซมบลีหรือ C ++ เราเริ่มต้นในรหัสเครื่อง
ในบทช่วยสอน Raspberry Pi 4 นี้เราจะเขียนแอสเซมเบลอร์โฮสต์ตัวเองในรหัสเครื่อง จากนั้นเราจะพัฒนาคอมไพเลอร์นั้น (โดยใช้คุณสมบัติใหม่จากนั้นใช้คุณสมบัติเหล่านั้นในซอร์สโค้ดคอมไพเลอร์) เป็นสิ่งที่สามารถบิดเบือนภาษาระดับสูงได้ ในที่สุดในภาษาระดับสูงของเราที่บทช่วยสอนส่วนใหญ่เริ่มต้นเราจะเขียนเว็บเซิร์ฟเวอร์ง่าย ๆ ไปยังโฮสต์เอกสารของการสอนเองหนึ่งวัน
เหตุการณ์สำคัญ: รหัสเครื่อง bootstrap?
; คำสั่งสำหรับความคิดเห็น MILESTONE: รหัสเครื่องจักรขนาดใหญ่?
MILESTONE: ป้ายกำกับ GOTO?
J : สาขาสัมพัทธ์กับไบนารี L : ฉลากสำหรับ goto (อ่านลงในเทปหน่วยความจำพร้อมรูปแบบ pos4 name ) GOTO : goto label เหตุการณ์สำคัญ: เงื่อนไข goto?
GOEQGONEGOGTGOLTGOGEGOLEเหตุการณ์สำคัญ: ฟังก์ชั่นที่มีป้ายกำกับ?
CALL : "goto" แต่มีการเชื่อมโยงที่เชื่อมโยง เหตุการณ์สำคัญ: การเปล่งสตริง
MOV reg charEMIT string : Macro สำหรับซีรี่ส์ของ MOV reg char และ CALL emit ด้วยการสนับสนุนลำดับ Escape เหตุการณ์สำคัญ: ชุดประกอบ bootstrap
RET : return หลังจากการโทรฟังก์ชั่น 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 ) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png