4-第4章-匯編語(yǔ)言程序格式_第1頁(yè)
4-第4章-匯編語(yǔ)言程序格式_第2頁(yè)
4-第4章-匯編語(yǔ)言程序格式_第3頁(yè)
4-第4章-匯編語(yǔ)言程序格式_第4頁(yè)
4-第4章-匯編語(yǔ)言程序格式_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章匯編語(yǔ)言程序格式主要內(nèi)容:匯編程序功能偽操作匯編語(yǔ)言程序格式匯編語(yǔ)言程序的上機(jī)過程匯編語(yǔ)言1.匯編程序功能編輯程序匯編程序program.asmprogram.obj連接程序program.exe匯編程序的主要功能: 檢查源程序,給出出錯(cuò)信息 產(chǎn)生目標(biāo)文件(.obj)和列表文件(.lst) 展開宏指令匯編語(yǔ)言2.偽操作(偽指令)是匯編程序?qū)υ闯绦蜻M(jìn)行匯編時(shí)處理的操作,完成 處理器選擇、存儲(chǔ)模式定義、數(shù)據(jù)定義、存儲(chǔ)器分配、指示程序開始結(jié)束等功能。 處理器選擇偽操作 段定義偽操作 程序開始和結(jié)束偽操作 數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 表達(dá)式賦值偽操作 地址計(jì)數(shù)器與對(duì)準(zhǔn)偽操作 基數(shù)控制偽操作匯編語(yǔ)

2、言處理器選擇偽操作:選擇 8086 指令系統(tǒng)默認(rèn)選擇 80286 指令系統(tǒng)選擇保護(hù)模式下的 80286 指令系統(tǒng)選擇 80386 指令系統(tǒng)選擇保護(hù)模式下的 80386 指令系統(tǒng)選擇 80486 指令系統(tǒng)選擇保護(hù)模式下的 80486 指令系統(tǒng)選擇 Pentium 指令系統(tǒng)選擇保護(hù)模式下的 Pentium 指令系統(tǒng).8086.286.286P.386.386P.486.486P.586.586P匯編語(yǔ)言段定義偽操作:完整的段定義偽操作DS ESSS CS文件頭裝入模塊EXE 程序的內(nèi)存映象圖匯編語(yǔ)言PSPdatasegment; 定義數(shù)據(jù)段dataendsextrasegment; 定義附加段ex

3、traendscodesegment; 定義代碼段assume cs:code, ds:data, es:extrastart:movax, datamovds, ax; 段地址段寄存器codeendsendstart匯編源程序的其它形式:匯編語(yǔ)言codesegment mainprocfarassume start:movax,4c00h int21hmainendp codeendsendstartcodesegment mainprocfarassume start:pushdsmovax, 0pushaxret mainendp codeendsendstart帶堆棧段的匯編源程序:d

4、atasegment ends segment dwtos ends segment proc assumedatastack100labeldup (?)wordstack code mainfarcs:code, ds:data,ss:stackstart:mov mov mov push sub push mov mov ret endp ends endax,ss,sp, ds ax, ax ax,ds,stack ax offsettosDSESSSaxdata axCSmain code匯編語(yǔ)言startPSP堆棧段的情況:stacksegment dwtosends100labe

5、ldup (?)wordstackmov mov movax,ss,sp,stack ax offsettos100字push sub pushds ax, axaxtos 00C8H sp匯編語(yǔ)言datasegmentendsdatastack100labelstacksegment dwtosendsdup (?)wordstackcodestart:segmentpush sub push mov movretds ax, ax ax,ds,axDSESdata axSSCScodeends endstart匯編語(yǔ)言PSPint main()int ar0=0,1,2;int ar1=1

6、,2,3;int ar2=2,3,4;int *p=ar0,ar1,ar2;ar20012FF5C0012FF600012FF64ar10012FF680012FF50p0012FF6C0012FF540012FF700012FF58ar00012FF740012FF78匯編語(yǔ)言0012FF7C0120012FF740012FF680012FF5C123234完整段定義的格式:段名SEGMENT段名ENDS 定位類型 組合類型 使用類型 類別; 語(yǔ)句序列(1)定位類型 align_typePARABYTEWORDDWORDPAGE(2)組合類型 combine_typePRIVATEPUBLI

