as86的資料實(shí)在是少之又少。翻譯了man文檔....不過(guò)翻譯的很爛,就當(dāng)練英文水平吧:) Linus為什么要用它來(lái)寫(xiě)boot程序呢,nnd..翻譯真是一項(xiàng)辛苦的工作啊...特別是對(duì)翻譯的東西還不了解的時(shí)候....
as86(1) as86(1) 名稱 概要格式 as86_encap prog.s prog.v [prefix_] [as86 options] 描述 命令行中的src參數(shù)可為‘-‘,代表對(duì)標(biāo)準(zhǔn)輸入進(jìn)行匯編。 as86_encap是一個(gè)腳本,使用了as86匯編程序,并且把生成的二進(jìn)制文件轉(zhuǎn)為一個(gè)C文件prog.v,用于被連接或者包含到程序里,例如引導(dǎo)塊安裝程序。prefix_參數(shù)定義一個(gè)加到源文件中所有定義的變量的前綴,缺省前綴是源文件名。... 選項(xiàng) -1 以16位代碼段運(yùn)行,當(dāng)使用了高于80186指令集的指令時(shí)警告。 -2 以16位代碼段運(yùn)行,當(dāng)使用了高于80286指令集的指令時(shí)警告。 -3 以32位代碼段運(yùn)行,不對(duì)任何指令發(fā)出警告信息(就算使用了486或586的指令) -a 使匯編程序部分兼容于Minix asld.交換了[]與()的用法,并且改變了一些16位跳轉(zhuǎn)與調(diào)用的語(yǔ)法("jmp @(bx)" 就成了一個(gè)合法的指令) -g 僅僅把global符號(hào)寫(xiě)入目標(biāo)或者符號(hào)文件中 -j 把所有短跳轉(zhuǎn)指令(譯注:8位跳轉(zhuǎn)稱為短跳轉(zhuǎn))換成相似的16位或者32位跳轉(zhuǎn)。并且把16位條件轉(zhuǎn)移指令換為一個(gè)條件短轉(zhuǎn)移命令與一個(gè)無(wú)條件長(zhǎng)跳轉(zhuǎn)組合 -O 匯編程序會(huì)做幾遍額外的工作,以嘗試支持向前引用。最多30遍。不推薦使用 -l 產(chǎn)生清單文件(list file),文件名寫(xiě)在選項(xiàng)后 -m 把宏展開(kāi)后寫(xiě)在清單文件里 -n 把模塊名寫(xiě)在選項(xiàng)之后(目標(biāo)模塊,而非源文件) -o 生成目標(biāo)文件,文件名寫(xiě)在選項(xiàng)之后 -b 生成純二進(jìn)制文件,文件名寫(xiě)在后面。這是一個(gè)沒(méi)有頭部的純二進(jìn)制文件(譯注:類似Dos下的com和sys)如果沒(méi)有-s選項(xiàng)程序?qū)?huì)在內(nèi)存地址0處開(kāi)始執(zhí)行 -s 生成一個(gè)ASCII碼符號(hào)文件,文件名寫(xiě)在選項(xiàng)后。很簡(jiǎn)單就能將其轉(zhuǎn)換,用于與-b選項(xiàng)生成的二進(jìn)制文件相關(guān)聯(lián)和封裝。如果二進(jìn)制文件不從地址0處開(kāi)始執(zhí)行。那么符號(hào)文件表中前兩項(xiàng)分別代表起始地址與結(jié)束地址 -u 假定未定義符號(hào)在未指定的段中被導(dǎo)入了 -w- 允許匯編程序輸出警告信息 -t n 把所有text段的數(shù)據(jù)放到段n+3中. AS86 資料 * 本行起始地址 ;或! 注釋起始符,另外,在一行起始處的“unexpected”字符被認(rèn)為是注釋(但是仍然會(huì)被顯示在終端上) $ 16進(jìn)制數(shù)的前綴, C風(fēng)格的前綴, 比如0x1234, 也可以使用. % 2進(jìn)制數(shù)的前綴. # 立即數(shù)的前綴. [ ] 間接尋址運(yùn)算符. 與MASM不同,匯編程序沒(méi)有標(biāo)識(shí)符的類型信息,每個(gè)標(biāo)識(shí)符僅僅代表是一個(gè)段地址和偏移地址。[]與立即數(shù)操作與傳統(tǒng)匯編程序一致 例: mov ax,bx jmp bx 寄存器尋址, jmp指令把bx寄存器中的值拷到程序計(jì)數(shù)器中 mov ax,[bx] jmp [bx] 簡(jiǎn)單的寄存器間接尋址, jmp指令把bx寄存器值指向的內(nèi)存單元的值拷到程序計(jì)數(shù)器中 mov ax,#1234 立即數(shù), 把1234賦值給ax寄存器 mov ax,1234 mov ax,_hello mov ax,[_hello] 直接尋址,內(nèi)存地址1234處的存儲(chǔ)字賦給ax寄存器。注意第三個(gè)指令并不十分嚴(yán)格,只是為了與asld保持兼容所以保留(譯注:若想將_hello標(biāo)識(shí)符表示的值作為立即數(shù)使用,需要加上#前綴 #_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] 變址尋址。兩種形式都可以,但是我認(rèn)為第一種要更正確些,但是我往往用第二種形式:) 條件判斷 IF, ELSE, ELSEIF, ENDIF 數(shù)字比較 IFC, ELSEIFC 字符串比較 (str1,str2) FAIL .FAIL 生成用戶錯(cuò)誤 段相關(guān) .TEXT .ROM .DATA .BSS LOC 數(shù)字表示段 0=TEXT, 3=DATA,ROM,BSS, 14=MAX. 連接器設(shè)定的段順序現(xiàn)在是0,4,5,6,7,8,9,A,B,C,D,E,1,2,3.段 0 以及所有3以上的段都假設(shè)為text段。注意64K限制對(duì)3-14的段不適用。 標(biāo)識(shí)符類型定義 EXPORT PUBLIC .DEFINE ENTRY 強(qiáng)制連接器在a.out文件里包含這個(gè)特殊符號(hào) .GLOBL .GLOBAL EXTRN EXTERN IMPORT .EXTERN NB: bin格式的文件不支持外部變量(譯注:關(guān)于這些格式,推薦參考一下NASM的手冊(cè)。純C論壇上有中文的NASM手冊(cè)) .ENTER 標(biāo)識(shí)出舊式bin格式(obs)的程序入口 數(shù)據(jù)定義 DB .DATA1 .BYTE FCB DW .DATA2 .SHORT FDB .WORD DD .DATA4 .LONG .ASCII FCC .ASCIZ Ascii 寫(xiě)到輸出的Ascii碼字符串,末尾添加nul 空間定義 .BLKB RMB .SPACE .BLKW .ZEROW COMM .COMM LCOMM .LCOMM 其他實(shí)用偽指令 .ALIGN .EVEN EQU 定義標(biāo)識(shí)符(譯注:可參考NASM或者MASM的EQU) SET 定義可重定義的標(biāo)識(shí)符 ORG .ORG BLOCK 定義匯編位置并且把原來(lái)的匯編位置入棧 ENDB 回到剛才棧里記錄的匯編位置 GET INCLUDE USE16 [cpu] USE32 [cpu] END 標(biāo)識(shí)出本文件停止匯編的地方 .WARN 警告信息開(kāi)關(guān) .LIST 清單 on/off (1,-1) .MACLIST 宏的使用形式如下 MACRO sax 未實(shí)現(xiàn)/未使用的 IDENT Define object identity string. SETDP Set DP value on 6809 MAP Set binary symbol table map number. 寄存器 操作數(shù)類型說(shuō)明 near和far關(guān)鍵字并沒(méi)有提供段間尋址編程的能力,所有”far”操作都是 普通指令. 長(zhǎng)分支 段間操作 段修飾符指令 字節(jié)操作指令 標(biāo)準(zhǔn)指令 浮點(diǎn) |
|
來(lái)自: 快樂(lè)學(xué)習(xí) > 《Linux》