版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第四章、匯編語言程序設(shè)計舉例匯編語言程序的上機過程匯編語言程序的上機過程為運行匯編語言程序需要在磁盤上建立如下文件為運行匯編語言程序需要在磁盤上建立如下文件1、編輯程序,如、編輯程序,如edit.exe2、匯編程序,如、匯編程序,如masm.exe3、連接程序,如、連接程序,如link.exe4、調(diào)試程序,如、調(diào)試程序,如debug.exe一、利用編輯程序建立一、利用編輯程序建立 asm 文件文件 1、進入、進入dos環(huán)境環(huán)境 一、一、 用用edit程序編輯程序編輯asm文件文件 二、用二、用masm程序產(chǎn)生程序產(chǎn)生obj 文件文件 匯編程序的版本號匯編程序的版本號是是list文件,稱為列表文
2、件。該文文件,稱為列表文件。該文件給出源程序和機器語言程序清單,件給出源程序和機器語言程序清單,并給出符號表,該文件可有可無。并給出符號表,該文件可有可無。是是crf文件,該文件用來產(chǎn)生交叉文件,該文件用來產(chǎn)生交叉引用表引用表ref。對一般的程序不需要。對一般的程序不需要建立此文件。建立此文件。 三、用三、用link程序產(chǎn)生程序產(chǎn)生exe 文件文件 是連接程序的列表文件,又稱為連是連接程序的列表文件,又稱為連接映像,給出每個段在存儲器的分接映像,給出每個段在存儲器的分配情況。配情況。 是程序中需要的庫文件,如無特是程序中需要的庫文件,如無特殊需要,則應(yīng)對殊需要,則應(yīng)對Lis:回答:回答 四、程
3、序的執(zhí)行四、程序的執(zhí)行 匯編語言程序設(shè)計舉例匯編語言程序設(shè)計舉例 1、直線型程序設(shè)計、直線型程序設(shè)計 四、程序設(shè)計舉例n1、直線運行程序n例如:求兩個數(shù)的平均值。兩個數(shù)分別放在X和Y單元中,結(jié)果放在Z單元中。設(shè)兩個數(shù)n分別為32和64n編程如下:DATE segment X DB 20H Y DB 40H X20Y40Z DB ? DATE ENDS CODE segment ASSUME CS:CODE,DS:DATE START:MOV AX,DATE MOV DS,AX MOV AL,X MOV AL,X ADD AL,Y MOV AH,00H ADC AH,00H MOV BL,02H
4、 DIV BL MOV Z,AL CODE ENDS END START n例2、內(nèi)存中自TABLE開始的七個單元中,連續(xù)存放著自然數(shù)06的平方值。任意一個數(shù)X(0X6)在FIRST單元中,要求查表找出X的平方值,把結(jié)果送入SECOND單元。TABLE00010409101924FIRSTXSECOND-nDATA SEGMENTnTABLE DB 0,1,4,9,16,25,36nFRST DB 4nSECOND DB ?nDATA ENDSnCODE SEGMENTnASSUME CS:CODE,DS:DATAn MOV AX,DATAn MOV DS,AXn MOV BX,OFFSET
5、TABLE n MOV AL,F(xiàn)IRST nXLATnMOV SECOND,ALnCODE ENDSnEND 常用系統(tǒng)功能調(diào)用常用系統(tǒng)功能調(diào)用01H號讀取鍵盤字符并回顯(單字符)調(diào)用方式MOV AH,01HINT 21H 說明等待按鍵 若是CTRL-BREAK則退出 其他鍵,將其ASCLL碼送AL寄存器,同時送顯示器顯示 02H號顯示字符 調(diào)用方式MOV AH,02HINT 21H DL 要顯示字符的ASCLL碼說明將置入DL寄存器的字符送顯示器顯示 08H號鍵盤輸入單字符不顯示 調(diào)用方式MOV AH,08HINT 21H 說明將輸入的字符送AL寄存器 09H號字符串輸出顯示 調(diào)用方式DX 要
6、顯示字符串的首地址MOV AH,08HINT 21H 說明要顯示的字符串一般定義在數(shù)據(jù)段 該字符串必須以定界符“$”為結(jié)束標志 “$” 字符不顯示 STRING DB How are you,$ 例如:例如: MOV DX,OFFSET STRING MOV AH,09H INT 21H 0AH號字符串輸入 調(diào)用方式DX 接收字符串緩沖區(qū)的首地址MOV AH,0AHINT 21H 說明從鍵盤接收字符串到內(nèi)存指定的緩沖區(qū),直到回車為止 緩沖區(qū)的第一個字節(jié)為指定緩沖區(qū)的字符個數(shù) 緩沖區(qū)的第二個字節(jié)保留,填寫實際輸入字符的個數(shù) 緩沖區(qū)的第三個字節(jié)開始存入輸入的字符 例如:例如: DATA SEGME
7、NT BUF DB 80 DB ? DB 80DUP(?) DATA ENDS 4CH號結(jié)束程序返回操作系統(tǒng) 調(diào)用方式MOV AH,4CHINT 21H 2、分支程序設(shè)計、分支程序設(shè)計分支程序:根據(jù)某種判斷結(jié)果,從兩個以上的程序中選擇一個執(zhí)行。條件分支段1分支段2或條件分支段2n例3、比較兩個無符號數(shù)的大小,把大數(shù)存入MAX單元。DATE segment SHUJU DB 45,96 MAX DB ? DATE ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA MOV AX,DATA MOV DS,AX MOV AL,SHUJU CMP AL,SHUJU+1
8、 JA BRANCH BRANCH:MOV MAX, ALMOV AL, SHUJU+1 CODE ENDS END MOV AH, 4CH INT 21H 從鍵盤輸入從鍵盤輸入0-7中的一個數(shù),然后將數(shù)字轉(zhuǎn)換成對應(yīng)中的一個數(shù),然后將數(shù)字轉(zhuǎn)換成對應(yīng)位為位為1的的8位二進制數(shù)存入位二進制數(shù)存入AL中,根據(jù)中,根據(jù)AL中哪一位為中哪一位為1轉(zhuǎn)入相應(yīng)的分支程序處,實現(xiàn)散轉(zhuǎn),設(shè)轉(zhuǎn)入相應(yīng)的分支程序處,實現(xiàn)散轉(zhuǎn),設(shè)8個分支程序個分支程序分別顯示分別顯示A-H中的一個中的一個 。 分析:分析: 輸入輸入0 AL0000 0001 顯示顯示A 輸入輸入1AL0000 0010 顯示顯示B 輸入輸入2AL000
9、0 0100 顯示顯示C 輸入輸入3AL0000 1000 顯示顯示D 輸入輸入7AL1000 0000 顯示顯示H實際:實際: 輸入輸入0AL0011 00000000 0001 輸入輸入10011 00010000 0010AL 輸入輸入30011 00110000 1000AL 輸入輸入70011 01111000 0000AL設(shè)置初值寄存器設(shè)置初值寄存器DL0000 0001移動次數(shù)由移動次數(shù)由AL低低4位得到位得到送送CL寄存器寄存器移動移動 DL后送顯示后送顯示 Code segmentAssume cs:code Start:Mov dl,01h shuru:mov ah,1In
10、t 21hCmp al,qJz exitAnd al,0fhCmp al,0Jz shuchuMov cl,alShl dl,clShuchu:cmp dl,01hJz chuaCmp dl,02h Cmp dl,02hJz chub cmp dl,04hJz chuc cmp dl,08hJz chudCmp dl,10hJz chueCmp dl,20hJz chufCmp dl,40hJz chugCmp dl,80hJz chuhJmp exitchua:mov dl,aJmp xianshiChub:mov dl,bJmp xianshiChuc:mov dl,cJmp xiansh
11、ichud:mov dl,dJmp xianshiChue:mov dl,eJmp xianshiChuf:mov dl,f Jmp xianshi chug:mov dl,gJmp xianshi Chuh:mov dl,hXianshi:mov ah,2Int 21hjmp startExit:mov ah,4chInt 21hCode endsEnd start 3、循環(huán)程序設(shè)計、循環(huán)程序設(shè)計循環(huán)程序一般由四部分組成循環(huán)初值循環(huán)次數(shù),循環(huán)正常工作的初始狀態(tài)循環(huán)體循環(huán)工作的主體部分,為完成特定功能而設(shè)計的程序段 修改部分保證每次循環(huán)時,相關(guān)信息發(fā)生有規(guī)律的變化,為下一次循環(huán)作準備 循環(huán)控制
12、部分控制循環(huán)的運行和結(jié)束 n例4、從XX單元開始10個連續(xù)單元中存放有10個無符號數(shù),從中找出最大者送YY單元。XXYY分析ALData segment Xx db 15,22,16,9,3,44,26,88,39,52 Yy db ? Data ends Code segment Assume cs: code,ds:data Assume cs: code,ds:data Mov ax,data Mov ds,ax Mov al,xx lea bx,xx inc bx Cmp al,bx Mov cx,9 Jae next mov al,bx Loop next:loop1:loop1Mo
13、v yy,al Mov ah,4ch Int 21h Code ends End 設(shè)數(shù)據(jù)段有設(shè)數(shù)據(jù)段有8個有符號數(shù):個有符號數(shù): MUN DB -19,28,33,-45,55,61-67,255。 設(shè)計要求:設(shè)計要求: 1、統(tǒng)計并顯示負數(shù)的個數(shù)。、統(tǒng)計并顯示負數(shù)的個數(shù)。 2、找出最大的數(shù),并以、找出最大的數(shù),并以16進制的形式顯示在屏幕上進制的形式顯示在屏幕上 。格式為:格式為:MAX= XXH。 例例5: 把把BX寄存器內(nèi)的二進制數(shù)用十六寄存器內(nèi)的二進制數(shù)用十六進制數(shù)的形式在屏幕上顯示出來進制數(shù)的形式在屏幕上顯示出來分析:分析:BX16位位 BHBL 1001 1100 00110101
14、9C359 C 3 5 0-30H十六進制數(shù):十六進制數(shù): 0 1 2 3 4 5 6 7 8 9 A B C D E F 1-31H 2-32H 3-33H 9-39H A-41H B-42H C-43H D-44H E-45H F-46HBXBHBL1001 1100 00110101 9C35 0011 1001 循環(huán)左移循環(huán)左移4位位 1100 00110101 1001 C359BLAL0101 1001 屏蔽屏蔽AL高高4位位0000 1001 AL與與30H相或相或0011 1001 39HCode sgement Assume cs:code Start: mov ch,4 L
15、oop1:mov cl,4 Rol bx,cl Mov al,bl And al,0fh Add al,30h Cmp al,3ah Jl shuchu Add al,07hShuchu:mov dl,al Mov ah,2Int 21h Dec ch Jnz loop1 Mov ah,4ch Int 21h Code ends End start 用冒泡法排序用冒泡法排序有一個首地址為有一個首地址為A的的N字數(shù)組,編程實現(xiàn)字數(shù)組,編程實現(xiàn)數(shù)組中的數(shù)從大到小排序數(shù)組中的數(shù)從大到小排序分析:分析:序號123456數(shù)85168432181 AL8855165 1655843218216843218
16、85384321816854843218168558432181685排序程序設(shè)計排序程序設(shè)計 Data seggmentA dw 8,5,16,84,32,18, n dw ($-A)/2Data ends Code segment Assume cs:code,ds:data start: mov ds,axMov cx,n dec cxMov di,cx Mov bx,0 Mov ax,abx Cmp ax,abx+2 jge cotinue mov ax, data xchg ax,abx+2Mov abx,ax add bx,2Loop loop1 mov cx,diLoop loo
17、p2 code ends end srart loop1:cotinue: loop2:Mov ah,4ch Int 21h 4、字符串處理程序、字符串處理程序使用ASCLL碼時注意的幾個問題P124頁例如,搜索字符串的長度置串指針置串長度初值0取串元素=CR?N串長度加1Y存長度返回Name length-of-string Data segment String db abcdefg,odh Il db ? Cr equ 0dh Data ends Stack segment para stack stack Db 100 dup(?) Stack ends Code segment As
18、sume cs:code, ss:stack,ds:data,es:data Start proc far Begin :push ds Mov ax,0 Push ax Mov ax,data Mov ds,ax Mov es,ax Lea di,string Mov dl,0 Mov al,cr scasb Je done Inc dl Jmp again Again :done:lea bx, ll Mov bx, dl Ret Start endp Code ends End begin 7宏匯編宏匯編一、宏定義、宏調(diào)用和宏展開一、宏定義、宏調(diào)用和宏展開1、定義格式:、定義格式:宏名宏
19、名MACRO 啞元表啞元表宏定義體宏定義體ENDM宏指令名宏指令名的第一個的第一個符號必須符號必須是字母是字母給出宏定義給出宏定義中用到的中用到的形式參數(shù)形式參數(shù)各參數(shù)之間各參數(shù)之間用逗號分開用逗號分開 2、宏調(diào)用格式:、宏調(diào)用格式:宏名宏名 實元表實元表3、宏展開:、宏展開:匯編時將宏名用宏定義體代替,并用元匯編時將宏名用宏定義體代替,并用元代替對應(yīng)的啞元代替對應(yīng)的啞元 舉例說明宏的定義、調(diào)用和展開舉例說明宏的定義、調(diào)用和展開例例7.1 P247頁頁用宏指令定義兩個字操作數(shù)相乘,得用宏指令定義兩個字操作數(shù)相乘,得到一個到一個16位的第三個操作數(shù)為結(jié)果。位的第三個操作數(shù)為結(jié)果。宏定義宏定義MU
20、LTIPLYMACROOPR1,OPR2,RESULTPUSH DXPUSH AXMOV AX, OPR1 IMUL OPR2MOV RESULT,AX POP AXPOP DXENDM 宏調(diào)用宏調(diào)用MULTIPLYCX,VAR,XYZBXMULTIPLY240,BX,SAVE宏展開宏展開PUSH DXPUSH AXMOV AX, CX IMUL VARMOV XYZBX,AX POP AXPOP DXPUSH DXPUSH AXMOV AX, 240 IMUL BXMOV SAVE,AX POP AXPOP DX宏調(diào)用與子程序調(diào)用的區(qū)別宏調(diào)用與子程序調(diào)用的區(qū)別主程序主程序X-a,y-bCal
21、l Q子程序子程序(X,Y)Q: RETX-C,y-DCall QX-E,y-FCall Q Q MACRO X,YENDM Q A,BQ C,DQ E,FQ (A,B)Q (C,D)Q (E,F)二、宏定義中的參數(shù)二、宏定義中的參數(shù)1、宏定義可以無參數(shù)、宏定義可以無參數(shù)SAVEREGMACROPUSH AXPUSH BXPUSH CXPUSH DXPUSH SI PUSH DIENDM定義:定義:程序中調(diào)用程序中調(diào)用SAVEREG2、變元可以是操作碼、變元可以是操作碼FOOMACRO定義:定義:P1,P2,P3MOV AX, P1P2 P3ENDMFOOWORD_VAR,INC,AX匯編時展
22、開宏匯編時展開宏MOV AX, WORD_VAR INC AX3、變元是操作碼的一部分,用、變元是操作碼的一部分,用作為分隔符作為分隔符LEAPMACRO定義:定義:COND,LABJ COND LABENDMLEAP Z,THERE匯編時展開宏匯編時展開宏JZ THERE JNZ THERELEAP NZ,THERE4、變元是、變元是ASCLL串串MSGGENMACRO定義:定義:LAB,NUM,XYZLAB NUM DB HELLO MR. XYZENDMMSGGENMSG,1,TAYLOR匯編時展開宏匯編時展開宏MSG1 DB HELLO MR.TAYLOR4、變元是、變元是ASCLL串
23、串MSGGEN定義:定義:例例7.7 P251頁頁5、變元中實用、變元中實用%操作符(略)操作符(略)三、三、LOCAL偽操作偽操作例例7.8 P252頁頁1、宏定義體內(nèi)允許使用標號、宏定義體內(nèi)允許使用標號ABSOLMACROOPERENDMCMP OPER,0JGE NEXTNEG OPER NEXT:宏調(diào)用宏調(diào)用ABSOLVARABSOLBX匯編時展開宏匯編時展開宏CMP VAR,0JGE NEXTNEG VAR NEXT:CMP BX,0JGE NEXTNEG BX NEXT:標號多重定標號多重定義不允許義不允許用用LOCAL偽操作解決標號多重定義的問題偽操作解決標號多重定義的問題格式:
24、格式:LOCALLIST OF LOCAL LABELS注意事項見注意事項見P252匯編時各局部標號用匯編時各局部標號用?0000?FFFF依次代替依次代替例例7.8 的宏定義應(yīng)改為:的宏定義應(yīng)改為: ABSOLMACROOPERENDMCMP OPER,0JGE NEXTNEG OPER NEXT:LOCAL NEXT宏調(diào)用宏調(diào)用ABSOLVARABSOLBX匯編時展開宏匯編時展開宏CMP VAR,0JGE NEG VAR ?0000:CMP BX,0JGE NEG BX?0001:?0000 ?0001 四、在宏定義內(nèi)使用宏(略)四、在宏定義內(nèi)使用宏(略) 例例7.9 P253頁頁五、列表偽操作(略)五、列表偽操作(略)六、宏庫的建立與調(diào)用六、宏庫的建立與調(diào)用宏庫中包含多個宏定義,庫名的擴展名通常宏庫中包含多個宏定義,庫名的擴展名通常為為.MAC或或.INC來表示,調(diào)用是需要在程序開始來表示,調(diào)用是需要在程序開始用用INCLUDE語句來說明。語句來說明。 例:例:INCLUDE C:MACRO.MAC建立例建立例7.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度成品油運輸綠色環(huán)保承諾合同范本4篇
- 二零二五版跨境電商倉儲物流一體化服務(wù)合同6篇
- 2025年度鋁合金建筑模板設(shè)計與租賃合同4篇
- 2025年度生態(tài)旅游度假村民宿布草租賃服務(wù)合同4篇
- 二零二五年度充電樁充電站設(shè)計與施工合同7篇
- 個人專利許可使用協(xié)議(2024版)3篇
- 2025技術(shù)類合同參考格式
- 二零二五寵物領(lǐng)養(yǎng)登記及咨詢服務(wù)協(xié)議4篇
- 2025年專業(yè)廚房承包與食材供應(yīng)合同匯編4篇
- 二零二四年度醫(yī)院候診區(qū)文化墻設(shè)計制作合同3篇
- 人教版初中語文2022-2024年三年中考真題匯編-學(xué)生版-專題08 古詩詞名篇名句默寫
- 2024-2025學(xué)年人教版(2024)七年級(上)數(shù)學(xué)寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- 醫(yī)療行業(yè)軟件系統(tǒng)應(yīng)急預(yù)案
- 使用錯誤評估報告(可用性工程)模版
- 《精密板料矯平機 第2部分:技術(shù)規(guī)范》
- 2024光伏發(fā)電工程交流匯流箱技術(shù)規(guī)范
- 旅游活動碳排放管理評價指標體系構(gòu)建及實證研究
- 2022年全國職業(yè)院校技能大賽-電氣安裝與維修賽項規(guī)程
- 2024年黑龍江省政工師理論知識考試參考題庫(含答案)
- 四年級上冊脫式計算300題及答案
評論
0/150
提交評論