7、CCOMMONSTACKATexp(3)使用類型 use_typeUSE16USE32(4)類別class匯編語(yǔ)言例:; proadd1.asmextrndataproadd segment ary count sumends: farcommondw dwdw1,2,3,4,5,6,7,8,9,1010?datacode1mainsegment proc assume push sub push movmov call ret endp endsendfarcs:code1, dsds:datastart:ax, ax ax,ds,faraxdata axptr proaddmaincode

8、1匯編語(yǔ)言start; proadd2.asmpublicdataproadd segment ary count sumendscommondw dwdw1,2,3,4,5,6,7,8,9,1010?datacode2proaddsegment proc assume mov mov endp endsendfar cs:code2,ds:data ax, datads, axproaddcode2匯編語(yǔ)言存儲(chǔ)模式與簡(jiǎn)化段定義偽操作(1)MODEL 偽操作. MODEL 存儲(chǔ)模式 ,語(yǔ)言類型 ,操作系統(tǒng)類型 ,堆棧選項(xiàng) 存儲(chǔ)模式:tinysmallmediumcompactlargehuge

9、flat(2)簡(jiǎn)化的段定義偽操作.code name.data.data?.fardata name.fardata? name.const.stack size匯編語(yǔ)言.modelsmall.stack100H.data.code.startup.exit 0 end匯編語(yǔ)言.model small.data.code.startup.exit 0 end.model small.data.codestart: movax, datamovds, axmovax, 4c00h int21h.model smallendstart.const.data.codestart: movax, DG

10、ROUPmovds, axmovax, 4c00h int21hendstart匯編語(yǔ)言.model small.data.code.startup.exit 0 end段組定義偽操作匯編語(yǔ)言dseg1segmentwordpublicdatadseg1endsdseg2segmentwordpublicdatadseg2endsdatagroupgroupdseg1, dseg2csegsegmentparapubliccodeassumecs:cseg, ds:datagroupstart:movax, datagroup movds, axmovax, 4c00h int21hcsege

11、ndsendstartstart:mov movmov movmov mov movworddwdata1segment const1 endsax, datagroup ds, axax, const1 var1, ax100data1worddwdata2segment var1 ends?bx, offset var1 bx, offset data1 bx, offset data2; (bx) = 2; (bx) = 2; (bx) = 4data2datagroupgroupdata1, data2assumeds:data2movax, data2codesegmentassum

12、ecs:code, ds:datagroupmov mov movmovds, ax ax, var1bx, offset var1ax, 4c00h; (bx) = 2int21h匯編語(yǔ)言codeendsend startstart:movmovmov movmov mov movdata1segment const1 endsax, datagroupds, axax, const1 var1, axbx, offset var1 bx, offset data1 bx, offset data2dw100data1data2segment var1 endsdw?; (bx) = 0;

13、(bx) = 2; (bx) = 2data2datagroupgroupdata1, data2assumeds:data2 movax, data2 movds, axmovax, var1movbx, offset var1movax, 4c00hcodesegmentassumecs:code, ds:datagroup; (bx) = 0int21h codeendsend start匯編語(yǔ)言程序開始和結(jié)束偽操作:TITLE NAMEENDtext module_name label . STARTUP. EXIT return_value 匯編語(yǔ)言數(shù)據(jù)定義及存儲(chǔ)器分配偽操作:操作數(shù)

14、 , 操作數(shù) , ; 注釋 變量助記符助記符:DBDWDDDFDQDTDATA_BYTE DATA_WORD DATA_BYTEDATA_WORDDBDW10,4, 10H,?100, 100H, -5,?匯編語(yǔ)言0AH04H10H-64H00H00H01HFBHFFH-ARRAY ARRAYDB DBDWHELLO ABABPAR1PAR2 ADDR_TABLEDWDW DW100,200300,400PAR1,PAR2VARDBDB100 DUP (?)2 DUP (0,2 DUP(1,2),3)匯編語(yǔ)言48H45H4CH4CH4FH41H42H42H41HOPER1OPER2DB DWM

15、OV MOV?,?,?;字節(jié)指令;字指令OPER1,OPER2,00OPER1OPER2DB DWMOV MOV1, 21234H, 5678HOPER1OPER2AX,AL,OPER1+1OPER2類型不匹配WORD PTRBYTE PTRMOVMOVAX,AL,OPER1+1OPER2(AX)=3402H(AL)=34H匯編語(yǔ)言01H02H34H12H78H56HLABEL 偽操作:nameLABEL typeBYTE_ARRAY WORD_ARRAYBYTE_ARRAY WORD_ARRAYtosLABEL DW 50LABELBYTE DUP (?)WORD50字tos0064H匯編語(yǔ)

