זוהי הפקודה as86 שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
as86 - אסמבלר למעבדי 8086..80386
תַקצִיר
as86 [-0123agjuw] [-לם[רשימה]] [-n שם] [-o obj] [-b[בן]] [-s SYM] [-t textseg] src
as86_encap פרוג.ס prog.v [תחילית_] [as86_options]
תיאור
as86 הוא אסמבלר למעבדי 8086..80386, התחביר שלו קרוב יותר ל-
צורת intel/microsoft ולא הצורה הגנרית הנורמלית יותר של מערכת יוניקס
אספן.
השמיים src הקובץ יכול להיות '-' כדי להרכיב את הקלט הסטנדרטי.
אסמבלר זה יכול להיות מורכב כדי לתמוך במעבד 6809 ואולי אפילו יעבוד.
as86_encap הוא סקריפט מעטפת לקרוא ל-as86 ולהמיר את הבינארי שנוצר לקובץ C
prog.v להיכלל או לקשר עם תוכניות כמו מתקיני בלוק אתחול. ה תחילית_
ארגומנט הוא קידומת שיש להוסיף לכל המשתנים שהוגדרו על ידי המקור, הוא כברירת מחדל
שם קובץ המקור. המשתנים שהוגדרו כוללים prefix_start prefix_size ו
prefix_data להגדיר ולהכיל את הקוד, בתוספת מספרים שלמים המכילים את הערכים של כולם
תוויות מיוצאות. אחד או שניהם פרוג.ס ו prog.v ארגומנטים יכולים להיות '-' עבור תקן
בפנים בחוץ.
אפשרויות
-0 התחל עם קטע קוד של 16 סיביות, הזהר עבור כל ההוראות > 8086
-1 התחל עם קטע קוד של 16 סיביות, הזהר עבור כל ההוראות > 80186
-2 התחל עם קטע קוד של 16 סיביות, הזהר עבור כל ההוראות > 80286
-3 התחל עם קטע קוד של 32 סיביות, אל תזהיר עבור כל הוראות. (אפילו לא 486 או
586)
-a אפשר תאימות חלקית עם Minix asld. זה מחליף את הפרשנות של
סוגריים עגולים וסוגריים מרובעים וכן ביצוע שינויים בקוד
יצירה ותחביר לקפיצות ושיחות של 16 סיביות. ("jmp @(bx)" הוא אז חוקי
הוראה)
-g שים רק סמלים גלובליים בקובץ אובייקט או סמל
-j החלף את כל הקפיצות הקצרות בקפיצות דומות של 16 או 32 סיביות, ה-16 סיביות מותנות
ענפים מקודדים כסניף קצר מותנה וארוך ללא תנאי.
-O זה גורם ל-assembler להוסיף מעברים נוספים כדי לנסות להשתמש בהפניות קדימה
להפחית את הבתים הדרושים לכמה הוראות. אם התוויות זזות במעבר האחרון
האסמבלר ימשיך להוסיף מעברים עד שהתוויות כולן מתייצבות (למקסימום
של 30 מעברים) זה כנראה לא רעיון טוב להשתמש בזה עם assembler בכתב יד
להשתמש במפורש br Bmi BCC סגנון opcodes עבור קוד 8086 או את JMP ליד סגנון עבור
הוראות i386 מותנות וודא שכל המשתנים מוגדרים לפניהם
משומשים.
-l לייצר קובץ רשימה, שם הקובץ עשוי להופיע
-m הדפס הרחבות מאקרו ברישום
-n שם המודול מופיע (נכנס לאובייקט במקום שם המקור)
-o לייצר קובץ אובייקט, שם הקובץ יופיע בהמשך
-b לייצר קובץ בינארי גולמי, שם הקובץ עשוי להופיע. זהו קובץ בינארי 'גולמי' עם
אין כותרת, אם אין -s אפשרות הקובץ מתחיל במיקום 0.
-s צור קובץ סמל ASCII, שם הקובץ יופיע בהמשך. הפורמט של טבלה זו הוא
תוכנן כך שיהיה קל לנתח עבור אנקפסולציה ופעילויות קשורות
לקבצים בינאריים שנוצרו עם -b אוֹפְּצִיָה. אם קובץ בינארי לא מתחיל ב
מיקום אפס שני הפריטים הראשונים בטבלה הם כתובות ההתחלה והסוף של
הקובץ הבינארי.
-u נניח שסמלים לא מוגדרים מיובאים עם פלח לא מוגדר.
-וו- לאפשר להרכב להדפיס הודעות אזהרה.
-t n העבר את כל נתוני פלח הטקסט בקטע n+3.
AS86 מקור
תווים מיוחדים
* כתובת של תחילת השורה הנוכחית.
; ! כל אחד מאלה מסמן את תחילתה של הערה. בנוסף כל 'לא צפוי'
ההנחה היא שהתו בתחילת שורה היא הערה (אבל זה גם
מוצג למסוף).
$ קידומת למספרים הקסדצימליים, תחביר 'C', למשל 0x1234, מתקבלת גם היא.
% קידומת למספרים בינאריים.
# קידומת לאופרנדים מיידיים.
[ ] מציין אופרנד עקיף.
בניגוד ל-MASM לאסמבלר אין מידע סוג על תוויות רק קטע ו
לְקַזֵז. המשמעות היא שהאופן שבו פועלים המפעיל הזה והקידומת המיידית
כמו מרכיבים מסורתיים.
דוגמאות:
mov ax,bx
jmp bx
כתובת רישום ישירה, הקפיצה מעתיקה את BX למחשב.
mov axe,[bx]
jmp [bx]
כתובת רישום עקיפה פשוטה, הקפיצה מזיזה את תוכן המיקום
שצוין על ידי BX למחשב.
mov axe, #1234
ערך מיידי, גרזן הופך ל-1234.
תנועת גרזן, 1234
mov axe,_שלום
mov axe,[_hello]
כתובת מוחלטת, ax מוגדר לתוכן של מיקום 1234. שימו לב לאפשרות השלישית
אינו עקבי אך הוא קיים בעיקר עבור תאימות asld.
mov ax,_table[bx]
mov ax,_table[bx+si]
mov eax,_table[ebx*4]
mov ax,[bx+_table]
mov ax,[bx+si+_table]
mov eax,[ebx*4+_table]
כתובת באינדקס, שני הפורמטים בסדר, אני חושב שהראשון נכון יותר אבל אני
נוטים להשתמש בשני. :-)
תנאים
אם, אַחֵר, ELSEIF, ENDIF
מצב מספרי
IFC, ELSEIFC
השוואת מחרוזות (str1,str2)
FAIL .לְהִכָּשֵׁל
צור שגיאת משתמש.
קשור לפלח
.טֶקסט .ROM .נתונים .BSS
הגדר את הפלח הנוכחי. ניתן להקדים אותם על ידי מילת המפתח .כַּת
LOC הגדר קטע מספרי 0=TEXT, 3=DATA,ROM,BSS, 14=MAX. סדר הפלחים שנקבע על ידי
המקשר הוא כעת 0,4,5,6,7,8,9,A,B,C,D,E,1,2,3. פלח 0 וכל הפלחים מעל 3
ההנחה היא קטע טקסט. שימו לב שההגבלות של גודל 64k לא מוטלות עבור
קטעים 3-14.
הגדרת סוג התווית
יצוא פּוּמְבֵּי .לְהַגדִיר
תווית ייצוא שהוגדרה באובייקט זה
כְּנִיסָה הכריח את המקשר לכלול את התווית שצוינה ב-a.out
.GLOBL .גלוֹבָּלִי
הגדר תווית כחיצונית ואכפה ייבוא גם אם לא נעשה בה שימוש.
EXTRN אקסטרן יְבוּא .EXTERN
ייבוא רשימה של תוויות מוגדרות חיצונית
הערה: זה לא הגיוני להשתמש בייבוא עבור קבצים בינאריים גולמיים.
.להיכנס סמן ערך עבור קובץ בינארי ישן (obs)
הגדרת נתונים
DB .DATA1 .BYTE FCB
רשימה של אובייקטים בת 1.
DW .DATA2 .קצר FDB .מִלָה
רשימה של אובייקטים בת 2.
DD .DATA4 .ארוך
רשימה של אובייקטים בת 4.
.ASCII ה-FCC
מחרוזת Ascii הועתקה לפלט.
.ASCIZ מחרוזת Ascii הועתקה לפלט עם נגרר null בייט.
הגדרת מרחב
.BLKB יואן .מֶרחָב
הרווח נספר בבתים.
.BLKW .ZEROW
החלל נספר במילים. (2 בייטים כל אחד)
COMM .COMM LCOMM .LCOMM
הגדרת נתוני אזור משותף
פעולות פסאודו שימושיות אחרות.
.יישור .אֲפִילוּ
מערך
EQU הגדר תווית
SET הגדר תווית ניתנת להגדרה מחדש
אורג .ORG
קבע את מיקום ההרכבה
BLOCK קבע את מיקום ההרכבה וערם את הישן
ENDB חזור למקום ההרכבה המוערם
לקבל לִכלוֹל
הוסף קובץ חדש (ללא מרכאות על השם)
USE16 [מעבד]
הגדר את גודל אופרנד ברירת המחדל כ-16 סיביות, הארגומנט הוא סוג המעבד שהקוד צפוי
הפעל על הוראות (86, 186, 286, 386, 486, 586) עבור מעבד מאוחר מהצוין
להזהיר.
USE32 [מעבד]
הגדר את גודל אופרנד ברירת המחדל כ-32 סיביות, הארגומנט הוא סוג המעבד שהקוד צפוי
הפעל על הוראות (86, 186, 286, 386, 486, 586) עבור מעבד מאוחר מהצוין
להזהיר. אם המעבד לא מוזכר, האסמבלר מבטיח שהוא >= 80386.
הסוף סוף הקומפילציה עבור קובץ זה.
.לְהַזהִיר אזהרות מתג
.רשימה רישומים מופעל/כבוי (1,-1)
.MACLIST
רשימות מאקרו הפעלה/כיבוי (1,-1)
מאקרו, עכשיו עובדים, הצורה הכללית היא כזו.
סקסון מאקרו
mov axe,#?1
לְתַקֵן
סקסופון(1)
לא מיושם/לא בשימוש.
IDENT הגדר מחרוזת זהות אובייקט.
SETDP הגדר ערך DP על 6809
MAP הגדר מספר מפת טבלת סמלים בינאריים.
רושם
BP BX DI SI
EAX EBP EBX ECX EDI EDX ESI ESP
AX CX DX SP
ע"ל ב"ה בל כ"ל ד"ה ד"ל
CS DS ES FS GS SS
CR0 CR2 CR3 DR0 DR1 DR2 DR3 DR6 DR7
TR3 TR4 TR5 TR6 TR7 ST
מפרטי סוג אופרנד
BYTE DWORD FWORD FAR PTR PWORD QWORD TBYTE מילה ליד
ה'קרוב' וה'רחוק' אינם מאפשרים תכנות מרובה מקטעים, כולן פעולות 'רחוק'
מצוינים במפורש באמצעות השימוש בהוראות: jmpi, jmpf, callf,
retf וכו'. ניתן להשתמש באופרטור 'קרוב' כדי לאלץ את השימוש ב-80386 16bit
סניפים מותנים. האופרטורים 'Dword' ו-'word' יכולים לשלוט בגודל של
אופרנדים על קפיצות וקריאות רחוקות.
הוראות כלליות.
אלה באופן כללי זהות להוראות שנמצאות בכל מרכיב 8086, ה
יוצאי דופן עיקריים הם כמה הוראות 'עותק מוסתר' (BCC, BNE, BGE וכו') שהן
קיצורים לענף קצר פלוס קפיצה לרוחק ו'BR' שהוא הארוך ביותר
קפיצה ללא תנאי (16 או 32 סיביות).
ענפים ארוכים
BCC BCS BEQ BGE BGT BHI BHIS BLE BLO BLOS BLT BMI BNE BPC BPL BPS BVC BVS BR
תת -מגזר
CALLI CALLF JMPI JMPF
הוראות לשינוי פלחים
ESEG FSEG GSEG SSEG
הוראות פעולת בייט
ADCB ADDB ANDB CMPB DECB DIVB IDIVB IMULB INB INCB MOVB MULB NEGB NOTB ORB OUTB
RCLB RCRB ROLB RORB SALB SARB SHLB SHRB SBBB SUBB TESTB XCHGB XORB
הוראות סטנדרטיות
AAA AAD AAM AAS ADC ADD AND ARPL BUND BSF BSR BSWAP BT BTC BTR BTS CALL CBW CDQ
CLC CLD CLI CLTS CMC CMP CMPS CMPSB CMPSD CMPSW CMPW CMPXCHG CSEG CWD CWDE DAA DAS
DEC DIV DSEG ENTER HLT IDIV IMUL IN INC INS INSB INSD INSW INT INTO INVD INVLPG INW
IRET IRETD J JA JAE JB JBE JC JCXE JCXZ JE JECXE JECXZ JG JGE JL JLE JMP JNA JNAE
JNB JNBE JNC JNE JNG JNGE JNL JNLE JNO JNP JNS JNZ JO JP JPE JPO JS JZ LAHF LAR LDS
LEA LEAVE LES LFS LGDT LGS LIDT LLDT LMSW LOCK LODB LODS LODSB LODSD LODSW LODW
לולאה לולאה LOOPNE LOOPNZ LOOPZ LSL LSS LTR MOV MOVS MOVSB MOVSD MOVSW MOVSX MOVW
MOVZX MUL NEG NOP NOT OR OUT OUTS OUTSB OUTSD OUTSW OUTW POP POPA POPAD POPF POPFD
PUSH PUSHA PUSHAD PUSHF PUSHFD RCL RCR RDMSR REP REPE REPNE REPNZ REPZ RET RETF
RETI ROL ROR SAHF SAL SAR SBB SCAB SCAS SCASB SCASD SCASW SCAW SEG SETA SETAE SETB
SETBE SETC SETE SETG SETGE SETL SETLE SETNA SETNAE SETNB SETNBE SETNC SETNE SETNG
SETNGE SETNL SETNLE SETNO SETNP SETNS SETNZ SETO SETP SETPE SETPO SETS SETZ SGDT
SHL SHLD SHR SHRD SIDT SLDT SMSW STC STD STI STOB STOS STOSB STOSD STOSW STOW STR
מבחן משנה VERR VERW המתן WBINVD WRMSR XADD XCHG XLAT XLATB XOR
נקודה צפה
F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI
FDIV FDIVP FDIVR FDIVRP FENI FFREE FIADD FICOM FICOMP FIDIV FIDIVR FILD FIMUL
FINCSTP FINIT FIST FISTP FISUB FISUBR FLD FLD1 FLDL2E FLDL2T FLDCW FLDENV FLDLG2
FLDLN2 FLDPI FLDZ FMUL FMULP FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE FNSTCW FNSTENV
FNSTSW FPATAN FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE FSCALE FSETPM FSIN FSINCOS
FSQRT FST FSTCW FSTENV FSTP FSTSW FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP FUCOMPP
FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1
שימוש GASP
מעבד ה-Gnu assembler מספק כמה יישומים סבירים של מוטת משתמש
פסאודו אופקודים.
ניתן להפעיל אותו בצורה דומה ל:
להתנשף [-א...] קבצים [file2.s] |
as86 [...] - [-o obj] [-b בן]
שים לב ש- Gasp מייצר שגיאה עבור . אירגונים פקודות, אם אינך משתמש
תחביר חלופי שאתה יכול להשתמש בו org במקום זאת, השתמש אחרת בלוק ו endb. ההנחיה
יצוא מתורגם ל גלובלי, אשר מאלץ ייבוא, אם אתה יוצר קובץ באמצעות
-b להשתמש ציבורי or .לְהַגדִיר במקום.
לאפשרויות רשימת GASP אין תמיכה ב-as86.
השתמש ב-as86 באינטרנט באמצעות שירותי onworks.net