Assembly Online
לכתוב, להריץ ולשתף קטעי קוד - בלי שום התקנה.
הריצו Assembly אונליין בדפדפן
זהו קומפיילר Assembly אונליין וחינמי לקוד x86-64 בתחביר NASM. הקלידו את התוכנית, לחצו על הרצה, ו-Coddy מרכיב אותה עם nasm -f elf64, מקשר אותה עם ld ומריץ את קובץ ההפעלה של Linux בצד השרת. לאחר מכן מוצגים stdout, stderr וקוד היציאה. אין מה להתקין: בלי NASM, בלי linker, בלי מכונה וירטואלית ובלי cross-compiler.
תוכנית ההתחלה היא נקודת כניסה _start מלאה שקוראת שורה מהקלט הסטנדרטי וכותבת בחזרה ברכה באמצעות קריאות המערכת הגולמיות read, write ו-exit, בלי libc. ככה Assembly עובד באמת: מעבירים ארגומנטים ל-rax/rdi/rsi/rdx, מפעילים syscall והקרנל עושה את השאר. השתמשו בחלונית ה-stdin שמתחת לעורך כדי להזין קלט לתוכנית בכל הרצה, בדיוק כמו העברת קלט ב-pipe לקובץ בינארי אמיתי.
מה הופך את עורך ה-Assembly האונליין הזה לשימושי
- toolchain אמיתי של x86-64 NASM. קוד המקור מורכב עם
nasm -f elf64ומקושר עםldעל Linux, אותן פקודות שהייתם מקלידים במחשב שלכם, כך שמה שרץ כאן זהה למה שרץ על מכונה אמיתית. - קריאות מערכת ישירות של Linux. תוכנית ההתחלה משתמשת ב-
read,writeו-exitדרך הפקודהsyscallבלי libc באמצע, כך שרואים בדיוק איך האוגרים נושאים ארגומנטים וערכי החזרה. - תמיכה בקלט סטנדרטי. הזינו בתים לתוכנית דרך חלונית ה-stdin וקראו אותם עם syscall 0. שימושי לתרגילים הקלאסיים של 'קראו שם, הדפיסו ברכה' ומעבר להם.
- אפס הגדרות, משוב מיידי. בלי התקנת NASM, בלי דגלי linker לזכור ובלי שגיאות הרשאה: פותחים את הדף והעורך מוכן. שגיאות מה-assembler ומה-linker מוצגות ישירות בפלט.
מה אפשר לנסות בעורך ה-Assembly האונליין
- הדפיסו מחרוזת קבועה עם קריאת
writeאחת ואזexit(0)נקי. זו התוכנית השלמה הקטנה ביותר ב-x86-64, והדרך המהירה ביותר לראות איך_startו-syscallמשתלבים. - קראו מ-stdin לתוך buffer ב-
.bss, הסירו את תו השורה החדשה שבסוף והדפיסו אותו בחזרה. זו התבנית שמאחורי כמעט כל תרגיל Assembly שמבוסס על קלט. - חברו שני מספרים באוגרים והמירו את התוצאה לספרות ASCII באופן ידני, כדי שתוכלו להדפיס אותה עם
write. כך לומדים של-Assembly איןprint, יש רק בתים וקריאות מערכת.
שאלות נפוצות על קומפיילר Assembly אונליין
באיזה assembler ובאיזה תחביר העורך משתמש?
nasm -f elf64 ומקושר עם ld. אם אתם מגיעים מתחביר AT&T/GAS (בסגנון %rax, movq), כתבו מחדש בסגנון Intel של NASM: mov rax, 1, section .text, global _start.האם צריך להתקין NASM או linker כדי להשתמש בזה?
איך קוראים קלט ב-Assembly כאן?
read (מספר 0): שימו 0 ב-rax (sys_read), 0 ב-rdi (stdin), את כתובת ה-buffer ב-rsi ואת מספר הבתים המקסימלי ב-rdx, ואז הריצו syscall. כל מה שתקלידו בחלונית ה-stdin שמתחת לעורך יועבר לתוכנית בזמן ההרצה. תוכנית ההתחלה מציגה את התבנית המלאה, כולל הסרת תו השורה החדשה שבסוף.למה התוכנית שלי צריכה _start ולא main?
ld בלי סביבת ריצה של C. main היא מוסכמה של libc: קוד האתחול של C קורא לה אחרי שהוא מכין את הסביבה. בקישור נקי עם ld אין libc, ולכן הקרנל קופץ ישירות לתווית _start, וזו הסיבה שכל תוכנית כאן מגדירה global _start. באחריותכם לצאת בצורה נקייה עם קריאת המערכת exit (מספר 60) בסוף.אפשר ללמוד Assembly עם הקומפיילר הזה גם כמתחילים?
כלים שימושיים ל-Assembly
כלים חינמיים בדפדפן שמשתלבים היטב עם עורך ה-Assembly אונליין - כולם חלק מ-Coddy.