එකලස් කිරීමේ පාසල: මෙහෙයුම් පද්ධති සංවර්ධනය. හම්මිං කුරුල්ලාගේ පියාසැරිය. සම්පුර්ණයෙන්ම එකලස් කිරීමේ භාෂාවෙන් ලියා ඇති OS එකකට කළ හැකි දේ එකලස් කිරීම සහ සම්පාදනය කිරීම

මම මෑතකදී Assembler ඉගෙන ගැනීමට තීරණය කළ නමුත්, කේත රේඛා නාස්ති කිරීමට මම උනන්දු නොවෙමි. මම හිතුවා මම Assembler ඉගෙන ගන්නකොට යම් විෂයක් ප්‍රගුණ කරනවා කියලා. ඉතින් මගේ තේරීම වැටුනේ bootloader එකක් ලිවීමට. මගේ සොයාගැනීම්වල ප්‍රතිඵලය මේ බ්ලොග් එකේ තියෙනවා.

මම ප්‍රායෝගිකව න්‍යායට ප්‍රිය කරන බව වහාම පැවසීමට කැමැත්තෙමි, එබැවින් අපි ආරම්භ කරමු.

මුලින්ම මම ඔයාලට කියල දෙන්නම් සරල එකක් හදන හැටි MBRඑවිට අපට හැකි ඉක්මනින් ප්‍රතිඵලය භුක්ති විඳිය හැක. ප්රායෝගික උදාහරණ සමඟ අපි වඩාත් සංකීර්ණ වන විට, මම න්යායික තොරතුරු ලබා දෙන්නෙමි.

පළමුව, USB ෆ්ලෑෂ් ධාවකය සඳහා ඇරඹුම් කාරකයක් සාදා ගනිමු!

අවධානය!!! අපගේ පළමු එකලස් කිරීමේ වැඩසටහන ෆ්ලෑෂ් ඩ්‍රයිව් එකක් සහ ෆ්ලොපි ඩිස්ක් හෝ වැනි වෙනත් උපාංග සඳහා ක්‍රියා කරයි HDD. පසුව, සියලුම උදාහරණ නිවැරදිව ක්‍රියා කිරීම සඳහා, විවිධ උපාංගවල කේතය ක්‍රියාත්මක කිරීම සම්බන්ධයෙන් මම පැහැදිලි කිරීම් ගණනාවක් ලබා දෙන්නෙමි.

අපි ලියන්නම් ෆාස්ම්, එය ලෝඩර් ලිවීම සඳහා හොඳම සම්පාදකය ලෙස සලකනු ලබන බැවින්, එනම් MBR Fasm තෝරා ගැනීමට දෙවන හේතුව වන්නේ ගොනු සම්පාදනය කිරීම ඉතා පහසු වීමයි. විධාන නැත විධාන රේඛාවසහ යනාදි. එකලස් කරන්නා ඉගෙනීමෙන් සහ ඔබේ අරමුණු සාක්ෂාත් කර ගැනීමෙන් ඔබව සම්පූර්ණයෙන්ම අධෛර්යමත් කළ හැකි විකාර, එබැවින්, ආරම්භක අදියරේදී අපට වැඩසටහන් දෙකක් සහ සමහරක් අවශ්‍ය වනු ඇත අනවශ්යඅවම ප්රමාණයේ ෆ්ලෑෂ් ධාවකය. මම 1Gb හාරා (එය ඉක්මනින් හැඩගස්වන අතර, එය අනුකම්පාවක් නොවේ, යමක් තිබේ නම්). අපගේ ඇරඹුම් කාරකය වැඩ කිරීමෙන් පසුව, ෆ්ලෑෂ් ධාවකය සාමාන්යයෙන් ක්රියා නොකරනු ඇත. මගේ වින්ඩෝස් 7 ෆ්ලෑෂ් ඩ්‍රයිව් එක හැඩතල ගැන්වීම ප්‍රතික්ෂේප කරයි. ෆ්ලෑෂ් ධාවකය නැවත ජීවයට ගෙන ඒම සඳහා උපයෝගීතාවයක් භාවිතා කිරීමට මම නිර්දේශ කරමි HP USB තැටි ගබඩාව ආකෘති මෙවලම (HPUSBFW.EXE) හෝ ෆ්ලෑෂ් ඩ්‍රයිව් ආකෘතිකරණය සඳහා වෙනත් උපයෝගිතා.

අපි ඒවා ස්ථාපනය කර අදාළ කෙටිමං ඩෙස්ක්ටොප් එකට හෝ ඔබ කැමති තැනකට විසි කරමු.

සූදානම සම්පූර්ණයි, අපි ක්‍රියාවට යමු

Fasmw.exe විවෘත කර පහත සඳහන් දේ එහි ලියන්න. ප්‍රතිඵලය බැලීමට අපි අවම කේතයක් සටහන් කරමු. මෙහි ලියා ඇති දේ අපි පසුව විශ්ලේෂණය කරමු. මම මගේ අදහස් කෙටියෙන් දෙන්නම්.

FASM කේතය: ============= boot.asm ================

org 7C00h ; මෙම නියෝගය සැලකිල්ලට ගනිමින් අපගේ වැඩසටහන් ලිපින ගණනය කරනු ලැබේ

භාවිතය16 ; ෂඩ් දශම කේතය ජනනය වේ

cli ;කොටස් රෙජිස්ටර් වල ලිපින වෙනස් කිරීම සඳහා බාධා කිරීම් අක්‍රීය කරන්න

mov ax, 0

mov sp, 7C00h

sti ;බාධා කිරීම් සබල කරන්න (ලිපින වෙනස් කිරීමෙන් පසු)

mov ax, 0003h; තිරය මත රේඛාවක් පෙන්වීම සඳහා වීඩියෝ මාදිලිය සකසන්න

int 10h

mov ax, 1301h ; තන්තුවේ සත්‍ය ප්‍රතිදානය වන්නේ 13h int 10h ශ්‍රිතයයි (වැඩි විස්තර පසුව)

mov bp, stroka ;ප්‍රතිදාන තන්තුවේ ලිපිනය

mov dx, 0000h ;පෙළ දර්ශනය වන රේඛාව සහ තීරුව

mov cx, 15 ;ප්‍රතිදාන තන්තුවේ අක්ෂර ගණන

mov bx, 000eh ;00-වීඩියෝ පිටු අංකය (ස්පර්ශ නොකිරීමට වඩා හොඳය) 0e-අක්ෂර ගුණාංග (වර්ණය, පසුබිම)

int 10h

jmp $;tread water (මෙම අවස්ථාවේදී වැඩසටහන ලූප් කරයි)

string db "හරි, MBR පටවා ඇත!"

වාර 510 - ($ - $$) db 0 ;පෙර බයිටය සහ ඊළඟ බයිටය අතර අවකාශය බිංදුවලින් පිරවීම

db 0x55 ,0xAA ;අවසාන බයිට් දෙක

මෙම කේතය (Ctrl+F9) fasm"e හි සම්පාදනය කර එහි ප්‍රතිඵලයක් ලෙස ලැබෙන binary ගොනුව යම් පහසු ස්ථානයක boot.bin ලෙස සුරකින්න. අපගේ ද්විමය ෆ්ලෑෂ් ඩ්‍රයිව් එකකට ලිවීමට පෙර, කුඩා න්‍යායක්.

ඔබ ෆ්ලෑෂ් ඩ්‍රයිව් එකක් පරිගණකයට සම්බන්ධ කරන විට, ඔබට ෆ්ලෑෂ් ඩ්‍රයිව් එකෙන් බූට් කිරීමට අවශ්‍ය බව BIOS පද්ධතියට පැහැදිලි නැත, එබැවින් BIOS සැකසුම් තුළ ඔබට ආරම්භ කිරීමට අවශ්‍ය උපාංගය තෝරා ගත යුතුය. එබැවින් අපි තෝරා ගත්තෙමු. USB වෙතින් ආරම්භ කිරීමට (ඔබ විසින්ම මෙය කරන්නේ කෙසේදැයි සොයා ගැනීමට සිදු වනු ඇත , BIOS අතුරුමුහුණත විවිධ වෙනස්කම් ඇති බැවින්... ඔබට එය ගූගල් කළ හැක. BIOS සැකසුම්ඔබේ සඳහා මවු පුවරුව. රීතියක් ලෙස එහි සංකීර්ණ කිසිවක් නොමැත).

දැන් ඔබට ෆ්ලෑෂ් ඩ්‍රයිව් එකකින් ආරම්භ කිරීමට අවශ්‍ය බව BIOS දනී, එය ෆ්ලෑෂ් ඩ්‍රයිව් හි අංශ ශුන්‍යය ආරම්භ කළ හැකි බවට වග බලා ගත යුතුය. මෙය සිදු කිරීම සඳහා, BIOS ස්කෑන් කරයි අංශ ශුන්‍යයේ අවසාන බයිට් දෙකසහ, ඒවා 0x55 0xAA ට සමාන නම්, එවිට පමණක් එය පටවනු ලැබේ RAM. එසේ නොමැතිනම්, BIOS ඔබගේ ෆ්ලෑෂ් ධාවකය මග හරිනු ඇත. මෙම මැජික් බයිට් දෙක සොයාගත් පසු, එය 0000: 7С00h ලිපිනයේ RAM වෙත අංශ ශුන්‍ය පටවා, පසුව ෆ්ලෑෂ් ධාවකය අමතක කර පාලනය මෙම ලිපිනයට මාරු කරයි. දැන් පරිගණකයේ සියලුම බලය ඔබේ ඇරඹුම් කාරකයට අයත් වන අතර එය RAM වලින් ක්‍රියා කරන අතර එය ෆ්ලෑෂ් ඩ්‍රයිව් එකකින් අමතර කේතයක් පූරණය කළ හැකිය. DMDE වැඩසටහනේ මෙම අංශයම පෙනෙන්නේ කෙසේදැයි දැන් අපි බලමු.

1.ඔබගේ ෆ්ලෑෂ් ඩ්‍රයිව් පරිගණකයට ඇතුළු කර එහි ඔබට අවශ්‍ය තොරතුරු අඩංගු නොවන බවට වග බලා ගන්න.

2.DMDE වැඩසටහන විවෘත කරන්න. පින්තූරවල සියලුම වැඩිදුර පියවර කියවන්න:

මෙම විකටය නැරඹීමෙන් පසු, ඔබේ MBR ෆ්ලෑෂ් ඩ්‍රයිව් එකකට පැටවීමේ කුසලතාව ඔබට ලැබෙනු ඇත. අපගේ ලෝඩරයේ දිගුකාලීන අපේක්ෂිත ප්‍රති result ලය පෙනෙන්නේ මෙයයි:


මාර්ගය වන විට, අපි අවම ඇරඹුම් කාරක කේතය ගැන කතා කරන්නේ නම්, එය මේ වගේ විය හැකිය:

සංවිධානය 7C00h
jmp$
db 508 dup(0)
db 0x55.0xAA

එවැනි ඇරඹුම් කාරකයක්, පාලනයක් ලැබීමෙන් පසු, පරිගණකය සරලව එල්ලා, ලූපයක් තුළ තේරුමක් නැති jmp $ විධානයක් ක්‍රියාත්මක කරයි. මම ඇයව හඳුන්වන්නේ පාගා යන ජලය ලෙසයි.

මම ඔබට උදව් විය හැකි වීඩියෝවක් YouTube හි පළ කළෙමි:

අවසාන වශයෙන්, ඇරඹුම් කාරකය පිළිබඳ කෙටි කරුණු කිහිපයක්:

