تبدأ العديد من دروس OS في التجميع أو C ++. نبدأ في رمز الجهاز.
في هذا البرنامج التعليمي Raspberry Pi 4 ، سنكتب تجميعًا مستضيفًا ذاتيًا في رمز الجهاز. سنقوم بعد ذلك بتطوير هذا التحويل البرمجي (من خلال تطبيق ميزات جديدة ثم استخدام هذه الميزات في رمز مصدر التحويل البرمجي) إلى شيء قادر على تجميع لغة عالية المستوى. أخيرًا ، بلغتنا عالية المستوى ، حيث تبدأ معظم البرامج التعليمية ، سنكتب خادم ويب بسيط لاستضافة يوم واحد من وثائق البرنامج التعليمي.
معلم: رمز آلة bootstrap؟
; أمر للتعليقات معلم: رمز الجهاز الكبير الإنديان؟
معلم: المسمى غوتو؟
J : الفرع النسبي مع الثنائي L : تسمية لـ GOTO (اقرأ في شريط الذاكرة مع مخطط pos4 name ) GOTO : Goto Label معلم: GOTO الشرطية؟
GOEQGONEGOGTGOLTGOGEGOLEمعلم: وظائف المسمى؟
CALL : "Goto" ولكن مع المتفرعة المرتبطة معلم: الأوتار المنبعثة
MOV reg charEMIT string : ماكرو لسلسلة من MOV reg char و CALL emit مع دعم تسلسل الهروب معلم: تجميع bootstrap
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 ) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png