16、言表達(dá)式賦值偽操作:EQU表達(dá)式名表達(dá)式B ALPHABETAEQU EQUEQUBP+8 9ALPHA+18“ = ” 偽操作 (允許重復(fù)定義)EMPEMP= 7= EMP+ 1匯編語(yǔ)言地址計(jì)數(shù)器與對(duì)準(zhǔn)偽操作:地址計(jì)數(shù)器 $ :保存當(dāng)前正在匯編的指令的地址; 跳過 8 個(gè)字節(jié)的存儲(chǔ)區(qū); 轉(zhuǎn)向地址是 JNE 的首址 + 6ORGJNE$+8$+60074ARRAY 0078$ 用在偽操作的參數(shù)字段:表示地址計(jì)數(shù)器的當(dāng)前值A(chǔ)RRAYDW1,2,$+4,3,4,$+4007E匯編語(yǔ)言01H00H02H00H7CH00H03H00H04H00H82H00HORG 偽操作:SEG1SEGMENTORG

17、 VAR1 ORG VAR2 ORG VAR3ENDS10DW 20 DW$+8DW1234H5678H1357HSEG1匯編語(yǔ)言O(shè)RG100HSTART:BUFFERDB8 DUP (?)BUFFERLABELBYTEORG$+8;使下一地址從偶地址開始EVENADBEVEN DWmorningB2DUP(?)ALIGNboundaryALIGNALIGN42; EVEN匯編語(yǔ)言基數(shù)控制偽操作:; 規(guī)定無標(biāo)記數(shù)的基數(shù). RADIX表達(dá)式匯編語(yǔ)言.RADIX16 MOVBX, 0FFMOVBX, 178DMOVBX, 0FFH MOVBX, 1783.匯編語(yǔ)言程序格式源程序的每條語(yǔ)句可表示為:

18、 名 字 操 作操作數(shù); 注釋標(biāo)號(hào)變量指 令 偽指令宏指令寄存器標(biāo)號(hào)變量說明程序或語(yǔ)句的功能常數(shù)表達(dá)式標(biāo)號(hào)/變量:段值、偏移量、類型三種屬性表達(dá)式:數(shù)字表達(dá)式地址表達(dá)式匯編語(yǔ)言表達(dá)式操作符:(1) 算術(shù)操作符: + 、 - 、 *、 、 modMOVDX, BLOCK+(6-1)*2ARRAYARYENDDW DWMOV1,2,3,4,5,6,7?CX,(ARYEND-ARRAY)/2; 符號(hào)地址常數(shù)有意義;*時(shí)意義不明確;ADDAX, BLOCK+2MOVAX, BX+1匯編語(yǔ)言(2) 邏輯和移位操作符: AND、OR、XOR、NOT、SHL、SHROPR1OPR2EQUEQU AND257

19、AX, OPR1 ANDOPR2; AND AX, 1MOVAX,0FFFFHSHL2;MOVAX,0FFFCHINOUTAL,PORT_VALPORT_VAL AND 0FEH,AL匯編語(yǔ)言(3) 關(guān)系操作符: EQ、NE、LT、LE、GT、GE計(jì)算結(jié)果為邏輯值:真假0FFFFH0000HMOVFID,(OFFSETY-OFFSETX)LE128若 128 (真)若 128 (假)匯編結(jié)果:MOV匯編結(jié)果:MOVFID, -1FID, 0匯編語(yǔ)言X:Y:(4) 數(shù)值回送操作符: OFFSET、SEG、TYPE、LENGTH、SIZEOFFSET / SEG變量 / 標(biāo)號(hào)功能:回送變量或標(biāo)號(hào)的

20、偏址 / 段址變量 / 標(biāo)號(hào) / 常數(shù)TYPE常數(shù)0DB DW DD DF DQ DTNEAR FAR1246810-1-2變量LENGTH功能:回送由 DUP 定義的變量的單元數(shù),其它情況回送1變量SIZE功能:LENGTH * TYPE匯編語(yǔ)言ARRAYTABLEDWDB100DUP(?)ABCDADD ADD MOV MOV MOVMOVSI SI CX CX CXCX,TYPE TYPE LENGTH LENGTH SIZESIZEARRAY TABLE ARRAY TABLE ARRAYTABLE;ADDSI,2;ADDSI,1;MOVCX,100;MOVCX,1;MOVCX,200