1. bootloader, bootloader ලෙසද, MBR ලෙසද හැඳින්වේ, එහි විශාලත්වය bytes 512කි. ඓතිහාසික වශයෙන්,
පැරණි මාධ්‍ය සහ උපාංග සඳහා මෙම කොන්දේසිය සපුරාලිය යුතු බව.
2. ඇරඹුම් කාරකය සෑම විටම ෆ්ලෑෂ් ඩ්‍රයිව්, නම්‍ය තැටියක ශුන්‍ය අංශයේ පිහිටා ඇත. දෘඪ තැටිය, DMDE වැඩසටහනේ හෝ උපාංග සමඟ වැඩ කිරීමට ඔබට ඉඩ සලසන වෙනත් hex සංස්කාරකයන්ගේ දෘෂ්ටි කෝණයෙන්. ලැයිස්තුගත උපාංගවලින් එකක් මත ද්විමය (අපගේ boot.bin) පැටවීමට, ඒවායේ අභ්යන්තර භෞතික ව්යුහය ගැන සිතීමට අවශ්ය නොවේ. DMDE වැඩසටහන මෙම උපාංගවල අංශ කියවන ආකාරය සරලව දන්නා අතර ඒවා LBA මාදිලියේ පෙන්වයි (සරලව ඒවා 0 සිට අවසාන අංශය දක්වා අංකනය කරයි). ඔබට LBA ගැන කියවිය හැකිය
3. ඇරඹුම් කාරකය සෑම විටම 0x55 0xAA බයිට් දෙකකින් අවසන් විය යුතුය.
4. ඇරඹුම් කාරකය සෑම විටම 0000: 7С00h ලිපිනයෙහි මතකයට පටවනු ලැබේ.
5. මෙහෙයුම් පද්ධතිය ඇරඹුම් කාරකය සමඟ ආරම්භ වේ.


මුල්: AsmSchool: මෙහෙයුම් පද්ධතියක් සාදන්න
කර්තෘ: මයික් සෝන්ඩර්ස්
ප්‍රකාශිත දිනය: අප්‍රේල් 15, 2016
පරිවර්තනය: A. Panin
පරිවර්තන දිනය: අප්රේල් 16, 2016

4 වන කොටස: මෙම ලිපි මාලාවේ පෙර ලිපි කියවීමෙන් ඔබ ලබාගත් කුසලතා සමඟ, ඔබට ඔබේම මෙහෙයුම් පද්ධතියක් සංවර්ධනය කිරීම ආරම්භ කළ හැකිය!

එය කුමක් සදහාද?

  • සම්පාදකයින් ක්‍රියා කරන ආකාරය තේරුම් ගැනීමට.
  • CPU උපදෙස් තේරුම් ගැනීමට.
  • කාර්ය සාධනය සඳහා ඔබේ කේතය ප්‍රශස්ත කිරීමට.

මාස කිහිපයක කාලය තුළ අපි සංවර්ධනයෙන් ආරම්භ වූ දුෂ්කර මාවතක ගමන් කළෙමු සරල වැඩසටහන්ලිනක්ස් සඳහා එකලස් කිරීමේ භාෂාවෙන් සහ මෙහෙයුම් පද්ධතියක් නොමැතිව පුද්ගලික පරිගණකයක ක්‍රියාත්මක වන ස්වයං අන්තර්ගත කේතයක් සංවර්ධනය කිරීමත් සමඟ මාලාවේ අවසාන ලිපියෙන් අවසන් විය. හොඳයි, දැන් අපි සියලු තොරතුරු එකට එකතු කර සැබෑ මෙහෙයුම් පද්ධතියක් නිර්මාණය කිරීමට උත්සාහ කරමු. ඔව්, අපි Linus Torvalds ගේ අඩිපාරේ යන්නෙමු, නමුත් පළමුව අපි පහත සඳහන් ප්‍රශ්නවලට පිළිතුරු සැපයිය යුතුය: "මෙහෙයුම් පද්ධතියක් යනු කුමක්ද? එහි කුමන කාර්යයන් නැවත නිර්මාණය කළ යුතුද?"

මෙම ලිපියෙන් අපි මෙහෙයුම් පද්ධතියේ මූලික කාර්යයන් කෙරෙහි පමණක් අවධානය යොමු කරමු: වැඩසටහන් පැටවීම සහ ක්රියාත්මක කිරීම. සංකීර්ණ මෙහෙයුම් පද්ධති අතථ්‍ය මතක කළමනාකරණය සහ සැකසුම් වැනි තවත් බොහෝ කාර්යයන් ඉටු කරයි ජාල පැකට්, නමුත් ඔවුන්ගේ නිවැරදිව ක්රියාත්මක කිරීම සඳහා වසර ගණනාවක් අඛණ්ඩ වැඩ කිරීම අවශ්ය වේ, එබැවින් මෙම ලිපියෙන් අපි ඕනෑම මෙහෙයුම් පද්ධතියක පවතින මූලික කාර්යයන් පමණක් සලකා බලමු. පසුගිය මාසයේදී අපි නම්‍ය තැටියක (එහි පළමු අංශය) 512-බයිට් අංශයට ගැලපෙන කුඩා වැඩසටහනක් සකස් කළ අතර දැන් අපි එය තැටියෙන් අමතර දත්ත පැටවීමේ කාර්යය එකතු කිරීමට ටිකක් වෙනස් කරන්නෙමු.

ඇරඹුම් කාරකය සංවර්ධනය

අපගේ මෙහෙයුම් පද්ධතියේ ද්විමය කේතයේ ප්‍රමාණය හැකිතාක් අඩු කිරීමට උත්සාහ කළ හැකි අතර එය BIOS මඟින් පූරණය කරන ලද නම්ය තැටියේ පළමු 512-බයිට් අංශයට ගැලපේ, නමුත් මෙම අවස්ථාවේදී අපට නොහැකි වනු ඇත. ඕනෑම රසවත් කාර්යයන් ක්රියාත්මක කිරීමට. එබැවින්, සරල පද්ධති ඇරඹුම් කාරකයක ද්විමය කේතය තැන්පත් කිරීමට අපි මෙම බයිට් 512 භාවිතා කරමු, එමඟින් OS කර්නල් ද්විමය කේතය RAM වෙත පටවා එය ක්‍රියාත්මක කරයි. (මෙයින් පසු, අපි OS කර්නලයම සංවර්ධනය කරන්නෙමු, එමඟින් වෙනත් වැඩසටහන් වල ද්විමය කේතය තැටියෙන් පූරණය කර එය ක්‍රියාත්මක කරනු ඇත, නමුත් අපි මේ ගැන ටිකක් පසුව කතා කරමු.)

ඔබට මෙම ලිපියේ සාකච්ඡා කර ඇති උදාහරණ සඳහා මූලාශ්‍ර කේතය www.linuxvoice.com/code/lv015/asmschool.zip වෙතින් බාගත හැකිය. මෙය boot.asm නම් ගොනුවකින් අපගේ පද්ධති ඇරඹුම් කාරකයේ කේතය වේ:

BITS 16 jmp කෙටි ආරම්භය ; ලේබලයට පනින්න, තැටි විස්තරය නොපවතියි ; තැටි විස්තරයට පෙර එකතු කිරීම "bpb.asm" ආරම්භය ඇතුළත් කරන්න: mov ax, 07C0h ; පූරණය ලිපිනය mov ds, ax ; දත්ත අංශය mov ax, 9000h ; තොග සැකසීම mov ss, ax mov sp, 0FFFFh ; තොගය පහළට වැඩෙයි! cld ; දිශාව ධජය සැකසීම mov si, kern_filename අමතන්න load_file jmp 2000h:0000h ; kern_filename db "MYKERNELBIN" ගොනුවෙන් පූරණය කරන ලද OS කර්නල් ද්විමය කේතය වෙත සංක්‍රමණය %ඇතුළත් "disk.asm" වාර 510-($-$$) db 0 ; බයිට් 510 දක්වා dw 0AA55h දක්වා බිනරි කේතය බින්දු සමඟ පිරවීම; Boot loader binary end marker buffer: ; තැටි අන්තර්ගතය සඳහා බෆරයේ ආරම්භය

මෙම කේතයේ, පළමු CPU උපදෙස වන්නේ jmp උපදෙස් වන අතර එය BITS විධානයට පසුව පිහිටයි, එය NASM එකලස් කරන්නාට 16-bit මාදිලිය භාවිතා කරන බව කියයි. ලිපි මාලාවේ පෙර ලිපියෙන් ඔබට මතක ඇති පරිදි, තැටියෙන් BIOS වෙතින් පූරණය කරන ලද 512-බයිට් ද්විමය කේතය ක්‍රියාත්මක කිරීම ආරම්භයේ සිටම ආරම්භ වේ, නමුත් විශේෂ දත්ත කට්ටලයක් මඟ හැරීමට අපට ලේබලයකට පැනීමට සිදුවේ. පැහැදිලිවම, පසුගිය මාසයේ අපි තැටියේ ආරම්භයට කේතය ලියා (dd උපයෝගීතාව භාවිතා කර) තැටියේ ඉතිරි ඉඩ හිස්ව තැබුවෙමු.

දැන් අපට සුදුසු MS-DOS ගොනු පද්ධතියක් (FAT12) සමඟ නම්ය තැටියක් භාවිතා කිරීමට සිදුවනු ඇත, සහ මෙම ගොනු පද්ධතිය සමඟ නිවැරදිව වැඩ කිරීම සඳහා, අපි අංශයේ ආරම්භය ආසන්නයේ විශේෂ දත්ත කට්ටලයක් එකතු කළ යුතුය. මෙම කට්ටලය BIOS Parameter Block (BPB) ලෙස හඳුන්වනු ලබන අතර තැටි ලේබලය, අංශ ගණන, වැනි දත්ත අඩංගු වේ. එවැනි මාතෘකා සඳහා ලිපි මාලාවකට වඩා වැඩි ප්‍රමාණයක් කැප කළ හැකි බැවින්, අපි ඒ හා සම්බන්ධ සියලුම උපදෙස් සහ දත්ත bpb.asm නම් වෙනම මූලාශ්‍ර කේත ගොනුවක තබා ඇති බැවින් එය මෙම අවස්ථාවෙහිදී අප උනන්දු නොවිය යුතුය.

ඉහත මත පදනම්ව, අපගේ කේතයෙන් මෙම නියෝගය අතිශයින්ම වැදගත් වේ:

"bpb.asm" ඇතුළත් කරන්න

