as86(1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
名稱
as86 - as86-8086..80386處理器的匯編程序
?
概要格式
? ? ? as86 ?[-0123agjuw] ?[-lm[list]] ?[-n name] ?[-o obj] [-b[bin]] [-s sym]
? ? ? [-t textseg] src
?
? ? ? as86_encap prog.s prog.v [prefix_] [as86 options]
?
描述
? ? ?as86是8086..80386處理器下的匯編程序,它所采用的語法與Intel/MS采取的語法類似,而不同于廣泛運用于UNIX下的匯編語法(譯注,gas中的語法,AT&T匯編)
?
????命令行中的src參數可為'-',代表對標準輸入進行匯編。
?
????as86_encap是一個腳本,使用了as86匯編程序,并且把生成的二進制文件轉為一個C文件prog.v,用于被連接或者包含到程序里,例如引導塊安裝程序。prefix_參數定義一個加到源文件中所有定義的變量的前綴,缺省前綴是源文件名。...
?
選項
? ? ?-0?????以16位代碼段運行,當使用了高于8086指令集的指令時警告。
?
?????-1?????以16位代碼段運行,當使用了高于80186指令集的指令時警告。
?
?????-2?????以16位代碼段運行,當使用了高于80286指令集的指令時警告。
?
?????-3?????以32位代碼段運行,不對任何指令發出警告信息(就算使用了486或586的指令)
?
?????-a?????使匯編程序部分兼容于Minix asld.交換了[]與()的用法,并且改變了一些16位跳轉與調用的語法("jmp @(bx)"?就成了一個合法的指令)
?
?????-g?????僅僅把global符號寫入目標或者符號文件中
?
?????-j?????把所有短跳轉指令(譯注:8位跳轉稱為短跳轉)換成相似的16位或者32位跳轉。并且把16位條件轉移指令換為一個條件短轉移命令與一個無條件長跳轉組合
?
?????-O?????匯編程序會做幾遍額外的工作,以嘗試支持向前引用。最多30遍。不推薦使用
?
?????-l?????產生清單文件(list file),文件名寫在選項后
?
?????-m?????把宏展開后寫在清單文件里
?
?
?
?
?????-n?????把模塊名寫在選項之后(目標模塊,而非源文件)
?
?????-o?????生成目標文件,文件名寫在選項之后
?
?????-b?????生成純二進制文件,文件名寫在后面。這是一個沒有頭部的純二進制文件(譯注:類似Dos下的com和sys)如果沒有-s選項程序將會在內存地址0處開始執行
?
?????-s?????生成一個ASCII碼符號文件,文件名寫在選項后。很簡單就能將其轉換,用于與-b選項生成的二進制文件相關聯和封裝。如果二進制文件不從地址0處開始執行。那么符號文件表中前兩項分別代表起始地址與結束地址
?
?????-u?????假定未定義符號在未指定的段中被導入了
?
?????-w-????允許匯編程序輸出警告信息
?
?????-t n???把所有text段的數據放到段n+3中.
?
AS86?
資料
? ? ??
特殊字符
?
? ? ?*????本行起始地址
?
?????;或!?注釋起始符,另外,在一行起始處的“unexpected”字符被認為是注釋(但是仍然會被顯示在終端上)
?
?????$??????16進制數的前綴, C風格的前綴,?比如0x1234,?也可以使用.
?
?????%??????2進制數的前綴.
?
?????#??????立即數的前綴.
?
?????[ ]????間接尋址運算符.
?
????????????與MASM不同,匯編程序沒有標識符的類型信息,每個標識符僅僅代表是一個段地址和偏移地址。[]與立即數操作與傳統匯編程序一致
?
?????????????例:
?
??????????????????mov?????ax,bx
?
??????????????????jmp?????bx
?
?????????????寄存器尋址, jmp指令把bx寄存器中的值拷到程序計數器中
?
??????????????????mov ax,[bx]
?
??????????????????jmp [bx]
?
?????????????簡單的寄存器間接尋址, jmp指令把bx寄存器值指向的內存單元的值拷到程序計數器中
?
??????????????????mov ax,#1234
?
?????????????立即數,?把1234賦值給ax寄存器
?
??????????????????mov ax,1234
?
??????????????????mov ax,_hello
?
??????????????????mov ax,[_hello]
?
?????????????直接尋址,內存地址1234處的存儲字賦給ax寄存器。注意第三個指令并不十分嚴格,只是為了與asld保持兼容所以保留(譯注:若想將_hello標識符表示的值作為立即數使用,需要加上#前綴?#_hello)
?
??????????????????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]
?
?????????????變址尋址。兩種形式都可以,但是我認為第一種要更正確些,但是我往往用第二種形式:)
?
? ? ?? 條件判斷
?
? ? ? IF, ELSE, ELSEIF, ENDIF
?
?????????????數字比較
?
??????IFC, ELSEIFC
?
?????????????字符串比較?(str1,str2)
?
?
?
?
??????FAIL .FAIL
?
?????????????生成用戶錯誤
?
? ? ?? 段相關
?
? ? ? .TEXT .ROM .DATA .BSS
? ? ? ? ? ? ?設置當前段。可以在前面加上關鍵字.SECT
?
? ? ? 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以上的段都假設為text段。注意64K限制對3-14的段不適用。
?
? ?? ? 標識符類型定義
?
? ? ? EXPORT PUBLIC .DEFINE
? ? ? ? ? ? ?導出符號
?
? ? ? ENTRY ?強制連接器在a.out文件里包含這個特殊符號
?
? ? ? .GLOBL .GLOBAL
? ? ? ? ? ? ?將一個標識符定義為外部的,并且強制就算不使用,也必須導入
?
? ? ? EXTRN EXTERN IMPORT .EXTERN
? ? ? ? ? ? ?導入外部標識符列表
?
NB: bin格式的文件不支持外部變量(譯注:關于這些格式,推薦參考一下NASM的手冊。純C論壇上有中文的NASM手冊)
?
? ? ? .ENTER?標識出舊式bin格式(obs)的程序入口
?
? ? ?? 數據定義
?
? ? ? DB .DATA1 .BYTE FCB
? ? ? ? ? ? ?1字節的對象列表
?
? ? ? DW .DATA2 .SHORT FDB .WORD
? ? ? ? ? ? ?2字節的對象列表
?
? ? ? DD .DATA4 .LONG
? ? ? ? ? ? ?4字節的對象列表
?
? ? ? .ASCII FCC
? ? ? ? ? ?寫到輸出的Ascii碼字符串.
?
? ? ? .ASCIZ Ascii?寫到輸出的Ascii碼字符串,末尾添加nul
?
? ? ?? 空間定義
?
? ? ? .BLKB RMB .SPACE
? ? ? ? ? ? ?以字節為單位計算空間
?
? ? ? .BLKW .ZEROW
? ? ? ? ? ? ?以字為單位計算空間?(一字2字節)
?
? ? ? COMM .COMM LCOMM .LCOMM
? ? ? ? ? ? ?通用數據域定義
?
? ? ?? 其他實用偽指令
?
? ? ? .ALIGN .EVEN
? ? ? ? ? ? ?對齊
?
? ? ? EQU ? ?定義標識符(譯注:可參考NASM或者MASM的EQU)
?
? ? ? SET ? ?定義可重定義的標識符
?
? ? ? ORG .ORG
? ? ? ? ? ? ?定義匯編位置(譯注:即設置地址計數器的值,建議參考MASM的資料)
?
? ? ? BLOCK ?定義匯編位置并且把原來的匯編位置入棧
?
? ? ? ENDB ??回到剛才棧里記錄的匯編位置
?
? ? ? GET INCLUDE
? ? ? ? ? ? ?插入新文件?(no quotes on name)
?
USE16 [cpu]
? ? ? ??定義默認操作數大小為16位,參數表示程序代碼將會運行在什么樣的CPU的(86,186, 286,386,486,586)指令集上.使用了指定指令集之上的指令會產生警告信息
?
USE32 [cpu]
? ? ? ?定義默認操作數大小為32位,參數表示程序代碼將會運行在什么樣的CPU的(86,186,?????286,386,486,586)指令集上.使用了指定指令集之上的指令會產生警告信息
?
? ? ? END ? ?標識出本文件停止匯編的地方
?
? ? ? .WARN ?警告信息開關
?
? ? ? .LIST ?清單?on/off (1,-1)
?
? ? ? .MACLIST
? ? ? ? ? ? ?宏清單?on/off (1,-1)
?
? ? ?宏的使用形式如下
?
? ? ? ? ? MACRO sax
? ? ? ? ? ? ?mov ax,#?1
? ? ? ? ? MEND
? ? ? ? ? sax(1)
?
? ? ? 未實現/未使用的
?
? ? ? IDENT ?Define object identity string.
?
? ? ? SETDP ?Set DP value on 6809
?
? ? ? MAP ? ?Set binary symbol table map number.
?
? ? ?
寄存器
? ? ? ? ? ? ?BP BX DI SI
? ? ? ? ? ? ?EAX EBP EBX ECX EDI EDX ESI ESP
? ? ? ? ? ? ?AX CX DX SP
? ? ? ? ? ? ?AH AL BH BL CH CL DH DL
? ? ? ? ? ? ?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 WORD NEAR
?
? ? ? ? ? ? ?near和far關鍵字并沒有提供段間尋址編程的能力,所有”far”操作都是
? ? ? ? ? ? ?都是通過顯式地使用以下指令得到的:指令: jmpi, jmpf, callf, retf,?
?????????????等等. Near關鍵字可以被用來強制使用80386的16位條件跳轉指令.?
?????????????'Dword'和'word'?能控制遠跳轉和遠調用的操作數的大小
?
? ? ?
普通指令
.
? ? ? ? ? ? ?這些指令和其他8086匯編程序所提供的指令大體上差不多,(譯注:后面的
?????????????看不明白了.我的英語功底啊~555) the main exceptions being a few '
?????????????Bcc' (BCC, BNE,??BGE, ?etc) ?instructions which are shorthands f
?????????????or a short branch plus a long jump and 'BR' which is the longest
?????????????unconditional jump (16 or 32 bit).
?
? ? ??
長分支
? ? ? ? ? ? ?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 BOUND 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 LOOP LOOPE
? ? ? ? ? ? ?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
? ? ? ? ? ? ?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 SUB TEST VERR ?VERW
? ? ? ? ? ? ?WAIT WBINVD 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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