21、;MOVCX,1匯編語(yǔ)言(5) 屬性操作符: PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD類型PTR 表達(dá)式MOV MOVJMPWORD PTR BX, 5 ES:BX, ALSHORT NEXT段操作符SHORT 標(biāo)號(hào)THIS類型TANEXTEQUEQUTHISTHISBYTEFARCONS MOVMOVEQU AH,AL,1234H HIGHLOWCONSCONS匯編語(yǔ)言4.匯編語(yǔ)言程序的上機(jī)過程用 MASM 6.11 和 CodeView 匯編和調(diào)試匯編語(yǔ)言程序在 MASM6.11 中,Microsoft 公司提供了程序員工作平臺(tái)PWB(pr

22、ogrammers work bench),這是一個(gè)集成化開發(fā)環(huán)境, 程序員可以方便地完成匯編語(yǔ)言源程序的編輯、匯編、連接調(diào)試和執(zhí)行等工作。MASM6 提供的調(diào)試工具是 CodeView,CodeView 是一個(gè)源碼級(jí)調(diào)試工具,能支持 16 位和 32 位指令的調(diào)試。其用戶界面是多窗口全屏幕的,用戶可方便地使用菜單和鼠標(biāo)來調(diào)試程序。匯編語(yǔ)言上機(jī)步驟:1設(shè)置環(huán)境變量在MASM611BINR 的目錄下,執(zhí)行new-vars.bat 即可建立環(huán)境參數(shù)和搜索路徑,然后執(zhí)行pwb.exe 即可進(jìn)入PWB 的主窗口。用其文件File 菜單中的Exit 命令可退出PWB。匯編語(yǔ)言23用 File 菜單下的有

23、關(guān)命令建立 asm 文件用 Project 和Options 菜單下的某些命令建立匯編語(yǔ)言程序運(yùn)行環(huán)境建立工程文件,設(shè)置所建立的可執(zhí)行文件類型的Build Options,設(shè)置編譯器選項(xiàng)的Language Options,設(shè)置連接器選項(xiàng)的Link Options,設(shè)置調(diào)試器選項(xiàng)的CodeView Options 等。由于用戶使用時(shí)大部分選項(xiàng)都可采用PWB 提供的默認(rèn)值,因而不必作任何修改。但對(duì)于匯編語(yǔ)言程序,還有必要對(duì)MASM的選項(xiàng)作出某些選擇。4用 Project 菜單下的有關(guān)命令對(duì)源文件進(jìn)行匯編和連接Compile FileBuild Build All編譯(匯編)當(dāng)前的源文件,生成目標(biāo)文

24、件連接目標(biāo)文件,生成可執(zhí)行文件匯編當(dāng)前源文件,連接工程中的所有目標(biāo)文件,生成可執(zhí)行文件56用 Run 菜單下的有關(guān)命令執(zhí)行程序用 CodeView 調(diào)試程序匯編語(yǔ)言匯編語(yǔ)言datasegment string1 string2 mass1 mass2endsmatch.asmdb db dbdbthamks youthanks youmatch., 13, 10, $no match!, 13, 10,$datacodemainsegment procassumefarcs:code,ds:data,es:datastart:push subpushds ax,axaxmov movmovax

25、,ds,es,data axaxlea lea cldmovsi,di,string1string2匯編語(yǔ)言cx,10repzcmpsbatchleadx, mass2 jmpshortdispmatch: leadx, mass1 disp:movah, 09int21hretmainendpcodeendsendstart匯編語(yǔ)言匯編語(yǔ)言匯編語(yǔ)言匯編語(yǔ)言match.lst(1)match.lst(2)匯編語(yǔ)言匯編語(yǔ)言match.lst(3)match1.asmdatasegment string1 mass1 mass2endsdb dbdbthamks youmatch., 13, 10

26、, $no match!,13,10,$dataextrasegment string2endsdbthanks youextracodemainsegmentproc assumefarcs:code, ds:data,es:extrastart:mov movax,ds,dataaxmov movends endax,es,extraaxcode匯編語(yǔ)言start匯編語(yǔ)言match2.asm.modelsmall.datastring1 string2 mass1mass2db db dbdbthamks youthanks you match., 13, 10, $nomatch!,13,10,$.code mainstart:procfarmov mov movendp endax,ds,es,dataax axmainstart匯編語(yǔ)言匯編語(yǔ)言例:.model.code org jmptiny100hmainbegin:;*num1 num2sumdw dwdw1199H1166H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論