මෙය NASM විධානයක් වන අතර එය එකලස් කිරීමේදී නිශ්චිත මූලාශ්‍ර ගොනුවක අන්තර්ගතය වත්මන් මූලාශ්‍ර ගොනුවට ඇතුළත් කිරීමට ඉඩ සලසයි. මේ ආකාරයෙන් අපට BIOS පරාමිති බ්ලොක් එක ක්‍රියාත්මක කිරීම පිළිබඳ සියලු විස්තර වෙනම ගොනුවක තැබීමෙන් අපගේ ඇරඹුම් කාරක කේතය හැකි තරම් කෙටි හා තේරුම් ගත හැකිය. අංශයේ ආරම්භයෙන් පසු BIOS පරාමිති බ්ලොක් එක බයිට් තුනක් පිහිටා තිබිය යුතු අතර, jmp උපදෙස් බයිට් දෙකක් පමණක් ගන්නා බැවින්, අපි nop උපදෙස් භාවිතා කළ යුතුය (එහි නම "කිසිදු මෙහෙයුමක්" යන්නෙන් අදහස් කෙරේ - මෙය සිදු කරන උපදෙස් වේ. ඉතිරි බයිටය පිරවීම සඳහා CPU චක්‍ර නාස්ති කිරීම හැර වෙන කිසිවක් නැත.

තොගය සමඟ වැඩ කිරීම

ඊළඟට අපට රෙජිස්ටර් සහ තොගය සකස් කිරීම සඳහා පසුගිය ලිපියේ සාකච්ඡා කළ උපදෙස් වලට සමාන උපදෙස් මෙන්ම, ඇතැම් උපදෙස් සඳහා දිශා ධජය සැකසීමට අපට ඉඩ සලසන cld ("පැහැදිලි දිශානතිය" යන්නෙන් අදහස් කෙරේ) උපදෙස් භාවිතා කිරීමට සිදුවනු ඇත. lodsb උපදෙස් ලෙස, එය ක්‍රියාත්මක කරන විට, SI ලේඛනයේ අගය අඩු කරනවාට වඩා වැඩි කරයි.

ඊට පසු, අපි ස්ට්‍රිං එකේ ලිපිනය SI ලේඛනයට දමා අපගේ load_file ශ්‍රිතය අමතන්නෙමු. නමුත් විනාඩියක් ඒ ගැන සිතන්න - අපි තවමත් මෙම විශේෂාංගය දියුණු කර නැත! ඔව්, මෙය සත්‍යයකි, නමුත් එය ක්‍රියාත්මක කිරීම disk.asm නමින් අප ඇතුලත් කර ඇති වෙනත් ප්‍රභව කේත ගොනුවකින් සොයා ගත හැක.

MS-DOS හි ආකෘතිගත කර ඇති නම්ය තැටි මත භාවිතා වන FAT12 ගොනු පද්ධතිය ලබා ගත හැකි සරලම එකකි. ගොනු පද්ධති, නමුත් එහි අන්තර්ගතය සමඟ වැඩ කිරීම සඳහා ද සැලකිය යුතු කේතයක් අවශ්ය වේ. load_file subroutine එක පේළි 200ක් පමණ දිග වන අතර එය මෙම ලිපියේ නොපෙන්වනු ඇත, අපි සලකා බලන්නේ මෙහෙයුම් පද්ධතියක් සංවර්ධනය කිරීමේ ක්‍රියාවලිය මිස නිශ්චිත ගොනු පද්ධතියක් සඳහා ධාවකයක් නොවන බැවින්, එම නිසා, ඉඩ නාස්ති කිරීම එතරම් නුවණට හුරු නොවේ. මේ ආකාරයට පිටු ලොග් කරන්න. සාමාන්‍යයෙන්, අපි දැනට පවතින ප්‍රභව කේත ගොනුව අවසන් වීමට පෙර disk.asm මූලාශ්‍ර කේත ගොනුව ඇතුළත් කළ අතර එය අමතක කළ හැකිය. (ඔබ තවමත් FAT12 ගොනු පද්ධතියේ ව්‍යුහය ගැන උනන්දුවක් දක්වන්නේ නම්, ඔබට http://tinyurl.com/fat12spec හි විශිෂ්ට දළ විශ්ලේෂණය කියවිය හැකිය, ඉන්පසු disk.asm මූලාශ්‍ර කේත ගොනුව බලන්න - එහි අඩංගු කේතය එය හොඳින් අදහස් දක්වා ඇත.)

ඕනෑම අවස්ථාවක, load_file routine මඟින් SI ලේඛනයේ නම් කර ඇති ගොනුවෙන් ද්විමය කේතය ඕෆ්සෙට් 0 හි 2000 කොටසට පූරණය කරයි, ඉන්පසු අපි ක්‍රියාත්මක කිරීම සඳහා එහි ආරම්භයට පනින්නෙමු. එපමණයි - මෙහෙයුම් පද්ධතියේ කර්නලය පටවා ඇති අතර පද්ධති ඇරඹුම් කාරකය එහි කාර්යය සම්පූර්ණ කර ඇත!

DOS හි නම්‍ය තැටි වල භාවිතා වන 8+3 නම් කිරීමේ ක්‍රමයට හොඳින් ගැලපෙන මෙහෙයුම් පද්ධති කර්නල් ගොනු නාමය ලෙස අපගේ කේතය MYKERNEL.BIN වෙනුවට MYKERNELBIN භාවිතා කරන බව ඔබ දැක ඇති. ඇත්ත වශයෙන්ම, FAT12 ගොනු පද්ධතිය ගොනු නාමවල අභ්‍යන්තර නිරූපණයක් භාවිතා කරන අතර, තිත් අක්ෂරය සෙවීමට සහ ගොනු නාමයට පරිවර්තනය කිරීමට යාන්ත්‍රණයක් ක්‍රියාත්මක කිරීමට අපගේ load_file පුරුද්ද අවශ්‍ය නොවන බවට සහතික වන ගොනු නාමයක් භාවිතා කිරීමෙන් අපි ඉඩ ඉතිරි කරමු. ගොනු පද්ධතියේ අභ්යන්තර නිරූපණය.

disk.asm ප්‍රභව කේත ගොනුව සම්බන්ධ කිරීම සඳහා වන විධානය සහිත රේඛාවෙන් පසුව, පද්ධති ඇරඹුම් කාරකයේ ද්විමය කේතය බයිට් 512 දක්වා බිංදු සමඟ පෑඩ් කිරීමට සහ එහි ද්විමය කේතයේ අවසාන ලකුණ ඇතුළත් කිරීමට සැලසුම් කර ඇති රේඛා දෙකක් ඇත (මෙය සාකච්ඡා කරන ලදී. පෙර ලිපියේ). අවසාන වශයෙන්, කේතය අවසානයේ "බෆර්" ලේබලය ඇත, එය load_file චර්යාව විසින් භාවිතා කරනු ලැබේ. මූලික වශයෙන්, load_file routine හට තැටියේ ගොනුවක් සෙවීමේදී යම් අතරමැදි වැඩ කිරීමට RAM හි නිදහස් ඉඩක් අවශ්‍ය වන අතර, boot loader එක පූරණය කිරීමෙන් පසු අපට ඕනෑ තරම් නිදහස් ඉඩක් ඇති බැවින් අපි බෆරය මෙහි තබමු.

පද්ධති ඇරඹුම් කාරකය එකලස් කිරීම සඳහා, පහත විධානය භාවිතා කරන්න:

Nasm -f bin -o boot.bin boot.asm

දැන් අපට MS-DOS ආකෘතියෙන් අතථ්‍ය නම්‍ය තැටි රූපයක් සෑදිය යුතු අතර පහත විධානයන් භාවිතා කර එහි පළමු බයිට 512 ට අපගේ ඇරඹුම් කාරක ද්විමය කේතය එක් කළ යුතුය:

Mkdosfs -C floppy.img 1440 dd conv=notrunc if=boot.bin of=floppy.img

මෙම අවස්ථාවේදී, පද්ධති ඇරඹුම් කාරකයක් සංවර්ධනය කිරීමේ ක්රියාවලිය සම්පූර්ණ ලෙස සැලකිය හැකිය! දැන් අප සතුව bootable floppy disk image එකක් ඇති අතර එය mykernel.bin නම් ගොනුවකින් මෙහෙයුම් පද්ධතියේ කර්නල් ද්විමය කේතය පූරණය කර එය ක්‍රියාත්මක කිරීමට ඉඩ සලසයි. ඊළඟට, කාර්යයේ වඩාත් රසවත් කොටසක් අප බලා සිටී - මෙහෙයුම් පද්ධතියේ කර්නලයම සංවර්ධනය කිරීම.

මෙහෙයුම් පද්ධති කර්නලය

අපගේ මෙහෙයුම් පද්ධති කර්නලය බොහෝ වැදගත් කාර්යයන් ඉටු කිරීමට අපට අවශ්‍ය වේ: සුබපැතුම් පණිවිඩයක් ප්‍රදර්ශනය කිරීම, පරිශීලකයාගෙන් ආදානය පිළිගැනීම, ආදානය සහය දක්වන විධානයක් දැයි තීරණය කිරීම සහ පරිශීලකයා ඔවුන්ගේ නම් සඳහන් කරන විට තැටියෙන් වැඩසටහන් ක්‍රියාත්මක කිරීම. mykernel.asm ගොනුවේ මෙහෙයුම් පද්ධති කර්නල් කේතය මෙයයි:

Mov ax, 2000h mov ds, ax mov es, ax loop: mov si, prompt call lib_print_string mov si, user_input call lib_input_string cmp byte , 0 je loop cmp word , "ls" je list_files mov cmp වර්ඩ්, si lib7_8 ඇමතුම් jc load_fail ඇමතුම 32768 jmp ලූප් load_fail: mov si, load_fail_msg ඇමතුම් lib_print_string jmp loop list_files: mov si, file_list ඇමතුම lib_get_file_list ඇමතුම lib_print_string jmp loop prompt db0_fail db0 ", 13 13, 10, "සොයා ගත නොහැක! ", 0 user_input times 256 db 0 file_list times 1024 db 0 %include "lib.asm"

කේතය බැලීමට පෙර, ඔබ අපගේ වෙබ් අඩවියෙන් asmschool.zip ලේඛනාගාරයේ ද පිහිටා ඇති lib.asm මූලාශ්‍ර කේත ගොනුව ඇතුළත් කිරීමේ නියෝගය සමඟ අවසාන පේළිය වෙත අවධානය යොමු කළ යුතුය. මෙය ඔබට භාවිතා කළ හැකි තිරය, යතුරුපුවරුව, නූල් සහ තැටි සමඟ වැඩ කිරීම සඳහා ප්‍රයෝජනවත් චර්යාවන්ගේ පුස්තකාලයකි - මෙම අවස්ථාවේදී අපි මෙම මූල කේත ගොනුව මෙහෙයුම් පද්ධතියේ කර්නලයේ ප්‍රධාන කේත ගොනුවේ අවසානයේම අනුපිළිවෙලින් ඇතුළත් කරමු. දෙවැන්න හැකි තරම් සංයුක්ත හා අලංකාර කිරීමට. සඳහා lib.asm පුස්තකාල චර්යාවන් කොටස බලන්න අමතර තොරතුරුපවතින සියලුම subroutines ගැන.

මෙහෙයුම් පද්ධතියේ කර්නල් කේතයේ පළමු පේළි තුනෙහි, අපි ද්විමය කේතය පටවා ඇති කොටස 2000 වෙත යොමු කිරීමට දත්ත සමඟ කොටස් ලේඛන පුරවන්නෙමු. සහතික කිරීම සඳහා මෙය වැදගත් වේ නිවැරදි මෙහෙයුම lodsb වැනි උපදෙස්, වත්මන් කොටසින් දත්ත කියවිය යුතු අතර වෙනත් කිසිවකින් නොවේ. මෙයින් පසු, අපි කොටස්වල කිසිදු අමතර මෙහෙයුම් සිදු නොකරමු; අපගේ මෙහෙයුම් පද්ධතිය 64 KB RAM සමඟ ක්‍රියා කරයි!

තවදුරටත් කේතයේ ලූපයේ ආරම්භයට අනුරූප ලේබලයක් ඇත. පළමුවෙන්ම, අපි lib.asm පුස්තකාලයෙන් එක් දිනචරියාවක් භාවිතා කරමු, එනම් lib_print_string, සුබ පැතුම් මුද්‍රණය කිරීමට. සුබපැතුම් රේඛාවට පෙර බයිට් 13 සහ 10 ගැලවීමේ අක්ෂර වේ. නව මාර්ගය, ඕනෑම වැඩසටහනක නිමැවුමෙන් පසු සුභපැතුම් ක්ෂණිකව නොපෙන්වන නමුත් සෑම විටම නව රේඛාවක ස්තුති වේ.

මෙයින් පසු, අපි lib.asm පුස්තකාලයෙන් lib_input_string නම් තවත් දින චර්යාවක් භාවිතා කරමු, එය පරිශීලකයාගේ යතුරුපුවරු ආදානය ලබාගෙන එය SI ලේඛනයේ පෙන්වා ඇති බෆරයක ගබඩා කරයි. අපගේ නඩුවේදී, බෆරය මෙහෙයුම් පද්ධතියේ කර්නල් කේතයේ අවසානයට ආසන්නව පහත පරිදි ප්‍රකාශ කරනු ලැබේ:

පරිශීලක_ආදාන වේලාවන් 256 db 0

මෙම ප්‍රකාශය ඔබට අක්ෂර 256 ක බෆරයක් නිර්මාණය කිරීමට ඉඩ සලසයි, බිංදු වලින් පුරවා ඇත - එහි දිග අප වැනි සරල මෙහෙයුම් පද්ධතියක් සඳහා විධාන ගබඩා කිරීමට ප්‍රමාණවත් විය යුතුය!

ඊළඟට අපි පරිශීලක ආදාන වලංගුකරණය සිදු කරන්නෙමු. user_input buffer හි පළමු බයිටය ශුන්‍ය නම්, පරිශීලකයා කිසිදු විධානයක් ඇතුළත් නොකර Enter යතුර ඔබා ඇත; සියලුම තන්තු අවසන් වන්නේ null අක්ෂර වලින් බව අමතක කරන්න එපා. ඉතින් මේකෙදි අපි යන්තම් ලූපයේ මුලට ගිහින් ආයෙත් ආචාරය මුද්‍රණය කරන්න ඕනේ. කෙසේ වෙතත්, පරිශීලකයා කිසියම් විධානයක් ඇතුළත් කළහොත්, ඔහු ls විධානය ඇතුළු කළේ දැයි බැලීමට අපට පළමුව පරීක්ෂා කිරීමට සිදුවේ. මේ වන තුරු, ඔබට අපගේ එකලස් කිරීමේ භාෂා වැඩසටහන් වල තනි බයිට් සංසන්දනය කිරීම පමණක් නිරීක්ෂණය කළ හැකි නමුත් ද්විත්ව බයිට් අගයන් හෝ යන්ත්‍ර වචන සංසන්දනය කිරීමට ද හැකි බව අමතක නොකරන්න. මෙම කේතයේදී, අපි user_input බෆරයෙන් ලැබෙන පළමු යන්ත්‍ර වචනය ls රේඛාවට අනුරූප වන යන්ත්‍ර වචනය සමඟ සංසන්දනය කරන අතර, ඒවා සමාන නම්, පහත කේත කොටස වෙත යන්න. මෙම කේත කොටස තුළ, අපි lib.asm වෙතින් තවත් දිනචරියාවක් භාවිතා කර තැටියේ කොමාවෙන් වෙන් කළ ගොනු ලැයිස්තුවක් ලබා ගනිමු (ඒවා file_list බෆරයේ ගබඩා කළ යුතුය), එම ලැයිස්තුව තිරයට මුද්‍රණය කර නැවත ලූපයට ගෙන යන්න පරිශීලක ආදානය සැකසීම.

තෙවන පාර්ශවීය වැඩසටහන් ක්රියාත්මක කිරීම

පරිශීලකයා ls විධානය ඇතුළත් නොකරන්නේ නම්, ඔවුන් තැටියෙන් වැඩසටහනේ නම ඇතුළත් කර ඇතැයි අපි උපකල්පනය කරමු, එබැවින් එය පූරණය කිරීමට උත්සාහ කිරීම අර්ථවත් කරයි. අපගේ lib.asm පුස්තකාලයේ FAT12 තැටි වගු විග්‍රහ කරන ප්‍රයෝජනවත් lib_load_file දින චර්යාව ක්‍රියාත්මක කිරීමක් අඩංගු වේ: එය AX ලේඛනය හරහා ගොනු නාමයක් සහිත පේළියක ආරම්භයට දර්ශකයක් මෙන්ම ද්විමය කේතය පූරණය කිරීම සඳහා ඕෆ්සෙට් අගයක් ගනී. CX ලේඛනය හරහා වැඩසටහන් ගොනුවක්. පරිශීලක ආදානය අඩංගු තන්තුවට දර්ශකයක් ගබඩා කිරීමට අපි දැනටමත් SI ලේඛනය භාවිතා කරමු, එබැවින් අපි මෙම දර්ශකය AX ලේඛනයට පිටපත් කර, පසුව වැඩසටහන් ගොනුවෙන් ද්විමය කේතය පූරණය කිරීමට ඕෆ්සෙට් ලෙස භාවිතා කරන 32768 අගය තබමු. CX ලේඛනයට.

නමුත් අපි මෙම විශේෂිත අගය ක්‍රමලේඛ ගොනුවකින් ද්විමය කේතය පැටවීමට ඕෆ්සෙට් ලෙස භාවිතා කරන්නේ ඇයි? හොඳයි, මෙය අපගේ මෙහෙයුම් පද්ධතිය සඳහා මතක සිතියම් විකල්පයන්ගෙන් එකක් පමණි. අපි තනි 64 KB කොටසක වැඩ කරන නිසා සහ අපගේ කර්නල් ද්විමය ඕෆ්සෙට් 0 හි පටවා ඇති නිසා, අපට කර්නල් දත්ත සඳහා පළමු 32 KB මතකයත්, load වැඩසටහන් දත්ත සඳහා ඉතිරි 32 KB භාවිතා කිරීමට සිදු වේ. මේ අනුව, offset 32768 යනු අපගේ කොටසේ මැද වන අතර මෙහෙයුම් පද්ධති කර්නලය සහ පූරණය කරන ලද වැඩසටහන් දෙකටම ප්‍රමාණවත් RAM ලබා දීමට අපට ඉඩ සලසයි.

lib_load_file routine පසුව ඉතා වැදගත් මෙහෙයුමක් සිදු කරයි: එයට ලබා දී ඇති නම සහිත ගොනුවක් තැටියේ සොයාගත නොහැකි නම් හෝ කිසියම් හේතුවක් නිසා තැටියෙන් එය කියවිය නොහැකි නම්, එය නිකම්ම පිටවී විශේෂ රැගෙන යාමේ ධජයක් සකසයි. මෙය සමහර ගණිතමය මෙහෙයුම් ක්‍රියාත්මක කිරීමේදී සකසා ඇති CPU රාජ්‍ය ධජයක් වන අතර මේ මොහොතේ අප උනන්දු නොවිය යුතුය, නමුත් ඒ සමඟම අපට ඉක්මන් තීරණ ගැනීමට මෙම ධජය තිබේද යන්න තීරණය කළ හැකිය. lib_load_asm දිනචරියාව රැගෙන යාමේ ධජය සකසන්නේ නම්, දෝෂ පණිවිඩය මුද්‍රණය කර පරිශීලක ආදාන ලූපයේ ආරම්භයට නැවත පැමිණෙන කේත කොටසකට පැනීමට අපි jc (ගෙන යන්නේ නම් පනින්න) උපදෙස් භාවිතා කරමු.

එම අවස්ථාවේදීම, හුවමාරු ධජය සකසා නොමැති නම්, අපට නිගමනය කළ හැක්කේ lib_load_asm subroutine මඟින් 32768 ලිපිනයෙහි ඇති වැඩසටහන් ගොනුවේ සිට RAM වෙත ද්විමය කේතය සාර්ථකව පූරණය කර ඇති බවයි. මෙම අවස්ථාවේදී අපට අවශ්‍ය වන්නේ ද්විමය ක්‍රියාත්මක කිරීම ආරම්භ කිරීමයි. මෙම ලිපිනයෙහි කේතය පටවා ඇත, එනම්, පරිශීලක-නිශ්චිත වැඩසටහන ක්රියාත්මක කිරීම ආරම්භ කරන්න! මෙම වැඩසටහනේ ret උපදෙස් භාවිතා කිරීමෙන් පසුව (ඇමතුම් කේතය වෙත ආපසු යාමට), පරිශීලක ආදානය සැකසීම සඳහා අපට ලූප් වෙත ආපසු යාමට අවශ්‍ය වනු ඇත. මේ අනුව අපි මෙහෙයුම් පද්ධතියක් නිර්මාණය කළෙමු: එය lib.asm පුස්තකාලයේ චර්යාවන්ගෙන් බොහෝ උපකාර ඇතිව වුවද, එකලස් කිරීමේ කේතයේ පේළි 40කින් පමණ ක්‍රියාත්මක කර ඇති සරලම විධාන විග්‍රහ කිරීමේ සහ වැඩසටහන් පැටවීමේ යාන්ත්‍රණයන්ගෙන් සමන්විත වේ.

මෙහෙයුම් පද්ධතියේ කර්නල් කේතය එකලස් කිරීම සඳහා, පහත විධානය භාවිතා කරන්න:

Nasm -f bin -o mykernel.bin mykernel.asm

මේකෙන් පස්සේ අපිට කොහොම හරි mykernel.bin file එක floppy disk image file එකට add කරන්න වෙනවා. ලූප්බැක් උපාංග භාවිතයෙන් තැටි රූප සවිකිරීමේ උපක්‍රමය ඔබ හුරුපුරුදු නම්, ඔබට floppy.img භාවිතයෙන් තැටි රූපයේ අන්තර්ගතයට ප්‍රවේශ විය හැක, නමුත් GNU Mtools (www.gnu.org/software /mtools) භාවිතයෙන් පහසු ක්‍රමයක් තිබේ. මෙය පැකේජ ගබඩාවලින් ලබාගත හැකි MS-DOS/FAT12 ගොනු පද්ධති භාවිතා කරන නම්ය තැටි සමඟ වැඩ කිරීම සඳහා වූ වැඩසටහන් සමූහයකි. මෘදුකාංගසියලු ජනප්රිය ලිනක්ස් බෙදාහැරීම්, එබැවින් ඔබ කළ යුත්තේ apt-get, yum, pacman හෝ ඔබේ බෙදාහැරීමේ මෘදුකාංග පැකේජ ස්ථාපනය කිරීමට ඔබ භාවිතා කරන ඕනෑම උපයෝගිතා භාවිතා කිරීමයි.

සුදුසු මෘදුකාංග පැකේජය ස්ථාපනය කිරීමෙන් පසු, mykernel.bin ගොනුව floppy.img තැටි රූප ගොනුව වෙත එක් කිරීමට ඔබට පහත විධානය ක්‍රියාත්මක කිරීමට සිදුවේ.

Mcopy -i floppy.img mykernel.bin::/

විධානය අවසානයේ ඇති විහිළු සංකේත සටහන් කරන්න: colon, colon, සහ slash. දැන් අපි අපේ මෙහෙයුම් පද්ධතිය දියත් කිරීමට බොහෝ දුරට සූදානම්, නමුත් ඒ සඳහා යෙදුම් නොමැති නම් ඇති ප්‍රයෝජනය කුමක්ද? අතිශය සරල යෙදුමක් සංවර්ධනය කිරීමෙන් මෙම වරදවා වටහාගැනීම නිවැරදි කරමු. ඔව්, දැන් ඔබ ඔබේම මෙහෙයුම් පද්ධතිය සඳහා යෙදුමක් සංවර්ධනය කරනු ඇත - ගීක්වරුන් අතර ඔබේ අධිකාරිය කෙතරම් ඉහළ යනු ඇත්දැයි සිතා බලන්න. test.asm නම් ගොනුවක පහත කේතය සුරකින්න:

Org 32768 mov ah, 0Eh mov al, "X" int 10h ret

මෙම කේතය තිරය මත "X" මුද්‍රණය කිරීමට BIOS ශ්‍රිතය භාවිතා කරයි, පසුව එය හැඳින්වූ කේතය වෙත පාලනය නැවත ලබා දෙයි - අපගේ නඩුවේදී, එම කේතය මෙහෙයුම් පද්ධති කේතය වේ. යෙදුමේ ප්‍රභව කේතය ආරම්භ කරන org රේඛාව CPU උපදෙස් නොවේ, නමුත් NASM එකලස් කිරීමේ නියෝගයක් මඟින් ද්විමය කේතය ඕෆ්සෙට් 32768 හි RAM වෙත පටවනු ලැබේ, එබැවින් මේ සඳහා සියලු ඕෆ්සෙට් නැවත ගණනය කළ යුතුය.

මෙම කේතය ද එකලස් කළ යුතු අතර, ප්‍රතිඵලයක් ලෙස ලැබෙන ද්විමය ගොනුව නම්‍ය තැටි රූප ගොනුවට එක් කළ යුතුය:

Nasm -f bin -o test.bin test.asm mcopy -i floppy.img test.bin::/

දැන් ගැඹුරු හුස්මක් ගන්න, ඔබේම කාර්යයේ අසමසම ප්රතිඵල ගැන මෙනෙහි කිරීමට සූදානම් වන්න, සහ Qemu හෝ VirtualBox වැනි PC emulator එකක් භාවිතයෙන් floppy disk රූපය ආරම්භ කරන්න. උදාහරණයක් ලෙස, මෙම කාර්යය සඳහා පහත විධානය භාවිතා කළ හැකිය:

Qemu-system-i386 -fda floppy.img

Voila: අපි තැටි රූපයේ පළමු අංශයට අනුකලනය කළ පද්ධති bootloader boot.img, පිළිගැනීමේ පණිවිඩයක් පෙන්වන මෙහෙයුම් පද්ධතියේ කර්නලය mykernel.bin පූරණය කරයි. තැටියේ ඇති ගොනු දෙකක නම් (mykernel.bin සහ test.bin) ලබා ගැනීමට ls විධානය ඇතුළත් කරන්න, ඉන්පසු එය ක්‍රියාත්මක කිරීමට අවසාන ගොනුවේ නම ඇතුළත් කර තිරය මත X එකක් පෙන්වයි.

නියමයි නේද? දැන් ඔබට අවසන් කිරීම ආරම්භ කළ හැකිය විධාන කවචයඔබගේ මෙහෙයුම් පද්ධතිය, නව විධාන ක්‍රියාත්මක කිරීම් එක් කරන්න, සහ අමතර වැඩසටහන් ගොනු තැටියට එක් කරන්න. ඔබට මෙම මෙහෙයුම් පද්ධතිය සැබෑ පරිගණකයක ධාවනය කිරීමට අවශ්‍ය නම්, ඔබ මාලාවේ පෙර ලිපියෙන් “සැබෑ දෘඩාංග වේදිකාවක ඇරඹුම් කාරකය ධාවනය කිරීම” යන කොටස වෙත යොමු විය යුතුය - ඔබට හරියටම එකම විධාන අවශ්‍ය වනු ඇත. ලබන මාසයේදී, බාගත කළ හැකි වැඩසටහන් පද්ධති ක්‍රියාකාරකම් භාවිතා කිරීමට ඉඩ දීමෙන්, කේත අනුපිටපත් අඩු කිරීම සඳහා කේත බෙදාගැනීමේ සංකල්පයක් හඳුන්වා දීමෙන් අපි අපගේ මෙහෙයුම් පද්ධතිය වඩාත් බලවත් කරන්නෙමු. බොහෝ වැඩ තවමත් ඉදිරියෙන් ඇත.

lib.asm පුස්තකාල චර්යාවන්

කලින් සඳහන් කළ පරිදි, lib.asm පුස්තකාලය ඔබේ කර්නල් තුළ භාවිතා කිරීම සඳහා විශාල ප්‍රයෝජනවත් ක්‍රියා පටිපාටි මාලාවක් සපයයි. මෙහෙයුම් පද්ධතිසහ තනි වැඩසටහන්. ඔවුන්ගෙන් සමහරක් මෙම ලිපි මාලාවේ ලිපිවල තවමත් ස්පර්ශ කර නොමැති උපදෙස් සහ සංකල්ප භාවිතා කරයි, අනෙක් ඒවා (තැටි චර්යාවන් වැනි) ගොනු පද්ධති නිර්මාණයට සමීපව සම්බන්ධ වේ, නමුත් ඔබ මෙම කරුණු සම්බන්ධයෙන් ඔබ දක්ෂ යැයි සලකන්නේ නම්, ඔබට කියවිය හැකිය ඔවුන්ගේ ක්‍රියාත්මක කිරීම් සමඟ ඔබම සහ ක්‍රියාකාරීත්වයේ මූලධර්මය තේරුම් ගන්න. කෙසේ වෙතත්, ඔබේම කේතයෙන් ඔවුන් අමතන්නේ කෙසේදැයි සොයා බැලීම වඩාත් වැදගත් වේ:

  • lib_print_string - SI ලේඛනය හරහා null-terminated string වෙත දර්ශකයක් පිළිගෙන එම තන්තුව තිරයට මුද්‍රණය කරයි.
  • lib_input_string - SI ලේඛනය හරහා බෆරයකට පොයින්ටරයක් ​​පිළිගන්නා අතර යතුරුපුවරුව භාවිතයෙන් පරිශීලකයා විසින් ඇතුළත් කරන ලද අක්ෂරවලින් මෙම බෆරය පුරවයි. පරිශීලකයා Enter යතුර එබීමෙන් පසු, බෆරයේ ඇති රේඛාව ශුන්‍ය-අවසන් වන අතර පාලනය ඇමතුම් වැඩසටහන් කේතය වෙත නැවත පැමිණේ.
  • lib_move_cursor - DH (පේළි අංකය) සහ DL (තීරු අංකය) රෙජිස්ටර් හරහා සම්ප්‍රේෂණය වන ඛණ්ඩාංක සහිත ස්ථානයකට තිරය මත කර්සරය ගෙන යයි.
  • lib_get_cursor_pos - පිළිවෙළින් DH සහ DL රෙජිස්ටර් භාවිතයෙන් වත්මන් පේළි සහ තීරු අංක ලබා ගැනීමට මෙම උපසිරැසි කැඳවිය යුතුය.
  • lib_string_uppercase - AX රෙජිස්ටර් භාවිතයෙන් ශුන්‍ය-අවසන් කළ තන්තුවක ආරම්භයට පොයින්ටරයක් ​​ගෙන තන්තුවේ අක්ෂර විශාල අකුරු බවට පරිවර්තනය කරයි.
  • lib_string_length - AX ලේඛනය හරහා null-terminated string එකක ආරම්භයට දර්ශකයක් ගෙන ගොස් AX ලේඛනය හරහා එහි දිග ලබා දෙයි.
  • lib_string_compare - SI සහ DI රෙජිස්ටර් භාවිතයෙන් null-terminated strings දෙකක ආරම්භයට පොයින්ටර් පිළිගෙන මෙම තන්තු සංසන්දනය කරයි. රේඛා සමාන නම් රැගෙන යාමේ ධජය සකසයි (jc රැගෙන යාමේ ධජය මත පදනම්ව පැනීමේ උපදෙස් භාවිතා කිරීමට) හෝ රේඛා වෙනස් නම් මෙම ධජය ඉවත් කරයි (jnc උපදෙස් භාවිතා කිරීමට).
  • lib_get_file_list - SI ලේඛනය හරහා බෆරයක ආරම්භයට පොයින්ටරයක් ​​ගෙන එම බෆරය තුළට තැටියෙන් කොමාවෙන් වෙන් කරන ලද ගොනු නාම ලැයිස්තුවක් අඩංගු වේ.
  • lib_load_file - AX ලේඛනය භාවිතයෙන් ගොනු නාමය අඩංගු පේළියක ආරම්භයට පොයින්ටරයක් ​​ගෙන CX ලේඛනය හරහා යවන ලද ඕෆ්සෙට් එකේදී ගොනුවේ අන්තර්ගතය පූරණය කරයි. BX ලේඛනය භාවිතයෙන් මතකයට පිටපත් කරන ලද බයිට් ගණන (එනම්, ගොනු ප්‍රමාණය) ආපසු ලබා දෙයි, නැතහොත් දී ඇති නම සහිත ගොනුවක් සොයාගත නොහැකි නම් රැගෙන යාමේ ධජය සකසයි.

මම වහාම කියමි, "අපොයි, තවත් පොපොව්" යන සිතුවිලි සමඟ ලිපිය වසා දමන්න එපා. ඔහු සතුව ඇත්තේ ඔප දැමූ උබුන්ටු ය, මා සතුව මුල සිට කර්නලය සහ යෙදුම් ඇතුළු සියල්ල තිබේ. ඉතින්, කප්පාදුව යටතේ දිගටම.

OS සමූහය: මෙතන.
මුලින්ම මම ඔයාලට Screenshot එකක් දෙන්නම්.

ඒවායින් තවත් නැත, දැන් මම එය ලියන්නේ මන්දැයි වඩාත් විස්තරාත්මකව කතා කරමු.

එය උණුසුම් අප්රේල් සවස, බ්රහස්පතින්දා විය. කුඩා කල සිටම, මම OS එකක් ලිවීමට සිහින මැව්වෙමි, මම හදිසියේම සිතූ විට: "දැන් මම වාසි සහ asm දන්නවා, මගේ සිහිනය සැබෑ කර නොගන්නේ මන්ද?" මම මෙම මාතෘකාව පිළිබඳ වෙබ් අඩවි ගූගල් කර Habr වෙතින් ලිපියක් සොයා ගතිමි: "OS එකක් ලිවීම ආරම්භ කරන්නේ කෙසේද සහ ඉවත් නොවන්නේ කෙසේද." පහත OSDev Wiki වෙත සබැඳිය සඳහා එහි කර්තෘට ස්තූතියි. මම එතනට ගිහින් වැඩ පටන් ගත්තා. එක ලිපියක අවම OS එක ගැන සියලුම දත්ත තිබුනා. මම හරස්-ජීසීසී සහ බිනුටිල් තැනීමට පටන් ගත් අතර, එතැන් සිට සියල්ල නැවත ලිව්වෙමි. “හෙලෝ, කර්නල් වර්ල්ඩ්!” යන සෙල්ලිපිය දුටු විට ඔබ මගේ සතුට දැක ගත යුතුව තිබුණි. මම පුටුවෙන් බිමට පැන්නා, මම අත් නොහරින බව මට වැටහුණා. මම "කොන්සෝලය" ලිව්වා (උපුටා දැක්වීම් වලින්; මට යතුරුපුවරුවකට ප්‍රවේශය නොතිබුණි), නමුත් පසුව කවුළු පද්ධතියක් ලිවීමට තීරණය කළෙමි. අවසානයේ එය ක්‍රියාත්මක විය, නමුත් මට යතුරුපුවරුවට ප්‍රවේශය නොතිබුණි. ඊට පස්සේ මම X Window System මත පදනම්ව නමක් ඉදිරිපත් කිරීමට තීරණය කළා. මම Y Window System ගූගල් කළෙමි - එය පවතී. එහි ප්‍රතිඵලයක් වශයෙන්, මම OS365 pre-alpha 0.1 හි ඇතුළත් Z Window System 0.1 ලෙස නම් කළෙමි. ඔව්, මා හැර වෙන කිසිවෙකු ඇයව දුටුවේ නැත. පසුව මම යතුරුපුවරු සහාය ක්රියාත්මක කරන්නේ කෙසේදැයි සොයා බැලුවෙමි. පළමු අනුවාදයේ තිර රුව, තවමත් කිසිවක් නොමැති විට, කවුළු පද්ධතියක් පවා නැත:

ඔබට පෙනෙන පරිදි පෙළ කර්සරය චලනය නොවීය. ඊට පස්සේ මම ජෝඩුවක් ලිව්වා සරල යෙදුම් Z මත පදනම් වේ. මෙන්න 1.0.0 alpha නිකුත් කිරීම. එහි පද්ධති මෙනු පවා බොහෝ දේ තිබුණි. ඒ ගොනු කළමනාකරුසහ කැල්කියුලේටරය වැඩ කළේ නැත.

අලංකාරය ගැන පමණක් සැලකිලිමත් වන මිතුරෙකු විසින් මා සෘජුවම භීතියට පත් විය (Mitrofan, සමාවන්න). ඔහු මෙසේ පැවසීය: “VBE මාදිලිය 1024*768*32 සෝදන්න, එය සෝදන්න, සෝදන්න! හොඳයි, අපි එය පානය කරමු! ” හොඳයි, මම දැනටමත් ඔහුට සවන් දීමෙන් වෙහෙසට පත්ව සිටි අතර තවමත් ඔහුව කපා දැමුවෙමි. ක්‍රියාත්මක කිරීම ගැන පහතින්.

මම මගේ bootloader එකෙන් තමයි ඔක්කොම හැදුවේ GRUB ඒකේ උදව්වෙන් Multiboot header එකට Magic lines ටිකක් එකතු කරලා graphical mode එක සංකූලතාවයකින් තොරව සකසා ගන්න.

ALIGN සකසන්න, 1<<0 .set MEMINFO, 1<<1 .set GRAPH, 1<<2 .set FLAGS, ALIGN | MEMINFO | GRAPH .set MAGIC, 0x1BADB002 .set CHECKSUM, -(MAGIC + FLAGS) .align 4 .long MAGIC .long FLAGS .long CHECKSUM .long 0, 0, 0, 0, 0 .long 0 # 0 = set graphics mode .long 1024, 768, 32 # Width, height, depth
ඉන්පසු Multiboot තොරතුරු ව්‍යුහයෙන් මම රාමුබෆර් ලිපිනය සහ තිර විභේදනය ගෙන එහි පික්සෙල් ලියන්නෙමි. VESA සෑම දෙයක්ම ඉතා ව්‍යාකූල ලෙස කළේය - RGB වර්ණ ප්‍රතිලෝම අනුපිළිවෙලට ඇතුළත් කළ යුතුය (R G B නොව B G R). පික්සෙල් නොපෙන්වන්නේ මන්දැයි දින කිහිපයක් මට තේරුණේ නැත!? අවසානයේදී, වර්ණ නියතයන් 16 ක අගයන් 0 ... 15 සිට ඒවායේ RGB සමානකම් දක්වා වෙනස් කිරීමට මට අමතක වූ බව මට වැටහුණි. එහි ප්රතිඵලයක් වශයෙන්, මම එය නිකුත් කළ අතර ඒ සමඟම gradient පසුබිම කපා. ඊට පස්සේ මම console එකක් හදල Application 2ක් හදල 1.2 නිකුත් කලා. ඔව්, මට බොහෝ දුරට අමතක විය - ඔබට මෙහෙයුම් පද්ධතිය බාගත කළ හැකිය

එකලස් කරන්නා

එකලස් කරන්නා(ඉංග්‍රීසි එකලස් කිරීම - එකලස් කිරීම) - එකලස් කිරීමේ භාෂාවේ සිට යන්ත්‍ර භාෂා විධානයන් වෙත සම්පාදකයකි.
එක් එක් ප්‍රොසෙසර ගෘහ නිර්මාණ ශිල්පය සඳහා සහ එක් එක් OS හෝ OS පවුල සඳහා එකලස් කරන්නෙකු ඇත. එක් ගෘහ නිර්මාණ ශිල්පයක් සහිත යන්ත්‍රවල (හෝ එක් මෙහෙයුම් පද්ධතියක පරිසරයක) වෙනත් ඉලක්ක ගෘහ නිර්මාණ ශිල්පයක් හෝ වෙනත් මෙහෙයුම් පද්ධතියක් සඳහා වැඩසටහන් එකලස් කිරීමට සහ ක්‍රියාත්මක කිරීමට සුදුසු ආකෘතියකින් ක්‍රියාත්මක කළ හැකි කේතය ලබා ගැනීමට ඔබට ඉඩ සලසන ඊනියා “හරස් එකලස් කරන්නන්” ද ඇත. ඉලක්ක ගෘහ නිර්මාණ ශිල්පය හෝ ඉලක්ක පරිසරය තුළ OS.

x86 ගෘහ නිර්මාණ ශිල්පය

DOS සඳහා එකලස් කරන්නන්

DOS මෙහෙයුම් පද්ධතිය සඳහා වඩාත් ප්‍රසිද්ධ එකලස් කරන්නන් වූයේ Borland Turbo Assembler (TASM) සහ Microsoft Macro Assembler (MASM) ය. සරල එකලස් කිරීමේ A86 ද එක් කාලයක ජනප්රිය විය.
මුලදී, ඔවුන් සහාය දුන්නේ 16-bit උපදෙස් පමණි (Intel 80386 ප්‍රොසෙසරය පැමිණෙන තෙක්). TASM සහ MASM හි පසු සංස්කරණ 32-bit උපදෙස් මෙන්ම වඩාත් නවීන ප්‍රොසෙසරවල හඳුන්වා දුන් සියලුම උපදෙස් සහ ගෘහ නිර්මාණ ශිල්පයට විශේෂිත උපදෙස් පද්ධති (උදාහරණයක් ලෙස, MMX, SSE, 3DNow!, ආදිය) යන දෙකටම සහය දක්වයි.

Microsoft Windows

මයික්‍රොසොෆ්ට් වින්ඩෝස් මෙහෙයුම් පද්ධතියේ පැමිණීමත් සමඟ TASM32 නමින් TASM දිගුවක් දර්ශනය වූ අතර එමඟින් වින්ඩෝස් පරිසරය තුළ ක්‍රියාත්මක වීමට වැඩසටහන් නිර්මාණය කිරීමට හැකි විය. Tasm හි නවතම දන්නා අනුවාදය 5.3 වන අතර එය MMX උපදෙස් සඳහා සහය වන අතර දැනට Turbo C++ Explorer හි ඇතුළත් කර ඇත. නමුත් නිල වශයෙන් වැඩසටහනේ සංවර්ධනය සම්පූර්ණයෙන්ම නතර වී ඇත.
Microsoft සමාගම Microsoft Macro Assembler නමින් නිෂ්පාදනයක් පවත්වාගෙන යයි. DDKs හි නවතම අනුවාද සමඟින් එය අද දක්වාම සංවර්ධනය වෙමින් පවතී. නමුත් DOS සඳහා වැඩසටහන් නිර්මාණය කිරීම අරමුණු කරගත් වැඩසටහනේ අනුවාදය සංවර්ධනය නොවේ. මීට අමතරව, ස්ටීවන් හචෙසන් "MASM32" නමින් MASM වැඩසටහන් පැකේජයක් නිර්මාණය කළේය.

GNU සහ GNU/Linux

GNU මෙහෙයුම් පද්ධතියට ඉන්ටෙල් සින්ටැක්ස් භාවිතා කරන අනෙකුත් බොහෝ ජනප්‍රිය එකලස් කිරීම් මෙන් නොව AT&T වාක්‍ය ඛණ්ඩ භාවිතා කරන ගෑස් එකලස් කරන්නා (GNU Assembler) ඇතුළත් gcc සම්පාදකය ඇතුළත් වේ.

අතේ ගෙන යා හැකි එකලස් කරන්නන්

විවෘත මූලාශ්‍ර එකලස් කිරීමේ ව්‍යාපෘතියක් ද ඇත, ඒවායේ අනුවාදයන් විවිධ මෙහෙයුම් පද්ධති සඳහා ලබා ගත හැකි අතර, මෙම පද්ධති සඳහා වස්තු ගොනු ලබා ගැනීමට ඔබට ඉඩ සලසයි. මෙම එකලස් කිරීම NASM (Netwide Assembler) ලෙස හැඳින්වේ.
YASM යනු BSD බලපත්‍රය යටතේ NASM හි නැවත ලියන ලද අනුවාදයකි (සමහර ව්‍යතිරේක සහිතව).
FASM (Flat Assembler) යනු නැවත බලපත්‍ර ලබා දීම තහනම් කිරීමට (GNU GPL යටතේ ඇතුළුව) වෙනස් කරන ලද BSD බලපත්‍රයක් යටතේ තරුණ එකලස් කරන්නෙකු වේ. KolibriOS, GNU/Linux, MS-DOS සහ Microsoft Windows සඳහා අනුවාද ඇත, Intel syntax භාවිතා කරන අතර AMD64 උපදෙස් සඳහා සහය දක්වයි.

RISC ගෘහ නිර්මාණ ශිල්පය


MCS-51
AVR
දැනට Atmel (AVRStudio 3 සහ AVRStudio4) විසින් නිෂ්පාදනය කරන ලද සම්පාදක 2 ක් ඇත. දෙවන අනුවාදය ඉතා සාර්ථක නොවන පළමු එක නිවැරදි කිරීමට උත්සාහ කිරීමකි. WinAVR හි එකලස් කරන්නා ද ඇතුළත් වේ.
ARM
AVR32
MSP430
PowerPC

එකලස් කිරීම සහ සම්පාදනය කිරීම

එකලස් කිරීමේ භාෂාවෙන් වැඩසටහනක් වස්තු කේතයට පරිවර්තනය කිරීමේ ක්‍රියාවලිය සාමාන්‍යයෙන් එකලස් කිරීම ලෙස හැඳින්වේ. සම්පාදනය කිරීම මෙන් නොව, එකලස් කිරීම අඩු හෝ වැඩි වශයෙන් නොපැහැදිලි සහ ආපසු හැරවිය හැකි ක්රියාවලියකි. එකලස් කිරීමේ භාෂාවේදී, සෑම සිහිවටනයක්ම එක් යන්ත්‍ර උපදෙස් වලට අනුරූප වන අතර, ඉහළ මට්ටමේ ක්‍රමලේඛන භාෂාවල, එක් එක් ප්‍රකාශනයට විවිධ උපදෙස් විශාල සංඛ්‍යාවක් සැඟවිය හැක. ප්‍රතිපත්තිමය වශයෙන්, මෙම බෙදීම තරමක් අත්තනෝමතික ය, එබැවින් සමහර විට එකලස් කිරීමේ වැඩසටහන් පරිවර්තනය සම්පාදනය ලෙසද හැඳින්වේ.

එකලස් කිරීමේ භාෂාව

එකලස් කිරීමේ භාෂාව- මිනිස් සංජානනය සඳහා පහසු වන යන්ත්‍ර විධාන පටිගත කිරීමේ ආකෘතියක් වන පහත් මට්ටමේ ක්‍රමලේඛන භාෂාවකි. බොහෝ විට, සංක්ෂිප්තභාවය සඳහා, එය සරලව එකලස් කරන්නා ලෙස හැඳින්වේ, එය සත්ය නොවේ.

එකලස් කිරීමේ භාෂා විධාන ප්‍රොසෙසර විධානවලට එකකට එකකට අනුරූප වන අතර, ඇත්ත වශයෙන්ම, විධාන සහ ඒවායේ තර්ක පටිගත කිරීමේ පහසු සංකේතාත්මක ආකෘතියක් (මතක කේතය) නියෝජනය කරයි. එකලස් කිරීමේ භාෂාව මූලික මෘදුකාංග වියුක්ත කිරීම් ද සපයයි: වැඩසටහන් කොටස් සහ දත්ත සංකේතාත්මක නම් සමඟ ලේබල් හරහා සම්බන්ධ කිරීම (එකලස් කිරීමේදී, එක් එක් ලේබලය සඳහා ලිපිනයක් ගණනය කරනු ලැබේ, ඉන්පසු ලේබලයේ සෑම සිදුවීමක්ම මෙම ලිපිනයෙන් ප්‍රතිස්ථාපනය වේ) සහ නියෝග.
එකලස් කිරීමේ විධාන මඟින් ඔබට දත්ත කොටස් (පැහැදිලිව විස්තර කර ඇති හෝ ගොනුවකින් කියවන) වැඩසටහනකට ඇතුළත් කිරීමට ඉඩ සලසයි; නිශ්චිත ඛණ්ඩයක් නිශ්චිත වාර ගණනක් නැවත කරන්න; කොන්දේසිය අනුව කොටස සම්පාදනය කරන්න; මතක ස්ථාන ලිපිනයට වඩා වෙනස් ඛණ්ඩ ක්‍රියාත්මක කිරීමේ ලිපිනය සකසන්න[නිශ්චිත කරන්න!]; සම්පාදනය කිරීමේදී ලේබල් අගයන් වෙනස් කරන්න; පරාමිති ආදිය සමඟ සාර්ව අර්ථ දැක්වීම් භාවිතා කරන්න.
සෑම ප්‍රොසෙසර ආකෘතියක්ම, ප්‍රතිපත්තිමය වශයෙන්, තමන්ගේම උපදෙස් මාලාවක් සහ අනුරූප එකලස් කිරීමේ භාෂාවක් (හෝ උපභාෂාවක්) ඇත.

වාසි සහ අවාසි

එකලස් කිරීමේ භාෂාවේ වාසි

අවම අතිරික්ත කේතය, එනම්, අඩු උපදෙස් සහ මතක ප්රවේශයන් භාවිතා කිරීම, වේගය වැඩි කිරීමට සහ වැඩසටහන් ප්රමාණය අඩු කිරීමට ඉඩ සලසයි.
සම්පූර්ණ අනුකූලතාව සහ අපේක්ෂිත වේදිකාවේ හැකියාවන් උපරිම ලෙස භාවිතා කිරීම සහතික කිරීම: මෙම වේදිකාවේ විශේෂ උපදෙස් සහ තාක්ෂණික ලක්ෂණ භාවිතා කිරීම.
එකලස් කිරීමේ භාෂාවෙන් ක්‍රමලේඛනය කිරීමේදී, විශේෂ හැකියාවන් ලබා ගත හැකිය: දෘඪාංග, ආදාන/ප්‍රතිදාන වරායන් සහ විශේෂ ප්‍රොසෙසර් රෙජිස්ටර් වෙත සෘජු ප්‍රවේශය, මෙන්ම ස්වයං-විශෝධන කේතය ලිවීමේ හැකියාව (එනම්, මෙටා ක්‍රමලේඛනය, මෘදුකාංග පරිවර්තකයෙකුගේ අවශ්‍යතාවයකින් තොරව) .
මෙහෙයුම් පද්ධති තුළට හඳුන්වා දී ඇති නවතම ආරක්ෂක තාක්ෂණයන් ස්වයං-වෙනස් කිරීමේ කේතයක් නිර්මාණය කිරීමට ඉඩ නොදේ, මන්ද ඒවා එකම මතක ප්‍රදේශයක උපදෙස් ක්‍රියාත්මක කිරීමේ සහ ලිවීමේ සමගාමී හැකියාව බැහැර කරයි (BSD පද්ධතිවල W^X තාක්ෂණය, වින්ඩෝස් හි DEP).

එකලස් කිරීමේ භාෂාවේ අවාසි

කේත විශාල ප්‍රමාණයක් සහ අමතර කුඩා කාර්යයන් විශාල සංඛ්‍යාවක්, කේතය කියවීමට සහ තේරුම් ගැනීමට ඉතා අපහසු වන අතර එම නිසා වැඩසටහනේ දෝෂහරණය කිරීම සහ වෙනස් කිරීම වඩාත් අපහසු වන අතර ක්‍රමලේඛන ආදර්ශ ක්‍රියාත්මක කිරීමේ දුෂ්කරතාවයට හේතු වේ. සහ වෙනත් ඕනෑම සම්මුතීන්. ඒකාබද්ධ සංවර්ධනයේ සංකීර්ණත්වයට මග පාදයි.
පවතින පුස්තකාල සංඛ්‍යාව අඩුය, ඒවා එකිනෙකට අඩු ගැළපීම.
වෙනත් වේදිකා වෙත ගෙන යා නොහැක (ද්විමය අනුකූල ඒවා හැර).

අයදුම්පත

වාසි සහ අවාසි වලින් සෘජුවම පහත දැක්වේ.
එකලස් කිරීමේ භාෂාවේ විශාල වැඩසටහන් ලිවීමට අතිශයින් අපහසු බැවින්, ඒවා ඉහළ මට්ටමේ භාෂාවලින් ලියා ඇත. එකලස් කිරීමේදී, කුඩා කොටස් හෝ මොඩියුල ලියා ඇති අතර, ඒ සඳහා පහත සඳහන් දෑ ඉතා වැදගත් වේ:
කාර්ය සාධනය (රියදුරන්);
කේත ප්රමාණය (ඇරඹුම් අංශ, ක්ෂුද්ර පාලක සඳහා මෘදුකාංග සහ සීමිත සම්පත් සහිත ප්රොසෙසර, වෛරස්, මෘදුකාංග ආරක්ෂණ);
විශේෂ හැකියාවන්: දෘඩාංග හෝ යන්ත්‍ර කේතය සමඟ කෙලින්ම වැඩ කිරීම, එනම් මෙහෙයුම් පද්ධති පූරණය කරන්නන්, ධාවක, වෛරස්, ආරක්ෂක පද්ධති.

එකලස් කිරීමේ කේතය වෙනත් භාෂාවලට සම්බන්ධ කිරීම

වැඩසටහනක කොටස් පමණක් බොහෝ විට එකලස් කිරීමේ භාෂාවෙන් ලියා ඇති බැවින්, ඒවා වෙනත් භාෂාවලින් වෙනත් කොටස් සමඟ සම්බන්ධ කළ යුතුය. මෙය ප්රධාන ක්රම 2 කින් සාක්ෂාත් කරගනු ලැබේ:
සම්පාදන අදියරේදී- එකලස් කිරීමේ භාෂාවෙන් ලිවීමේ ක්‍රියා පටිපාටි ඇතුළුව විශේෂ භාෂා විධාන භාවිතා කරමින් වැඩසටහනකට එකලස් කිරීමේ කොටස් (ඉන්ලයින් එකලස් කරන්නා) ඇතුළත් කිරීම. සරල දත්ත පරිවර්තනයන් සඳහා ක්‍රමය පහසු වේ, නමුත් ඉහළ මට්ටමේ භාෂාවලින් සහය නොදක්වන බොහෝ යෙදවුම් සහ ප්‍රතිදානයන් සහිත උපසිරසි ඇතුළු දත්ත සහ උපසිරැසි සහිත සම්පූර්ණ එකලස් කිරීමේ කේතය එය භාවිතයෙන් නිර්මාණය කළ නොහැක.
පිරිසැලසුම් අදියරේදී, හෝ වෙනම සම්පාදනය. එකලස් කරන ලද මොඩියුල අන්තර්ක්‍රියා කිරීමට, සම්බන්ධක ශ්‍රිත අවශ්‍ය ඇමතුම් සම්මුතීන් සහ දත්ත වර්ග සඳහා සහය වීම ප්‍රමාණවත් වේ. තනි තනි මොඩියුල එකලස් කිරීමේ භාෂාව ඇතුළුව ඕනෑම භාෂාවකින් ලිවිය හැක.

වාක්‍ය ඛණ්ඩය

එකලස් කිරීමේ භාෂා වාක්‍ය ඛණ්ඩය සඳහා සාමාන්‍යයෙන් පිළිගත් ප්‍රමිතියක් නොමැත. කෙසේ වෙතත්, බොහෝ එකලස් භාෂා සංවර්ධකයින් පිළිපදින සම්මතයන් තිබේ. එවැනි ප්‍රධාන ප්‍රමිතීන් වන්නේ Intel syntax සහ AT&T syntax ය.

උපදෙස්

උපදෙස් පටිගත කිරීම සඳහා වන සාමාන්‍ය ආකෘතිය ප්‍රමිති දෙකටම සමාන වේ:

[ලේබලය:] opcode [operands] [;comment]

මෙහි opcode යනු ප්‍රොසෙසරයට උපදෙස් දෙන සෘජු සිහිවටනයයි. එයට උපසර්ග එකතු කළ හැකිය (පුනරාවර්තන, ලිපින ආකාරයේ වෙනස්කම් ආදිය).
Operands නියතයන් විය හැක, ලියාපදිංචි නම්, RAM හි ලිපින, යනාදිය විය හැකිය. Intel සහ AT&T ප්‍රමිතීන් අතර වෙනස්කම් ප්‍රධාන වශයෙන් සම්බන්ධ වන්නේ මෙහෙයුම් ලැයිස්තුගත කර ඇති අනුපිළිවෙලට සහ විවිධ ලිපින ක්‍රම සඳහා ඒවායේ වාක්‍ය ඛණ්ඩයට ය.
භාවිතා කරන සිහිවටන සාමාන්‍යයෙන් එකම ගෘහ නිර්මාණ ශිල්පයේ හෝ ගෘහනිර්මාණ පවුලේ සියලුම ප්‍රොසෙසර සඳහා සමාන වේ (පුළුල් ලෙස දන්නා ඒවා අතර මෝටරෝලා, ARM, x86 ප්‍රොසෙසර සහ පාලක සඳහා වන සිහිවටන වේ). ඒවා ප්‍රොසෙසර පිරිවිතරවල විස්තර කර ඇත. විය හැකි ව්යතිරේක:
එකලස් කරන්නා හරස් වේදිකා AT&T වාක්‍ය ඛණ්ඩය භාවිතා කරන්නේ නම් (මුල් සිහිවටන AT&T වාක්‍ය ඛණ්ඩයට පරිවර්තනය වේ)
මුලින් මතක සටහන් පටිගත කිරීම සඳහා ප්‍රමිතීන් දෙකක් තිබුනේ නම් (විධාන පද්ධතිය වෙනත් නිෂ්පාදකයෙකුගෙන් ප්‍රොසෙසරයකින් උරුම විය).
උදාහරණයක් ලෙස, Zilog Z80 ප්‍රොසෙසරය Intel i8080 උපදෙස් පද්ධතිය උරුම කර, එය පුළුල් කර මතක සටහන් (සහ ලියාපදිංචි කිරීමේ තනතුරු) තමන්ගේම ආකාරයෙන් වෙනස් කළේය. උදාහරණයක් ලෙස, මම Intel හි mov එක ld ලෙස වෙනස් කළෙමි. මෝටරෝලා ෆයර්බෝල් ප්‍රොසෙසරවලට Z80 උපදෙස් පද්ධතිය උරුම වූ අතර එය තරමක් අඩු විය. ඒ සමගම Motorola නිල වශයෙන් Intel සිහිවටන වෙත නැවත පැමිණ ඇත. මේ මොහොතේ, ෆයර්බෝල් සඳහා එකලස් කරන්නන්ගෙන් අඩක් ඉන්ටෙල් සිහිවටන සමඟ ද අඩක් සිලොග් සිහිවටන සමඟ ද ක්‍රියා කරයි.

විධාන

උපදෙස් වලට අමතරව, වැඩසටහනක විධාන අඩංගු විය හැක: යන්ත්‍ර උපදෙස් වලට කෙලින්ම පරිවර්තනය නොකරන විධාන, නමුත් සම්පාදකයේ ක්‍රියාකාරිත්වය පාලනය කරයි. ඒවායේ කට්ටලය සහ වාක්‍ය ඛණ්ඩය සැලකිය යුතු ලෙස වෙනස් වන අතර දෘඩාංග වේදිකාව මත නොව, භාවිතා කරන සම්පාදකය මත රඳා පවතී (එකම ගෘහනිර්මාණ පවුල තුළ භාෂා උපභාෂා උත්පාදනය කිරීම). "මහත්තන්ගේ කට්ටලයක්" ලෙස, අපට ඉස්මතු කළ හැක:
දත්ත අර්ථ දැක්වීම (ස්ථාවර සහ විචල්‍ය)
මතකය සහ ප්රතිදාන ගොනු පරාමිතීන් තුළ වැඩසටහන් සංවිධානය කළමනාකරණය කිරීම
සම්පාදක මෙහෙයුම් ආකාරය සැකසීම
සියලු වර්ගවල වියුක්ත කිරීම් (එනම් ඉහළ මට්ටමේ භාෂාවල මූලද්‍රව්‍ය) - ක්‍රියා පටිපාටි සහ කාර්යයන් සැලසුම් කිරීමේ සිට (ක්‍රියාපටිපාටික ක්‍රමලේඛන ආදර්ශය ක්‍රියාත්මක කිරීම සරල කිරීම සඳහා) කොන්දේසි සහිත ඉදිකිරීම් සහ ලූප (ව්‍යුහගත ක්‍රමලේඛන ආදර්ශය සඳහා)
මැක්රෝස්

උදාහරණ වැඩසටහන

TASM උපභාෂාවෙන් x86 ගෘහ නිර්මාණ ශිල්පය සඳහා MS-DOS සඳහා Hello world වැඩසටහනක උදාහරණයක්:

.ආදර්ශ කුඩා කේත කොටස උපකල්පනය CS: කේතය, DS: කේතය ORG 100h START: mov ah,9 mov dx,OFFSET පණිවිඩ int 21h int 20h Msg DB "Hello World",13,10,"$" අවසාන කේතය අවසන්

"එකලස් භාෂාව" යන යෙදුමේ මූලාරම්භය සහ විවේචනය

මෙම භාෂාවට එහි නම ලැබෙන්නේ මෙම භාෂා වලින් පරිවර්තකයාගේ (සම්පාදකයාගේ) නමෙනි - එකලස් කරන්නා (ඉංග්‍රීසි එකලස් කරන්නා). දෙවැන්නෙහි නමට හේතු වී ඇත්තේ පළමු පරිගණකවල ඉහළ මට්ටමේ භාෂා නොතිබීම සහ එකලස් කිරීම භාවිතයෙන් වැඩසටහන් නිර්මාණය කිරීමේ එකම විකල්පය කෙලින්ම කේතවල ක්‍රමලේඛනය වීමයි.
රුසියානු භාෂාවෙන් එකලස් කිරීමේ භාෂාව බොහෝ විට "එකලස් කරන්නා" (සහ ඊට සම්බන්ධ දෙයක් - "එකලස් කරන්නා") ලෙස හැඳින්වේ, එය වචනයේ ඉංග්රීසි පරිවර්තනයට අනුව වැරදියි, නමුත් රුසියානු භාෂාවේ නීතිවලට ගැලපේ. කෙසේ වෙතත්, එකලස් කරන්නා (වැඩසටහන) සරලව "එකලස් කරන්නා" ලෙසද හැඳින්වේ, "එකලස් භාෂා සම්පාදකය" යනාදිය නොවේ.
"එකලස් භාෂාව" යන යෙදුම භාවිතා කිරීම, පහත් මට්ටමේ තනි භාෂාවක් හෝ අවම වශයෙන් එවැනි භාෂා සඳහා සම්මතයක් ඇති බවට වැරදි වැටහීමක් ඇති කිරීමට ද හේතු විය හැක. නිශ්චිත වැඩසටහනක් ලියා ඇති භාෂාව නම් කිරීමේදී, එය කුමන ගෘහ නිර්මාණ ශිල්පය සඳහා අදහස් කරන්නේද සහ එය ලියා ඇති භාෂාවේ කුමන උපභාෂාවකින්ද යන්න පැහැදිලි කිරීම යෝග්ය වේ.

අද අපගේ කුතුහලය දනවන කැබිනට් මණ්ඩලයේ කුතුහලය දනවන උදාහරණයක් තිබේ - පිරිසිදු එකලස්කිරීමකින් ලියා ඇති මෙහෙයුම් පද්ධතියකි. රියදුරන්, චිත්රක කවචය, පෙර ස්ථාපිත වැඩසටහන් සහ ක්රීඩා දුසිම් ගනනක් සමඟ එක්ව, එය මෙගාබයිට් එකහමාරකට වඩා අඩු කාලයක් ගතවේ. සුවිශේෂී වේගවත් සහ ප්‍රධාන වශයෙන් රුසියානු මෙහෙයුම් පද්ධතිය "Hummingbird" හමුවන්න.

"Hummingbird" හි සංවර්ධනය 2009 දක්වා ඉතා ඉක්මනින් සිදු විය. කුරුල්ලා විවිධ දෘඩාංග මත පියාසර කිරීමට ඉගෙන ගත් අතර, අවම වශයෙන් පළමු පෙන්ටියම් සහ මෙගාබයිට් අටක් RAM අවශ්ය විය. Hummingbird සඳහා අවම පද්ධති අවශ්‍යතා වන්නේ:

  • CPU: Pentium, AMD 5x86 හෝ Cyrix 5x86 MMX නොමැතිව 100 MHz සංඛ්‍යාතයක් සහිත;
  • RAM: 8 MB;
  • වීඩියෝ කාඩ්පත: VGA මාදිලිය (640 × 480 × 16) සඳහා සහය සමඟ VESA අනුකූල වේ.

නවීන "Hummingbird" යනු 2009 අවසානයේ නිකුත් කරන ලද නවතම නිල අනුවාදයේ නිතිපතා යාවත්කාලීන කරන ලද "රාත්‍රී ගොඩනැගීම" වේ. අපි 2017 අගෝස්තු 20 දිනැති ගොඩනැගීම 0.7.7.0+ පරීක්‍ෂා කළෙමු.

අවවාදයයි

පෙරනිමි සැකසුම් තුළ, KolibriOS හට BIOS හරහා දෘශ්‍යමාන වන තැටි වෙත ප්‍රවේශය නොමැත. මෙම සැකසුම වෙනස් කිරීමට පෙර හොඳින් සිතා බලා උපස්ථයක් සාදන්න.

රාත්‍රී ගොඩනැඟිලිවල වෙනස්කම් කුඩා වුවද, වසර ගණනාවක් පුරා බොහෝ දේ එකතු වී ඇත. යාවත්කාලීන කරන ලද "Hummingbird" හට FAT16–32 / ext2 - ext4 කොටස් වෙත ලිවිය හැකි අතර කියවීමේ මාදිලියේ අනෙකුත් ජනප්‍රිය ගොනු පද්ධති (NTFS, XFS, ISO-9660) සඳහා සහය දක්වයි. එය USB සහ ජාල කාඩ්පත් සඳහා සහය එක් කළ අතර TCP/IP තොගයක් සහ ශ්‍රව්‍ය කෝඩෙක්ස් එක් කළේය. සාමාන්‍යයෙන්, ඔබට දැනටමත් එහි යමක් කළ හැකි අතර, GUI සහිත අල්ට්‍රා-ලයිට් මෙහෙයුම් පද්ධතියක් දෙස වරක් පමණක් බලා දියත් කිරීමේ වේගය ගැන විශ්මයට පත් නොවේ.



පෙර අනුවාදවල මෙන්, නවතම "Hummingbird" පැතලි එකලස් කිරීමේ (FASM) ලියා ඇති අතර එක් නම්ය තැටියක් - 1.44 MB වේ. මෙයට ස්තූතියි, එය සම්පූර්ණයෙන්ම යම් විශේෂිත මතකයක් තුළ තැබිය හැකිය. උදාහරණයක් ලෙස, ශිල්පීන් KolibriOS සෘජුවම Flash BIOS වෙත ලිවීය. ක්රියාන්විතයේදී, එය සම්පූර්ණයෙන්ම සමහර ප්රොසෙසරවල හැඹිලිය තුළ ස්ථානගත කළ හැක. නිකමට සිතන්න: සම්පූර්ණ මෙහෙයුම් පද්ධතිය, වැඩසටහන් සහ ධාවක සමඟ, හැඹිලිගත කර ඇත!

තොරතුරු

kolibrios.org වෙබ් අඩවියට පිවිසෙන විට, බ්‍රවුසරය ඔබට අනතුර ගැන අනතුරු අඟවයි. හේතුව, පෙනෙන විදිහට, බෙදාහැරීමේ දී එකලස් කිරීමේ වැඩසටහන් වේ. VirusTotal දැන් වෙබ් අඩවිය සම්පූර්ණයෙන්ම ආරක්ෂිත ලෙස අර්ථ දක්වයි.

"Hummingbird" පහසුවෙන් floppy disk, Hard Drive, flash drive, Live CD හෝ virtual machine එකකින් පූරණය කළ හැක. අනුකරණය කිරීම සඳහා, OS වර්ගය “වෙනත්” සඳහන් කරන්න, එක් ප්‍රොසෙසර හරයක් සහ එයට RAM කිහිපයක් වෙන් කරන්න. ධාවකය සම්බන්ධ කිරීම අවශ්ය නොවේ, ඔබට DHCP සමඟ රවුටරයක් ​​තිබේ නම්, "Hummingbird" ක්ෂණිකව අන්තර්ජාලයට සහ දේශීය ජාලයට සම්බන්ධ වනු ඇත. බාගත කළ වහාම, ඔබට අනුරූප දැනුම්දීමක් පෙනෙනු ඇත.


එක් ගැටළුවක් නම්, HTTPS ප්‍රොටෝකෝලය Kolibri තුළ ගොඩනගා ඇති බ්‍රව්සරය මඟින් සහය නොදක්වයි. ඒ නිසා Google, Yandex, Wikipedia, Sberbank වල පිටු විවෘත කරනවා වගේ ඒකේ තියෙන සයිට් එක බලන්නත් බැරි වුනා... ඇත්තටම සාමාන්‍ය ලිපිනයක් නෑ. සෑම කෙනෙකුම දිගු කලක් ආරක්ෂිත ප්රොටෝකෝලයකට මාරු වී ඇත. පැරණි පාසල් පිරිසිදු HTTP සහිත එකම වෙබ් අඩවිය වූයේ "රුසියානු රජයේ ද්වාරය", නමුත් එය පෙළ බ්‍රවුසරයේ හොඳම ලෙස නොපෙනේ.



Hummingbird හි පෙනුම සැකසීම් වසර ගණනාවක් පුරා වැඩිදියුණු වී ඇත, නමුත් තවමත් පරමාදර්ශී නොවේ. ඔබ යතුර එබූ විට Hummingbird පැටවීමේ තිරය මත සහාය දක්වන වීඩියෝ මාදිලි ලැයිස්තුවක් පෙන්වනු ලැබේ.



පවතින විකල්ප ලැයිස්තුව කුඩා වන අතර අවශ්‍ය විභේදනය එහි නොතිබිය හැකිය. ඔබට AMD (ATI) GPU සහිත වීඩියෝ කාඩ්පතක් තිබේ නම්, ඔබට වහාම අභිරුචි සැකසුම් එකතු කළ හැකිය. මෙය සිදු කිරීම සඳහා, ඔබ ATIKMS කාරකය වෙත -m පරාමිතිය ලබා දිය යුතුය x x , උදාහරණ වශයෙන්:

/RD/1/රියදුරු/ATIKMS -m1280x800x60 -1

මෙහි /RD/1/DRIVERS/ATIKMS යනු bootloader වෙත යන මාර්ගයයි (RD - RAM Disk).

පද්ධතිය ක්‍රියාත්මක වන විට, තෝරාගත් වීඩියෝ මාදිලිය vmode විධානය සමඟ නැරඹිය හැකි අතර (න්‍යායාත්මකව) අතින් මාරු කළ හැකිය. “Hummingbird” අථත්‍ය යන්ත්‍රයක ක්‍රියාත්මක වන්නේ නම්, මෙම කවුළුව හිස්ව පවතිනු ඇත, නමුත් පිරිසිදු ඇරඹුමක් සමඟින්, Intel වීඩියෝ ධාවක i915 සිට Skylake වෙත එක් කළ හැක.

පුදුමයට කරුණක් නම්, KolibriOS හට ක්‍රීඩා ටොන් ගණනකට ඉඩ දිය හැකිය. ඒවා අතර තාර්කික සහ ආකේඩ් ක්‍රීඩා, ටැග්, සර්ප, ටැංකි (නැත, WoT නොවේ) - සම්පූර්ණ “ක්‍රීඩා මධ්‍යස්ථානයක්” ඇත! ඩූම් සහ ක්වේක් පවා කොලිබ්‍රි වෙත ගෙන යන ලදී.



තවත් වැදගත් දෙයක් වූයේ FB2READ කියවනයයි. එය සිරිලික් සමඟ නිවැරදිව ක්‍රියා කරන අතර පෙළ සංදර්ශක සැකසුම් ඇත.



සියලුම පරිශීලක ගොනු ෆ්ලෑෂ් ඩ්‍රයිව් එකක ගබඩා කිරීමට මම නිර්දේශ කරමි, නමුත් එය USB 2.0 වරායක් හරහා සම්බන්ධ කළ යුතුය. NTFS ගොනු පද්ධතිය සමඟ 16 GB ධාරිතාවයකින් යුත් අපගේ USB 3.0 ෆ්ලෑෂ් ධාවකය (USB 2.0 පෝට් එකක) වහාම හඳුනා ගන්නා ලදී. ඔබට ගොනු ලිවීමට අවශ්ය නම්, ඔබ FAT32 කොටස සමඟ ෆ්ලෑෂ් ධාවකය සම්බන්ධ කළ යුතුය.



Kolibri බෙදාහැරීමේ කට්ටලයට ගොනු කළමනාකරුවන් තිදෙනෙකු, රූප සහ ලේඛන බැලීම සඳහා උපයෝගිතා, ශ්‍රව්‍ය සහ දෘශ්‍ය ධාවකයන් සහ වෙනත් පරිශීලක යෙදුම් ඇතුළත් වේ. කෙසේ වෙතත්, එහි ප්‍රධාන අවධානය යොමු වන්නේ එකලස් කිරීමේ භාෂා සංවර්ධනය කෙරෙහි ය.



තනා ඇති පෙළ සංස්කාරකයේ ASM සින්ටැක්ස් උද්දීපනය ඇති අතර ටයිප් කළ වැඩසටහන් වහාම දියත් කිරීමට පවා ඔබට ඉඩ සලසයි.



සංවර්ධන මෙවලම් අතර i386 Windows, Linux සහ KolibriOS සඳහා Oberon-07/11 සම්පාදකය මෙන්ම පහත මට්ටමේ ඉමුලේටර් ද ඇත: E80 - ZX Spectrum emulator, FCE Ultra - හොඳම NES ඉමුලේටර් වලින් එකක්, DOSBox v.0.74 සහ අන් අය. ඒවා සියල්ලම විශේෂයෙන් Kolibri වෙත ගෙන යන ලදී.

ඔබ විනාඩි කිහිපයක් KolibriOS හැර ගියහොත්, තිර සුරැකුම ආරම්භ වේ. කේතයේ රේඛා තිරය මත දිස්වනු ඇත, ඔබට MenuetOS වෙත යොමු කිරීමක් දැකිය හැකිය.

අඛණ්ඩව ලබා ගත හැක්කේ සාමාජිකයින්ට පමණි

විකල්ප 1. වෙබ් අඩවියේ ඇති සියලුම ද්රව්ය කියවීමට "අඩවි" ප්රජාවට සම්බන්ධ වන්න

නිශ්චිත කාල සීමාව තුළ ප්‍රජාවේ සාමාජිකත්වය ඔබට සියලුම හැකර් ද්‍රව්‍ය වෙත ප්‍රවේශය ලබා දෙයි, ඔබේ පුද්ගලික සමුච්චිත වට්ටම් වැඩි කරයි සහ වෘත්තීය Xakep ලකුණු ශ්‍රේණිගත කිරීමක් රැස් කර ගැනීමට ඔබට ඉඩ සලසයි!


ඉහල