版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第4章匯編語言程序設計4.1匯編語言程序格式及開發(fā)過程4.2匯編語言的基本語法和偽指令4.3基本結構程序設計舉例4.4子程序結構程序設計舉例4.5BIOS和DOS中斷24.1匯編語言程序格式及開發(fā)過程匯編語言——用指令的助記符、符號地址、標號等符號書寫程序的語言。源程序——用匯編語言編寫的程序。匯編——把源程序翻譯成機器語言程序的過程。匯編程序——完成匯編任務的程序。3匯編語言語句
三種基本語句:指令語句(指令性語句):
在匯編時產生一個目標代碼。偽指令語句(指示性語句):
無目標代碼,為匯編程序服務。宏指令語句4編輯文本編輯器,如EDIT.COM連接連接程序,如LINK.EXE調試調試程序,如DEBUG.EXE應用程序錯誤錯誤源程序:文件名.asm目標模塊:文件名.obj可執(zhí)行文件:文件名.exe匯編匯編程序,如MASM.EXE錯誤錯誤錯誤1.匯編語言程序的開發(fā)過程52.匯編語言源程序格式.MODELSMALL.STACK256.DATAMDB30HNDB20HPDB40H.CODE.STARTUPMOVBL,MMOVAL,BLSUBAL,NADDAL,P.EXIT0ENDep11)簡化格式(.EXE)
例:計算M-N+P6例:顯示10行HELLODATASEGMENTMESGDB'HELLO!',0AH,0DH,'$'DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACKBEG:MOVAX,STACK MOVSS,AX MOVSP,1002)完整格式1(.EXE)7
MOVAX,DATA MOVDS,AX MOVCX,10LAST:MOVAH,9 MOVDX,OFFSETMESG INT21H LOOPLAST
MOVAH,4CH INT21HCODEENDS
ENDBEGep283)完整格式2(.EXE)例:計算100+99+98+…+2+1datasegmentsumdw?dataendscodesegmentmainprocfar
assumecs:code,ds:data
pushdssubax,axpushaxmovax,datamovds,axxorax,ax movcx,100again:addax,cxloopagainmovsum,ax
retmainendpcodeendsendmainep394)簡化格式
(.COM).modeltiny;微型存儲模式.code;只有代碼段.startup;程序起始點=
ORG100Hmovdx,offsetstringmovah,9;顯示信息int21hmovah,01h;等待按鍵int21hmovah,02h;響鈴movdl,07hint21h.exit0;程序結束點,返回DOSStringdb‘Pressanykeytocontinue!$’end;匯編結束Ep4105)完整格式(.COM)C_SEGSEGMENT ASSUMECS:C_SEG,DS:C_SEG,ES:C_SEG ORG100HBEGIN: JMPSTARTMAN DB?WOMAN DB?NUM DW6START: MOVCX,NUM MOVDX,0INPUT: MOVAH,1 INT21H11
CMPAL,'1' JZMANCNT CMPAL,'0' JZWOMANCNT JMPINPUTMANCNT:INCDL JMPNEXTWOMANCNT:INCDHNEXT:LOOPINPUT MOVMAN,DLMOVWOMAN,DH MOVAH,4CH INT21HC_SEGENDS ENDBEGINep5124.2匯編語言的基本語法和偽指令1.匯編語言的基本語法1)標號與變量標號:是一條指令語句的符號地址??勺鳛檗D移類指令的操作數(shù),即轉移地址。變量:存放在某些存儲單元中的值。13①段屬性標號和變量對應存儲單元的段地址②偏移屬性標號和變量對應存儲單元的偏移地址③類型屬性標號的類型可以是NEAR和FAR,分別表示段內或段間變量的類型可以是BYTE、WORD和DWORD等地址屬性標號和變量具有三種屬性14變量、標號的命名一般最多由31個字母、數(shù)字及規(guī)定的特殊符號(.、_、$、?、@)組成,不能以數(shù)字開頭.只能位于名字首$、?不能單獨作為名字不區(qū)別標識符中的字母大小寫不能使用匯編語言的保留字15保留字保留字(ReservedWord)是匯編程序已經利用的標識符,主要有:指令助記符——例如:MOV、ADD偽指令助記符——例如:DB、EQU運算符——例如:OFFSET、PTR寄存器名——例如:AX、CS預定義符號——例如:@data162)常數(shù)常數(shù)表示一個固定的數(shù)值數(shù)值常數(shù)字符串常數(shù)
用引號括起來的單個字符或多個字符,其數(shù)值是每個字符對應的ASCII碼的值。符號常數(shù)
利用一個標識符表達的一個數(shù)值。例:DWriteCharequ2173)運算符算術運算符邏輯運算符關系運算符分析運算符綜合運算符18+(加)-(減)*(乘)/(除)MOD(求模)①算術運算符②邏輯運算符AND(與)
OR(或)
XOR(異或)
NOT(非)19EQ(相等)NE(不等)LT(小于)GT(大于)LE(小于或等于)GE(大于或等于)③關系運算符④分析運算符OFFSETSEGTYPELENGTHSIZE20OFFSET格式:OFFSET變量或標號功能:取其后變量或標號的偏移地址。例如:MOVBX,OFFSETBUFSEG格式:SEG變量或標號功能:取其后變量或標號所在段的段首址。例如:
MOV AX,SEGABCMOVDS,AX21PTRTHIS⑤綜合運算符例如:moval,byteptrw_var ;
jmpfarptrn_label ;類型名PTR名字/標號使名字或標號具有指定的類型類型名可以是:BYTE/WORD/DWORD
或者是:NEAR/FAR222.偽指令1)處理器選擇偽指令2)等值偽指令3)定義存儲單元偽指令4)段定義偽指令5)過程定義偽指令6)源程序結束偽指令231)處理器選擇偽指令.8086.386.386P.586.586P242)等值偽指令EQU功能:給符號名定義一個值,或別的符號名。格式:符號名EQU表達式例:
PORT1EQU100PORT2EQUPORT1+10COUNTEQUCXADEQUADD特點:不能重復定義。不分配存儲單元。253)定義存儲單元偽指令DB,DW,DD,DQ,DT。格式:
[變量名]偽指令助記符表達式[,…]功能:定義內存數(shù)據存儲區(qū),類型由偽指令助記符確定,初值由表達式給定。26DB——定義字節(jié)偽指令DW——定義字偽指令DD——定義雙字偽指令DQ——定義4字偽指令DT——定義10字節(jié)偽指令27數(shù)值表達式字符串表達式地址表達式(適用DW和DD偽指令)?表達式帶DUP的表達式表達式的形式28data segment X db'a',-5 db2dup(100),?Y db'ABC'data endsmoval,XdecX+1movY,al29data segment count dw8000h,?,'AB'number dw64harray dw2dup(0)data ends304)段定義偽指令完整段定義偽指令段名 segment定位組合使用'類別' ... ;語句序列段名 endsSEGMENT定義一個邏輯段的開始ENDS表示一個段的結束4個關鍵字用于確定段的各種屬性31段寄存器說明偽指令指定的段寄存器來尋址對應的邏輯段ASSUME段寄存器:段名[,段寄存器名:段名,...]注意:沒有為段寄存器設定初值。32
存儲模式和簡化段定義偽指令存儲模式偽指令.MODEL存儲模式.model必須位于所有段定義語句之前存儲模式決定一個程序的規(guī)模,確定進行子程序調用、指令轉移和數(shù)據訪問的缺省屬性MASM的存儲模式
①TINY②SMALL③COMPACT④MEDIUM
⑤LARGE⑥HUGE⑦FLAT33簡化段定義偽指令.STACK[大小] ;堆棧段開始。參數(shù)指定字節(jié)數(shù),默認是1KB.DATA ;數(shù)據段開始.CODE[段名] ;代碼段開始一個邏輯段的開始,自動結束前面的一個段段名稱使用MASM預定義符號例如:@data表示由.data定義的數(shù)據段的段名345)過程定義偽指令過程調用語句:CALL過程名過程返回語句:RETPROC_NAMEPROC[NEAR]/FAR...RETPROC_NAMEENDP356)源程序結束偽指令END[標號]指示匯編程序結束匯編過程源程序的最后必須為END標號用于指定程序開始執(zhí)行點,連接程序將據此設置CS:IP值采用.startup不用“end標號”,而使用“end”。364.3基本結構程序設計舉例.modelsmall.stack256.dataASCIIdb30h,31h,32h,33h,34h,35hdb36h,37h,38h,39hdb41h,42h,43h,44h,45h,46hHexdb0bh例1:實現(xiàn)一位16進制數(shù)轉換為ASCII碼顯示。
(查表法)37.code.startupmovbx,offsetASCIImoval,hexandal,0fhxlatmovdl,almovah,2int21h.exit0end38例2:編寫計算下面函數(shù)值的程序。
1 X>0Y=0 X=0-1 X39DATASEGMENTX DB-10Y DB?DATAENDSCODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX40
CMP X,0 JGE A1 MOV Y,-1 JMP EXITA1:JG A2 MOV Y,0 JMP EXITA2:MOV Y,1 EXIT:MOV AH,4CHINT 21HCODEENDSEND START41
例3:編程統(tǒng)計BUF字單元中1的個數(shù)。42DATA SEGMENTBUF DW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AXMOV AX,BUFMOVCL,043LOPA: AND AX,AX JZ EXIT SHL AX,1 JNC LOPA INC CL JMP LOPAEXIT: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END START44
例4:編程實現(xiàn)將BUF字單元的二進制數(shù)以十六
進制形式顯示在屏幕上。DATASEGMENTBUFDW2468HDATAENDSCODESEGMENTMAINPROCFAR ASSUMECS:CODE,DS:DATA PUSHDS SUBAX,AX PUSHAX45
MOVAX,DATA MOVDS,AX MOVBX,BUF MOVCH,4RT: MOVCL,4 ROLBX,CL MOVAL,BL ANDAL,0FH ADDAL,30H CMPAL,3AH JLPRT
ADDAL,07HPRT: MOVDL,AL MOVAH,2 INT21H DECCH JNZRT RETMAINENDPCODEENDS ENDMAIN46例5:在以BUF為首址的字存儲區(qū)中存放有N個有符號數(shù),現(xiàn)需將它們按大到小的順序排列在BUF存儲區(qū)中,試編寫其程序。數(shù) 10 8 16 90 32第一遍 10 16 90 32 8第二遍 16 90 32 10 8第三遍 90 32 16 10 847DATASEGMENTBUFDW3,-4,6,7,9,2,0DW-8,-9,-10,20NEQU($-BUF)/2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA48START: MOV AX,DATA MOV DS,AX MOV CX,N DEC CXLOOP1: MOV DX,CX MOV BX,0LOOP2: MOV AX,BUF[BX] CMP AX,BUF[BX+2] JGE L XCHGAX,BUF[BX+2] MOV BUF[BX],AX49L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START504.4子程序結構程序設計舉例例:十進制到十六進制轉換的程序。程序要求從鍵盤取得一個十進制數(shù),然后把該數(shù)以十六進制的形式在屏幕上顯示出來。開始調用DECIBIN調用CRLF調用BINIHEX調用CRLF結束從鍵盤取得十進制數(shù),保存到BX中顯示回車和換行用十六進制形式顯示BX中的數(shù)51DecihexsegmentMainprocfarassumecs:Decihexpushdsxorax,axpushax
calldecibincallcrlfcallbinihexcallcrlf
retMainendp
Decibinprocnearmovbx,0Newchar:movah,1int21hsubal,30hjlexitcmpal,9jgexitcbw
xchgax,bxmovcx,10mulcxxchgax,bxaddbx,ax
jmpnewcharExit:retDecibinendp
52Binihexprocnearmovch,4Rotate:movcl,4rolbx,clmovdl,blanddl,0fhadddl,30hcmpdl,3ahjlprintadddl,7hPrint:movah,2int21hdecchjnzrotateretBinihexendpCrlfprocnear
movah,2movdl,0dhint21hmovdl,0ahint21hretCrlfendpDecihexendsendMain534.5BIOS和DOS中斷DOS有一百多個子程序,可供調用,包含:磁盤的讀寫、管理;內存管理;基本輸入輸出管理。用軟中斷指令調用。類型號:20~27H系統(tǒng)功能調用:INT21H1.DOS中斷和DOS系統(tǒng)功能調用1)DOS中斷542)DOS系統(tǒng)功能調用單字符輸入(1)單字符顯示(2)顯示字符串(9)字符串輸入(10)結束調用(4CH)
DOS系統(tǒng)功能調用的方法:①設置的入口參數(shù)。②功能號
AH。③INT21H指令自動轉入中斷子程序入口。④中斷子程序運行完畢,獲得出口參數(shù)。55字符串輸入(功號為10)功能:從鍵盤接收字符串到內存緩沖區(qū)。要求:先定義一個緩沖區(qū):第一字節(jié):指出緩沖區(qū)能容納字符個數(shù)。第二字節(jié):保留以用作填寫輸入字符數(shù)。第三字節(jié):開始存放接收字符。
DS:DX指向緩沖區(qū)。56例:反向顯示輸入的字符串。DATASEGMENTINFO1DB0DH,0AH,‘INPUTSTRING:$’INFO2DB0DH,0AH,‘OUTPUTSTRING:$’BUFADB80 DB?
DB 80DUP(0)BUFBDB81DUP(0)DATAENDS57COD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽理工大學《計算機網絡》2021-2022學年期末試卷
- 沈陽理工大學《工藝美術設計》2022-2023學年第一學期期末試卷
- 沈陽理工大學《單片機接口技術》2023-2024學年期末試卷
- 合同編通則與新公司法銀行業(yè)務
- 2024標準幼師聘用合同范本
- 期末復習檢測提升卷九 -2022-2023學年語文五年級上冊(部編版)
- 2024小產權房屋買賣合同協(xié)議書樣本
- 2024貨物采購合同范本
- 2024快遞承包合同,快遞承包協(xié)議
- 2024中學門衛(wèi)勞動合同范本
- 企業(yè)反腐倡廉培訓課件
- 老舊樓加裝電梯方案
- 2024城市管理工作情況調研報告(十篇)
- 索道橋懸索橋施工方案樣本
- 醫(yī)療影像技術部門KPI設計
- 高分子職業(yè)生涯規(guī)劃
- 人工流產術健康宣教課件
- 老年高血壓管理指南
- ?;愤\輸安全檢測與監(jiān)控
- 2024年耐高溫尼龍行業(yè)分析報告及未來發(fā)展趨勢
- 碳咨詢服務行業(yè)報告
評論
0/150
提交評論