




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章 匯編語言及匯編程序設計一、概述二、偽指令三、表達式及運算符四、宏指令五、匯編語言程序的上機過程六、匯編程序的設計過程七、匯編程序基本設計方法八、系統(tǒng)功能調用 例題作業(yè)7/18/2022第4章 匯編語言及匯編程序設計1一、概述 匯編語言是一種面向CPU指令系統(tǒng)的程序設計語言。指令格式:1、標號是指該指令的符號地址,以冒號結束;2、用助記符表示操作碼,是指令名稱的代表符號,是語句中的關鍵字,不可缺?。?/18/2022第4章 匯編語言及匯編程序設計2一、概述(續(xù)上頁)3、用符號代表操作數(shù)或操作數(shù)地址。 操作數(shù)是本指令執(zhí)行需要的數(shù)據(jù)。 有些指令不需要指明操作數(shù),可以默認;有些指令需要兩個操作
2、數(shù);還有些操作數(shù)可以用表達式。4 、注釋項是可選項,用分號開始。7/18/2022第4章 匯編語言及匯編程序設計3一、概述(續(xù)上頁) 用匯編語言編寫的程序稱為源程序,常用的匯編程序有ASM-86和宏匯編MASM-86。 匯編語言源程序的組成部分: 可以使用CPU指令系統(tǒng)所提供的指令(硬指令); 可以使用各種符合匯編語法的表達式, 運算符以及自行定義生成滿足需要的目標代碼的指令。7/18/2022第4章 匯編語言及匯編程序設計41、標號 8086/8088匯編語言中使用的標號必須遵循下列規(guī)則: (1)大小寫字母; (2)數(shù)字09; (3)某些特殊字符(, _,?) (4)第一個字符不能是數(shù)字,
3、“?”不能單獨作為標號。 (5)標號的有效長度是31; 有效標號:START MY_PROGRAM 無效標號:MAIN% 1BETA7/18/2022第4章 匯編語言及匯編程序設計5二、偽指令 偽指令是告訴匯編程序生成目標代碼的指令語句。 1、 符號定義偽指令 2、內存數(shù)據(jù)定義偽指令 3、段定義偽指令 4、段寄存器說明偽指令 5、 定位偽指令 6、 子程序偽指令7/18/2022第4章 匯編語言及匯編程序設計61、符號定義偽指令 (1)EQU偽指令 (2)等號(賦值)偽指令 (3)解除符號定義偽指令7/18/2022第4章 匯編語言及匯編程序設計7(1)EQU偽指令偽指令格式: EQU 指令功
4、能: 給符號名賦值。符號名可以由程序員取定, 表達式應該是可以計算得出一個具體值。例: PORT EQU 88H;定義符號PORT代表88H DATA EQU PORT+2;定義符號DATA代表;PORT+2注意: 用EQU定義的符號,不能重新再定義,除非用PURGE偽指令解除; 如果在表達式中用了其他符號,必須事先定義。7/18/2022第4章 匯編語言及匯編程序設計8(2)等號(賦值)偽指令偽指令格式: = 指令功能: 與EQU類似,唯一的區(qū)別是“=”可以隨時對符號名賦新值, 而不必使用PURGE偽指令。例:PORT=88H;定義符號PORT代表88HDATA=PORT+2;定義符號DAT
5、A代表PORT+27/18/2022第4章 匯編語言及匯編程序設計9(3)解除符號定義偽指令偽指令格式: PURGE 符號1, 符號2, 指令功能: 撤消用EQU賦值的符號名, 以便于賦予新值。例:PURGE PORT, DATA ;撤消用EQU對PORT、 ;DATA的賦值7/18/2022第4章 匯編語言及匯編程序設計102、內存數(shù)據(jù)定義偽指令格式: 變量 命令 參數(shù)1, 參數(shù)2, 功能: 數(shù)據(jù)定義語句用來分配存儲單元。數(shù)據(jù)定義語句的命令有: DB 定義字節(jié)數(shù)據(jù) DW定義字數(shù)據(jù) DD定義雙字數(shù)據(jù) DQ定義8字節(jié)數(shù)據(jù) DT定義10字節(jié)數(shù)據(jù)7/18/2022第4章 匯編語言及匯編程序設計112
6、、內存數(shù)據(jù)定義偽指令復制操作符 格式: DUP 數(shù)據(jù)1,數(shù)據(jù)2, 功能:匯編程序把所定義的數(shù)據(jù)按先后次序連續(xù)分配存儲空間,所起的名稱只代表第一個單元的字符。 例題7/18/2022第4章 匯編語言及匯編程序設計122、內存數(shù)據(jù)定義偽指令例:VAR1 DB 32H,ABCVAR2 DW 1234H,40H,AB DD 12345678H DB ?, 11000011BARRY1 DB 2 DUP(0,1)ARRY2 DW 2 DUP(?,1) 7/18/2022第4章 匯編語言及匯編程序設計13三、表達式及運算符 在匯編語言中,指令的操作數(shù)除了可以是常數(shù)、寄存器、變量和標號外,還可以是表達式。
7、表達式是由常數(shù)、寄存器、變量、標號和專用運算符組合而成。 在程序匯編時,匯編程序自動把這些表達式計算出來,形成具體的指令操作數(shù)。 1、常數(shù)、變量和標號 2、表達式及運算符返回7/18/2022第4章 匯編語言及匯編程序設計141、常數(shù)、變量和標號常數(shù) 包括數(shù)值型常數(shù)和字符型常數(shù)。 如:12H,1234H,AB變量 變量代表存放在存儲單元中的數(shù)據(jù)。 定義后的變量有三個屬性: (1)段屬性表示變量所在的邏輯段; (2)偏移量屬性表示變量所在邏輯段中的偏移地址; (3)類型屬性表示變量占用的存儲單元數(shù),DB、DW、DD、DQ、DT。7/18/2022第4章 匯編語言及匯編程序設計151、常數(shù)、變量和
8、標號標號 是指令目標代碼的符號地址。 在轉移指令中常用標號代替具體轉移地址,標號的使用使編寫匯編語言程序時,不必考慮程序匯編、連接后系統(tǒng)分配給指令代碼的實際地址。 標號同樣有三個屬性: (1)段屬性表示指令代碼所在的邏輯段; (2)偏移量屬性表示指令代碼所在的邏輯段中的偏移地址; (3)距離屬性表示標號可作段內轉移或段間轉移(NEAR、FAR)。7/18/2022第4章 匯編語言及匯編程序設計16 2、表達式及運算符表達式由操作數(shù)和運算符組成。 其中,操作數(shù)可以是常數(shù)、變量、寄存器和標號。 運算符包括算術運算符、邏輯運算符、關系運算符、分析運算符和屬性運算符五類運算。 注意:運算符的先后次序
9、。7/18/2022第4章 匯編語言及匯編程序設計17五、匯編語言程序的上機過程 建立匯編語言的環(huán)境,典型的匯編語言開發(fā)環(huán)境都包含4種工具: 1、編輯程序 2、匯編程序 3、連接程序 4、匯編程序的上機過程7/18/2022第4章 匯編語言及匯編程序設計181、編輯程序 (1) 編輯程序是用來輸入?yún)R編語言源程序的工具,包括EDIT.EXE, EDLIN.EXE等; (2) 匯編語言是以文本格式保存的; (3) 匯編程序的源程序必須以ASM作為擴展名; (4) 輸入和編輯源程序時必須遵循匯編語言的語法規(guī)定。 匯編程序的基本結構 例題 實際操作: 編輯源程序 TEST11.ASM7/18/2022
10、第4章 匯編語言及匯編程序設計19匯編程序的基本結構DATAA SEGMENT ;數(shù)據(jù)段內定義各類程序執(zhí)行需要的相關的數(shù)據(jù)DATAA ENDSSTACKA SEGMENT ;根據(jù)具體程序的需要,定義堆棧段供程序執(zhí)行過程 ;中保持臨時數(shù)據(jù)STACKA ENDSCODEA SEGMENT ASSUME CS:CODEA,DS:DATAA,SS:STACKA START: MOV AX,DATAA MOV DS,AX ;完成具體操作的指令序列CODEA ENDS END START7/18/2022第4章 匯編語言及匯編程序設計20實際操作(實現(xiàn)X+YZ, 源程序文件名: TEST11.ASM) D
11、ATA1 SEGMENT; 數(shù)據(jù)段 X DB 05H Y DB 04H Z DB ?DATA1 ENDSCODE1 SEGMENT;代碼段 ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA; 數(shù)據(jù)段基址AX MOV DS,AX; AX DS MOV AL,X; 內存單元X的數(shù)據(jù)AL ADD AL,Y; 內存單元Y的數(shù)據(jù)+ALAL, 即X+Y AL MOV Z, AL; AL內存單元Z, 即求和結果送回Z MOV AH,4CH;送功能號 INT 21H;系統(tǒng)功能調用,返回操作系統(tǒng) CODE1 ENDS END START7/18/2022第4章 匯編語言及匯編程序
12、設計212、匯編程序 (1) 匯編程序用來把源程序翻譯成機器碼, 包括ASM.EXE, MASM.EXE; (2) 匯編程序翻譯源程序, 產生一個目標代碼文件,與源程序文件名相同,擴展名為OBJ。 實際操作: 產生目標文件TEST11.OBJ7/18/2022第4章 匯編語言及匯編程序設計223、連接程序 通過匯編產生的是OBJ文件是二進制目標文件, 但用的是浮動地址, 不能直接運行, 必須用連接程序LINK.EXE連接和定位。 實際操作: 產生可執(zhí)行文件TEST11.EXE7/18/2022第4章 匯編語言及匯編程序設計234、匯編程序的上機過程實際操作演示7/18/2022第4章 匯編語言
13、及匯編程序設計24data1 segment ; 數(shù)據(jù)段開始x db 05hy db 04hz db ?buff db 5+4= $; 定義一個數(shù)據(jù)串,數(shù)據(jù)串規(guī)定以$結尾, 為了顯示5+4=data1 endscode1 segment; 代碼段開始 assume cs:code1,ds:data1; 段寄存器說明偽指令start: mov ax,data1; 將數(shù)據(jù)段基址ax mov ds, ax; axds mov al, x; 內存數(shù)據(jù)xal add al, y; 內存數(shù)據(jù)Y+alal, 即X+Y al mov z, al; alZ, 即X+Y Z lea dx, buff; 裝載 bu
14、ff的有效地址 mov ah, 09h; 送功能號 int 21h;系統(tǒng)功能調用,顯示屏顯示字符串5+4= mov dl,z; 將z送dl add dl,30h; 將z的值轉換成對應的ASCII碼值 mov ah, 02h;送功能號 int 21H;系統(tǒng)功能調用, 將x+y的和z以單字符形式在顯示屏上顯示出來 mov ah,4ch; 送功能號 int 21h; 系統(tǒng)功能調用,返回DOS狀態(tài)code1 ends end start 返回7/18/2022第4章 匯編語言及匯編程序設計25六、匯編程序的設計過程 1、分析問題確定算法 2、繪制程序流程圖(做作業(yè)一定要求) 3、編寫代碼7/18/20
15、22第4章 匯編語言及匯編程序設計26七、匯編程序基本設計方法 1、 簡單程序 作業(yè) 2、 分支程序 3、 循環(huán)程序 4、 子程序7/18/2022第4章 匯編語言及匯編程序設計271、簡單程序 簡單程序是指順序結構程序, 在程序中不包含任何轉移類指令。 執(zhí)行時按指令的先后次序從第一條開始逐條執(zhí)行,直至程序結束。 例題7/18/2022第4章 匯編語言及匯編程序設計28例題 1、有X,Y兩個16位數(shù)3456H和0ABCDH,求兩數(shù)之和,并將結果送到Z單元。解: 編寫流程圖7/18/2022第4章 匯編語言及匯編程序設計29例題 程序清單 DATASEGMENT XDW3456H YDW0ABC
16、DH ZDW0 DATAENDS;設置數(shù)據(jù)段,取名DATA CODE SEGMENT ASSUME DS :DATA,CS:CODESTART :MOV AX,DATA;取數(shù)碼段DATA段址至AX MOV DS,AX;段地址送DS LEA SI,X;將X的有效地址送S1 LEA DI, Y;將Y的有效地址送D1 MOV AX,SI;將X的值送AX ADD AX,DI;AX+Y的值送回AX MOV Z, AX;將AX的值送到存儲單元Z MOV AH, 4CH ;設置功能號 INT21H;系統(tǒng)功能調用,返回DOSCODE ENDS END START 7/18/2022第4章 匯編語言及匯編程序設
17、計30作業(yè)P.1202、3、 5、7、127/18/2022第4章 匯編語言及匯編程序設計312、分支程序 分支程序就是利用轉移指令,控制計算機執(zhí)行某段程序或不執(zhí)行某段程序。兩路分支多路分支例題7/18/2022第4章 匯編語言及匯編程序設計32例題 1、內存中有一個8位帶符號數(shù),求其絕對值,并將結果放回原處。答:編寫流程圖程序清單7/18/2022第4章 匯編語言及匯編程序設計33例題 程序清單DATA2 SEGMENTM DB 05H ; 第二個程序換成5,即0fbhDATA2 ENDSCODE2 SEGMENTASSUME CS:CODE2,DS:DATA2START: MOV AX,D
18、ATA2 MOV DS,AX ;送段地址至DS LEA SI,M ;取M的指針MOV AL,SI;取帶符號數(shù) AND AL,AL;判斷符號位JNS DONE;SF=0,轉移到DONENEG AL;SF=1,AL0)Y= 0 (當X=0) 9 (當X0)解: 編寫程序清單程序清單7/18/2022第4章 匯編語言及匯編程序設計35例題 程序清單_數(shù)據(jù)段DATAXY SEGMENT X DB 8FH; 另外兩組分別是7FH,00H Y DB ?DATAXY ENDS7/18/2022第4章 匯編語言及匯編程序設計36例題 程序清單_代碼段CODE SEGMENT ASSUME CS:CODE,DS
19、:DATAXYSTART: MOV AX,DATAXY MOV DS,AX;送段地址 LEA SI, X;取X的指針MOV AL,SI;將X的值送AL AND AL, AL;自身與,取符號標志位JNS OTHER;SF=0,轉移到OTHER MOV Y, 09H;SF=1,則X0DONE: MOV DL, YADD DL, 30HMOV AH, 02HINT 21H; 系統(tǒng)功能調用,顯示Y的 值 MOV AH,4CH INT 21HCODE2 ENDS END START7/18/2022第4章 匯編語言及匯編程序設計373、循環(huán)程序 循環(huán)程序就是控制計算機反復執(zhí)行一段指令序列的程序結構。非零
20、次循環(huán)結構零次循環(huán)結構例題7/18/2022第4章 匯編語言及匯編程序設計38 1、統(tǒng)計字節(jié)數(shù)據(jù)Z的1的個數(shù),將結果放在RESULT內。解:編寫流程圖例題程序清單7/18/2022第4章 匯編語言及匯編程序設計39例題 程序清單 數(shù)據(jù)段DATAXY SEGMENT X DB 0FFH ; 第二個程序換成5,即0fbh RESULT DB ?DATAXY ENDS7/18/2022第4章 匯編語言及匯編程序設計40例題 程序清單 代碼段CODE SEGMENT ASSUME CS:CODE,DS:DATAXYSTART: MOV AX,DATAXY MOV DS,AX ;送段地址至DSXOR B
21、L,BL;累加器BL清0MOV CX,08H;循環(huán)次數(shù)送CXLEA SI,X ;取X的指針MOV AL,SI;取X送ALSUM: SHR AL,1;邏輯右移1位JNC NONE;CF=0,轉移到NONEINC BL;CF=1,BL+1BLNONE: LOOP SUM MOV RESULT,BL;統(tǒng)計值送RESULT內存單元 MOV DL, RESULT ADD DL, 30HMOV AH, 02HINT 21H; 系統(tǒng)功能調用,顯示該統(tǒng)計數(shù)值 MOV AH,4CH INT 21HCODE ENDS END START7/18/2022第4章 匯編語言及匯編程序設計414、子程序 一個程序中,當
22、在不同的地方需要多次使用某段程序時,我們常將這段程序單獨編寫成一個程序段,稱為子程序/過程。(1)子程序的定義格式(2)子程序的調用(3)編寫子程序的注意事項7/18/2022第4章 匯編語言及匯編程序設計42(1)子程序的定義格式 格式: 子程序名 PROC RET 子程序名 ENDP7/18/2022第4章 匯編語言及匯編程序設計43(2)子程序的調用 格式: CALL 子程序名7/18/2022第4章 匯編語言及匯編程序設計44(3)編寫子程序的注意事項 1、現(xiàn)場保護: 保護調用子程序的現(xiàn)場, 即保護子程序中會用到的寄存器, 將這些寄存器入棧; 2、功能子程序: 子程序要完成的功能; 3
23、、恢復現(xiàn)場: 為了使計算機返回到主程序調用時的狀態(tài), 將入棧的數(shù)據(jù)出棧。注意順序! 例題:子程序的基本框架7/18/2022第4章 匯編語言及匯編程序設計45子程序的基本框架 設某一子程序中要用到寄存器BX,CX,SI,DI則: ABC: PUSH BXPRSH CXPUSH SIPUSH DI ;子程序的功能程序POP DIPOP SIPOP CXPOP BX RET7/18/2022第4章 匯編語言及匯編程序設計46例題1 編寫統(tǒng)計X數(shù)據(jù)中的“1”的個數(shù)子程序,并編寫主程序調用。 子程序如下:ABC: PUSH BX PUSH CX XOR BL,BL;累加器BL清0 MOV CX,08H
24、;循環(huán)次數(shù)送CXSUM:SHR AL,1;邏輯右移1位 JNC NONE;CF=0,轉移到NONE INC BL;CF=1,BL+1BLNONE: LOOP SUM MOV AL, BL ;AL里保存的是“1”的統(tǒng)計個數(shù) POP CX POP BX RET7/18/2022第4章 匯編語言及匯編程序設計47例題1 主程序_數(shù)據(jù)段_堆棧段DATAXY SEGMENT X DB 0FFH SX DB ?DATAXY ENDS;-STACK SEGMENT DW 100 DUP(?)STACK ENDS7/18/2022第4章 匯編語言及匯編程序設計48例題1 主程序_代碼段CODE1 SEGMEN
25、T ASSUME CS:CODE1, DS:DATAXY,SS:STACKSTART: MOV AX, DATA MOV DS, AX LEA BX, X MOV AL,BX CALL ABC MOV BX+1, AL MOV DL, SX ADD DL, 30H MOV AH, 02H INT 21H; 系統(tǒng)功能調用,顯示該統(tǒng)計數(shù)值 MOV AH,4CH INT 21H ; 子程序插入此處CODE1 ENDS END START 7/18/2022第4章 匯編語言及匯編程序設計49例題2、 將一字節(jié)無符號二進制數(shù)轉換為兩位十進制數(shù)的ASCII碼值,并存放在其后的兩個字節(jié)。(顯示程序用子程序編
26、寫)。解:編寫流程圖:7/18/2022第4章 匯編語言及匯編程序設計50程序數(shù)據(jù)段data1 segment x db 2ah;可任取100的無符號字節(jié)數(shù)據(jù) y db ? z db ? buff db 2ah=$data1 ends7/18/2022第4章 匯編語言及匯編程序設計51代碼段:code1 segment assume cs:code1,ds:data1 start: mov ax,data1 mov ds,ax mov al,x cbw mov bl,0ah div bl mov y,al mov z,ah lea dx,buff mov ah,09h int 21h mov
27、al,y ;下接右上;上接左下 call disp mov al,z call disp jmp eend disp: mov dl,al add dl,30h mov ah,02h int 21h ret eend: mov ah,4ch int 21hcode1 ends end start7/18/2022第4章 匯編語言及匯編程序設計52思考題 試編制程序將一個字數(shù)據(jù)用十六進制數(shù)的形式顯示在屏幕上。7/18/2022第4章 匯編語言及匯編程序設計53八、系統(tǒng)功能調用 MS-DOS是8086/8088微機系統(tǒng)廣泛使用的一種操作系統(tǒng)。MS-DOS中包含有許多通用的內部子程序,分別用于完成I/O管理、內存管理、文件管理以及作業(yè)管理等。 MS-DOS以中斷服務程序形式提供這些功能程序,在匯編語言源程序中可以用軟中斷調用它們。 系統(tǒng)功能調用(INT 21H)應用步驟: (1)傳送入口參數(shù)到規(guī)定的寄存器或存儲單元;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京2025年江蘇南京大學考古文博與中華文明研究院準聘長聘崗位招聘筆試歷年參考題庫附帶答案詳解
- 停放汽車合同范本
- 云南2025年云南能源職業(yè)技術學院第一批招聘30人筆試歷年參考題庫附帶答案詳解
- 容器租賃合同范本
- 電梯授權合同范本
- 科技助力提高老年人在線學習平臺的用戶體驗
- MMDPPO-生命科學試劑-MCE
- Lutetate-tezuvotide-tetraxetan-生命科學試劑-MCE
- HT1171-生命科學試劑-MCE
- 2-4-DMA-hydrochloride-生命科學試劑-MCE
- Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學教案
- 2024年地鐵車站照明系統(tǒng)安裝與維護勞務分包協(xié)議3篇
- 脫硫自動化控制-洞察分析
- 醫(yī)務人員醫(yī)德醫(yī)風培訓
- 人教版初中歷史八上-第2課 第二次鴉片戰(zhàn)爭
- 2024湖北省金口電排站管理處招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 油井供水合同范例
- 2025年人教部編版語文五年級下冊教學計劃(含進度表)
- 全國計算機等級考試一級試題及答案(5套)
- 銀河證券-科創(chuàng)板認知測評題目及答案
- 產品方案設計模板
評論
0/150
提交評論