




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章、匯編語(yǔ)言程序設(shè)計(jì)舉例匯編語(yǔ)言程序的上機(jī)過(guò)程匯編語(yǔ)言程序的上機(jī)過(guò)程為運(yùn)行匯編語(yǔ)言程序需要在磁盤(pán)上建立如下文件為運(yùn)行匯編語(yǔ)言程序需要在磁盤(pán)上建立如下文件1、編輯程序,如、編輯程序,如edit.exe2、匯編程序,如、匯編程序,如masm.exe3、連接程序,如、連接程序,如link.exe4、調(diào)試程序,如、調(diào)試程序,如debug.exe一、利用編輯程序建立一、利用編輯程序建立 asm 文件文件 1、進(jìn)入、進(jìn)入dos環(huán)境環(huán)境 一、一、 用用edit程序編輯程序編輯asm文件文件 二、用二、用masm程序產(chǎn)生程序產(chǎn)生obj 文件文件 匯編程序的版本號(hào)匯編程序的版本號(hào)是是list文件,稱為列表文
2、件。該文文件,稱為列表文件。該文件給出源程序和機(jī)器語(yǔ)言程序清單,件給出源程序和機(jī)器語(yǔ)言程序清單,并給出符號(hào)表,該文件可有可無(wú)。并給出符號(hào)表,該文件可有可無(wú)。是是crf文件,該文件用來(lái)產(chǎn)生交叉文件,該文件用來(lái)產(chǎn)生交叉引用表引用表ref。對(duì)一般的程序不需要。對(duì)一般的程序不需要建立此文件。建立此文件。 三、用三、用link程序產(chǎn)生程序產(chǎn)生exe 文件文件 是連接程序的列表文件,又稱為連是連接程序的列表文件,又稱為連接映像,給出每個(gè)段在存儲(chǔ)器的分接映像,給出每個(gè)段在存儲(chǔ)器的分配情況。配情況。 是程序中需要的庫(kù)文件,如無(wú)特是程序中需要的庫(kù)文件,如無(wú)特殊需要,則應(yīng)對(duì)殊需要,則應(yīng)對(duì)Lis:回答:回答 四、程
3、序的執(zhí)行四、程序的執(zhí)行 匯編語(yǔ)言程序設(shè)計(jì)舉例匯編語(yǔ)言程序設(shè)計(jì)舉例 1、直線型程序設(shè)計(jì)、直線型程序設(shè)計(jì) 四、程序設(shè)計(jì)舉例n1、直線運(yùn)行程序n例如:求兩個(gè)數(shù)的平均值。兩個(gè)數(shù)分別放在X和Y單元中,結(jié)果放在Z單元中。設(shè)兩個(gè)數(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開(kāi)始的七個(gè)單元中,連續(xù)存放著自然數(shù)06的平方值。任意一個(gè)數(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號(hào)讀取鍵盤(pán)字符并回顯(單字符)調(diào)用方式MOV AH,01HINT 21H 說(shuō)明等待按鍵 若是CTRL-BREAK則退出 其他鍵,將其ASCLL碼送AL寄存器,同時(shí)送顯示器顯示 02H號(hào)顯示字符 調(diào)用方式MOV AH,02HINT 21H DL 要顯示字符的ASCLL碼說(shuō)明將置入DL寄存器的字符送顯示器顯示 08H號(hào)鍵盤(pán)輸入單字符不顯示 調(diào)用方式MOV AH,08HINT 21H 說(shuō)明將輸入的字符送AL寄存器 09H號(hào)字符串輸出顯示 調(diào)用方式DX 要
6、顯示字符串的首地址MOV AH,08HINT 21H 說(shuō)明要顯示的字符串一般定義在數(shù)據(jù)段 該字符串必須以定界符“$”為結(jié)束標(biāo)志 “$” 字符不顯示 STRING DB How are you,$ 例如:例如: MOV DX,OFFSET STRING MOV AH,09H INT 21H 0AH號(hào)字符串輸入 調(diào)用方式DX 接收字符串緩沖區(qū)的首地址MOV AH,0AHINT 21H 說(shuō)明從鍵盤(pán)接收字符串到內(nèi)存指定的緩沖區(qū),直到回車為止 緩沖區(qū)的第一個(gè)字節(jié)為指定緩沖區(qū)的字符個(gè)數(shù) 緩沖區(qū)的第二個(gè)字節(jié)保留,填寫(xiě)實(shí)際輸入字符的個(gè)數(shù) 緩沖區(qū)的第三個(gè)字節(jié)開(kāi)始存入輸入的字符 例如:例如: DATA SEGME
7、NT BUF DB 80 DB ? DB 80DUP(?) DATA ENDS 4CH號(hào)結(jié)束程序返回操作系統(tǒng) 調(diào)用方式MOV AH,4CHINT 21H 2、分支程序設(shè)計(jì)、分支程序設(shè)計(jì)分支程序:根據(jù)某種判斷結(jié)果,從兩個(gè)以上的程序中選擇一個(gè)執(zhí)行。條件分支段1分支段2或條件分支段2n例3、比較兩個(gè)無(wú)符號(hào)數(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 從鍵盤(pán)輸入從鍵盤(pán)輸入0-7中的一個(gè)數(shù),然后將數(shù)字轉(zhuǎn)換成對(duì)應(yīng)中的一個(gè)數(shù),然后將數(shù)字轉(zhuǎn)換成對(duì)應(yīng)位為位為1的的8位二進(jìn)制數(shù)存入位二進(jìn)制數(shù)存入AL中,根據(jù)中,根據(jù)AL中哪一位為中哪一位為1轉(zhuǎn)入相應(yīng)的分支程序處,實(shí)現(xiàn)散轉(zhuǎn),設(shè)轉(zhuǎn)入相應(yīng)的分支程序處,實(shí)現(xiàn)散轉(zhuǎn),設(shè)8個(gè)分支程序個(gè)分支程序分別顯示分別顯示A-H中的一個(gè)中的一個(gè) 。 分析:分析: 輸入輸入0 AL0000 0001 顯示顯示A 輸入輸入1AL0000 0010 顯示顯示B 輸入輸入2AL000
9、0 0100 顯示顯示C 輸入輸入3AL0000 1000 顯示顯示D 輸入輸入7AL1000 0000 顯示顯示H實(shí)際:實(shí)際: 輸入輸入0AL0011 00000000 0001 輸入輸入10011 00010000 0010AL 輸入輸入30011 00110000 1000AL 輸入輸入70011 01111000 0000AL設(shè)置初值寄存器設(shè)置初值寄存器DL0000 0001移動(dòng)次數(shù)由移動(dòng)次數(shù)由AL低低4位得到位得到送送CL寄存器寄存器移動(dòng)移動(dòng) 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è)計(jì)、循環(huán)程序設(shè)計(jì)循環(huán)程序一般由四部分組成循環(huán)初值循環(huán)次數(shù),循環(huán)正常工作的初始狀態(tài)循環(huán)體循環(huán)工作的主體部分,為完成特定功能而設(shè)計(jì)的程序段 修改部分保證每次循環(huán)時(shí),相關(guān)信息發(fā)生有規(guī)律的變化,為下一次循環(huán)作準(zhǔn)備 循環(huán)控制
12、部分控制循環(huán)的運(yùn)行和結(jié)束 n例4、從XX單元開(kāi)始10個(gè)連續(xù)單元中存放有10個(gè)無(wú)符號(hào)數(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個(gè)有符號(hào)數(shù):個(gè)有符號(hào)數(shù): MUN DB -19,28,33,-45,55,61-67,255。 設(shè)計(jì)要求:設(shè)計(jì)要求: 1、統(tǒng)計(jì)并顯示負(fù)數(shù)的個(gè)數(shù)。、統(tǒng)計(jì)并顯示負(fù)數(shù)的個(gè)數(shù)。 2、找出最大的數(shù),并以、找出最大的數(shù),并以16進(jìn)制的形式顯示在屏幕上進(jìn)制的形式顯示在屏幕上 。格式為:格式為:MAX= XXH。 例例5: 把把BX寄存器內(nèi)的二進(jìn)制數(shù)用十六寄存器內(nèi)的二進(jìn)制數(shù)用十六進(jìn)制數(shù)的形式在屏幕上顯示出來(lái)進(jìn)制數(shù)的形式在屏幕上顯示出來(lái)分析:分析:BX16位位 BHBL 1001 1100 00110101
14、9C359 C 3 5 0-30H十六進(jìn)制數(shù):十六進(jìn)制數(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 用冒泡法排序用冒泡法排序有一個(gè)首地址為有一個(gè)首地址為A的的N字?jǐn)?shù)組,編程實(shí)現(xiàn)字?jǐn)?shù)組,編程實(shí)現(xiàn)數(shù)組中的數(shù)從大到小排序數(shù)組中的數(shù)從大到小排序分析:分析:序號(hào)123456數(shù)85168432181 AL8855165 1655843218216843218
16、85384321816854843218168558432181685排序程序設(shè)計(jì)排序程序設(shè)計(jì) 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碼時(shí)注意的幾個(gè)問(wèn)題P124頁(yè)例如,搜索字符串的長(zhǎng)度置串指針置串長(zhǎng)度初值0取串元素=CR?N串長(zhǎng)度加1Y存長(zhǎng)度返回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)用和宏展開(kāi)一、宏定義、宏調(diào)用和宏展開(kāi)1、定義格式:、定義格式:宏名宏
19、名MACRO 啞元表啞元表宏定義體宏定義體ENDM宏指令名宏指令名的第一個(gè)的第一個(gè)符號(hào)必須符號(hào)必須是字母是字母給出宏定義給出宏定義中用到的中用到的形式參數(shù)形式參數(shù)各參數(shù)之間各參數(shù)之間用逗號(hào)分開(kāi)用逗號(hào)分開(kāi) 2、宏調(diào)用格式:、宏調(diào)用格式:宏名宏名 實(shí)元表實(shí)元表3、宏展開(kāi):、宏展開(kāi):匯編時(shí)將宏名用宏定義體代替,并用元匯編時(shí)將宏名用宏定義體代替,并用元代替對(duì)應(yīng)的啞元代替對(duì)應(yīng)的啞元 舉例說(shuō)明宏的定義、調(diào)用和展開(kāi)舉例說(shuō)明宏的定義、調(diào)用和展開(kāi)例例7.1 P247頁(yè)頁(yè)用宏指令定義兩個(gè)字操作數(shù)相乘,得用宏指令定義兩個(gè)字操作數(shù)相乘,得到一個(gè)到一個(gè)16位的第三個(gè)操作數(shù)為結(jié)果。位的第三個(gè)操作數(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宏展開(kāi)宏展開(kāi)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、宏定義可以無(wú)參數(shù)、宏定義可以無(wú)參數(shù)SAVEREGMACROPUSH AXPUSH BXPUSH CXPUSH DXPUSH SI PUSH DIENDM定義:定義:程序中調(diào)用程序中調(diào)用SAVEREG2、變?cè)梢允遣僮鞔a、變?cè)梢允遣僮鞔aFOOMACRO定義:定義:P1,P2,P3MOV AX, P1P2 P3ENDMFOOWORD_VAR,INC,AX匯編時(shí)展
22、開(kāi)宏匯編時(shí)展開(kāi)宏MOV AX, WORD_VAR INC AX3、變?cè)遣僮鞔a的一部分,用、變?cè)遣僮鞔a的一部分,用作為分隔符作為分隔符LEAPMACRO定義:定義:COND,LABJ COND LABENDMLEAP Z,THERE匯編時(shí)展開(kāi)宏匯編時(shí)展開(kāi)宏JZ THERE JNZ THERELEAP NZ,THERE4、變?cè)?、變?cè)茿SCLL串串MSGGENMACRO定義:定義:LAB,NUM,XYZLAB NUM DB HELLO MR. XYZENDMMSGGENMSG,1,TAYLOR匯編時(shí)展開(kāi)宏匯編時(shí)展開(kāi)宏MSG1 DB HELLO MR.TAYLOR4、變?cè)?、變?cè)茿SCLL串
23、串MSGGEN定義:定義:例例7.7 P251頁(yè)頁(yè)5、變?cè)袑?shí)用、變?cè)袑?shí)用%操作符(略)操作符(略)三、三、LOCAL偽操作偽操作例例7.8 P252頁(yè)頁(yè)1、宏定義體內(nèi)允許使用標(biāo)號(hào)、宏定義體內(nèi)允許使用標(biāo)號(hào)ABSOLMACROOPERENDMCMP OPER,0JGE NEXTNEG OPER NEXT:宏調(diào)用宏調(diào)用ABSOLVARABSOLBX匯編時(shí)展開(kāi)宏匯編時(shí)展開(kāi)宏CMP VAR,0JGE NEXTNEG VAR NEXT:CMP BX,0JGE NEXTNEG BX NEXT:標(biāo)號(hào)多重定標(biāo)號(hào)多重定義不允許義不允許用用LOCAL偽操作解決標(biāo)號(hào)多重定義的問(wèn)題偽操作解決標(biāo)號(hào)多重定義的問(wèn)題格式:
24、格式:LOCALLIST OF LOCAL LABELS注意事項(xiàng)見(jiàn)注意事項(xiàng)見(jiàn)P252匯編時(shí)各局部標(biāo)號(hào)用匯編時(shí)各局部標(biāo)號(hào)用?0000?FFFF依次代替依次代替例例7.8 的宏定義應(yīng)改為:的宏定義應(yīng)改為: ABSOLMACROOPERENDMCMP OPER,0JGE NEXTNEG OPER NEXT:LOCAL NEXT宏調(diào)用宏調(diào)用ABSOLVARABSOLBX匯編時(shí)展開(kāi)宏匯編時(shí)展開(kāi)宏CMP VAR,0JGE NEG VAR ?0000:CMP BX,0JGE NEG BX?0001:?0000 ?0001 四、在宏定義內(nèi)使用宏(略)四、在宏定義內(nèi)使用宏(略) 例例7.9 P253頁(yè)頁(yè)五、列表偽操作(略)五、列表偽操作(略)六、宏庫(kù)的建立與調(diào)用六、宏庫(kù)的建立與調(diào)用宏庫(kù)中包含多個(gè)宏定義,庫(kù)名的擴(kuò)展名通常宏庫(kù)中包含多個(gè)宏定義,庫(kù)名的擴(kuò)展名通常為為.MAC或或.INC來(lái)表示,調(diào)用是需要在程序開(kāi)始來(lái)表示,調(diào)用是需要在程序開(kāi)始用用INCLUDE語(yǔ)句來(lái)說(shuō)明。語(yǔ)句來(lái)說(shuō)明。 例:例:INCLUDE C:MACRO.MAC建立例建立例7.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗砂安全協(xié)議書(shū)
- 父子借租協(xié)議書(shū)
- 建筑收購(gòu)居間協(xié)議書(shū)
- 淘寶撤訴協(xié)議書(shū)
- 匯票回購(gòu)協(xié)議書(shū)
- 小麥定金合同協(xié)議書(shū)
- 煤礦救護(hù)協(xié)議書(shū)
- 離婚扶養(yǎng)協(xié)議書(shū)
- 離婚房車協(xié)議書(shū)
- 小區(qū)廣告合同協(xié)議書(shū)
- 心源性猝死的預(yù)防和急救
- 輸血科感控知識(shí)培訓(xùn)課件
- 《常見(jiàn)職業(yè)病危害與防護(hù)宣傳手冊(cè)》
- 兒童主任培訓(xùn)課件
- 土地平整工程施工方案與技術(shù)措施
- 變壓器損耗對(duì)照表
- 2025版電動(dòng)車充電站投資合作合同范本2篇
- 醫(yī)院水電維護(hù)與管理方案
- 重點(diǎn)和難點(diǎn)工程的施工方案、方法與技術(shù)措施
- 2025年中國(guó)社區(qū)團(tuán)購(gòu)行業(yè)發(fā)展環(huán)境、運(yùn)行態(tài)勢(shì)及投資前景分析報(bào)告(智研咨詢發(fā)布)
- 云肩完整版本
評(píng)論
0/150
提交評(píng)論