




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、匯編語言程序設計第七講第七講課題二課題二 基本程序結構基本程序結構 程序流程圖 順序程序設計 分支程序設計 循環(huán)程序設計 子程序設計匯編程序設計的一般步驟1. 分析問題,建立數(shù)學模型2. 確定算法3. 編制程序流程圖4. 合理分配存儲空間和寄存器5. 編制程序6. 調試程序一、程序流程圖(a)處理框 (b)判斷框 (c)起止框 (d)連接框 (e)流向線AX=0?YN開始結束AA 流程圖的組成 流程圖主要由以下幾種框圖符號組成:一、程序流程圖 例:判斷兩無符號數(shù)大小的流程圖開始AX 無符號數(shù)1BX 無符號數(shù)2AXBX=0?顯示 AX=BXAXBX 0?顯示 AX BX顯示 AX BX結束YNN
2、Y二、順序程序設計 順序程序結構是最簡單、最基本的程序結構; 無任何分支,從流程圖上看,只有起止框和處理框,無判斷框;二、順序程序設計 例:將AL中的兩位十進制數(shù)分別轉換為它們相應的ASCII碼,分別存放在BH和BL中。解:CODE SEGMENT ASSUME CS:CODESTART:MOV BL,AL MOV BH,AL AND BL,0FH OR BL,30H MOV CL,4 SHR BH,CL OR BH,30H MOV AH,4CH INT 21H CODE ENDS END START附:匯編程序上機運行過程 第一步:編輯源文件第一步:編輯源文件 (生成.ASM文件) EDIT
3、 XXX.ASM 說明:在EDIT環(huán)境中,按Alt+F調出菜單后可選擇存盤退出。 第二步:匯編源文件第二步:匯編源文件 (生成.OBJ文件) MASM XXX 說明: 1、文件名XXX后面可不帶擴展名,缺省為.asm 2、運行masm后,可連續(xù)按提示進行下一步操作,選擇默認值可直接回車。如有錯誤需回到第一步修改。附:匯編程序上機運行過程 第三步:連接目標文件第三步:連接目標文件 (生成.EXE文件) LINK XXX 說明: 1、匯編通過后,連接一般都可通過并獲得EXE文件。 2、此命令中文件名XXX不需帶擴展名。缺省為.obj 第四步:運行可執(zhí)行文件第四步:運行可執(zhí)行文件 XXX (在DOS
4、下直接運行) 或DEBUG XXX.EXE (在DEBUG中運行)三、分支結構程序設計 分支結構也叫選擇結構; 在程序運行中,執(zhí)行哪條指令是由CS和IP決定的,在程序運行的過程中改變CS和IP,就是改變了程序的流向,從而得到分支、循環(huán)、子程序等程序結構; 分支結構的實現(xiàn)須借助于程序轉移指令程序轉移指令的控制;附:轉移指令 轉移指令分為兩種:l無條件轉移指令無條件轉移指令l條件轉移指令條件轉移指令1、無條件轉移指令、無條件轉移指令 格式:格式: JMP 目標目標 說明:說明:l目標通常用標號來表達,根據(jù)轉移的遠 / 近、直接 / 間接不同,可有以下幾種格式: JMP 標號標號 ;段內直接轉移 J
5、MP CX ;段內間接轉移 JMP WORD PTR BX ;段內間接轉移 JMPFAR PTR 標號 ;段間直接轉移 JMP DWORD PTR BXSI ;段間間接轉移2、條件轉移指令、條件轉移指令 基本格式:基本格式: JXX 目標目標 說明:說明:l字母“J”后面的“XX”是指“條件”,如果條件成立,則轉移至“目標”處執(zhí)行,否則順序執(zhí)行。l條件轉移指令共18條,它們均以F寄存器中狀態(tài)標志位作為判斷條件,但執(zhí)行后均不影響各標志位。l此類指令都只能在以當前IP內容為中心的 128 至127字節(jié)范圍內轉移(短轉移)。超過要修改程序。2、條件轉移指令、條件轉移指令 這18條指令又可分為三大類:
6、l簡單條件轉移指令l無符號數(shù)條件轉移指令l帶符號數(shù)條件轉移指令表一 簡單條件轉移指令標志位標志位指指 令令轉移條件轉移條件含含 意意JCJNCCF=1CF=0有進/借位無進/借位CFZFSFOFPFJE / JZJNE / JNZZF=1ZF=0相等/等于0不相等/不等于0JSJNSSF=1SF=0是負數(shù)是正數(shù)JOJNOSF=1SF=0有溢出無溢出JP / JPEJNP / JPOSP F=1SF=0有偶數(shù)個1有奇數(shù)個1表二 無符號數(shù)條件轉移指令指指 令令轉移條件轉移條件含含 意意JA / JNBECF=0 且且 ZF=0JAE / JNBA BA B表三 有符號數(shù)條件轉移指令指指 令令轉移條
7、件轉移條件含含 意意JG / JNLESF=OF 且且 ZF=0JGE / JNLA B A B三、分支結構程序設計 例:判斷兩無符號數(shù)的大小解: DATA SEGMENT DA1 DB ? DA2 DB ? A_MESSAGE DB AB,$ B_MESSAGE DB BA,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,DA1 MOV BL,DA2 CMP AL,BL JA ABIG MOV DX, OFFSET B_MESSAGE MOV AH,9 INT 21H FIN
8、ISH:MOV AH,4CH INT 21H ABIG: MOV DX, OFFSET A_MESSAGE MOV AH,9 INT 21H JMP FINISH CODE ENDS END START 已知AL中存放某ASCII碼,試編制程序,判斷該ASCII碼代表的是數(shù)字,小寫英文字母還是大寫英文字母?用Int 21H中9號功能顯示結果。DATA SEGMENT N_MSG DB Number, $ L_ MSG DB Lowercase, $ C_MSG DB Capital, $ OTHERS DB OHTERS, $DATA ENDSCODE SEGMENT ASSUME CS:CO
9、DE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AL, 11H打開程序文件 CMP AL,30H JB OTHER CMP AL,39H JBE N CMP AL,41H JB OTHER CMP AL,5AH JBE C CMP AL,61H JB OTHER CMP AL,6AH JBE L JMP OTHERN: MOV DX, OFFSET N_MSG MOV AH, 9 INT 21H JMP ENDINGL: MOV DX, OFFSET L_MSG MOV AH, 9 INT 21H JMP ENDINGC: MOV DX, OFFSE
10、T C_MSG MOV AH, 9 INT 21H JMP ENDINGOTHER: MOV DX, OFFSET OTHERS MOV AH, 9 INT 21HENDING: MOV AH, 4CH INT 21HCODE ENDS END START四、循環(huán)程序設計1循環(huán)程序結構循環(huán)程序結構初始化部分處理部分修改計數(shù)器及指針循環(huán)結束?結束處理部分YN循環(huán)控制部分2為何需要循環(huán)?為何需要循環(huán)? 簡化程序的編制 簡少程序對內存的占用。3如何實現(xiàn)循環(huán)?如何實現(xiàn)循環(huán)? 使用條件轉移指令:Jxx 目標 使用循環(huán)控制指令:LOOP 目標 等 4循環(huán)控制指令循環(huán)控制指令 80868088循環(huán)控制指令共
11、有四條,下面介紹其中一條最常用指令: LOOP指令:l指令格式:指令格式: LOOP 目標目標 l指令功能:指令功能: 自動進行循環(huán)次數(shù)的計數(shù)(即CXCX1)后,如計數(shù)寄存器CX0,則轉移到目標單元,否則順序執(zhí)行。相當于這兩條指令: DEC CX JNZJNE 目標l 說明:說明:l 此指令隱含使用CX作為循環(huán)計數(shù)器;l 因此應注意先設置好CX的初始值。例:計算:12320。結果存入AX寄存器。CODE SEGMENT ASSUME CS:CODESTART:MOV CX,0014H MOV AX,0 A: ADD AX,CX LOOP A CODE ENDS END START 初始化部分
12、處理部分 循環(huán)控制部分練習 在數(shù)據(jù)段定義一段長度為100字節(jié)的數(shù)據(jù)區(qū),其各單元內容任意。然后統(tǒng)計該區(qū)中有多少個存儲單元的內容小于或等于5(按無符號數(shù)比較)。將統(tǒng)計結果放在DL中。參考答案:data segment dat db 100 dup(?)data endscode segment assume cs:code, ds:datastart: mov ax, data mov ds, ax參考答案(續(xù)): mov si, offset dat mov dl, 0 mov cx, 100next: cmp byte ptr si, 5 jbe count inc si loop next
13、jmp endingcount: inc dl inc si loop nextending: mov ah, 4ch int 21hcode ends end start五、子程序設計 調用:調用:在主程序中使用命令: CALL 過程名 返回:返回:在子程序中使用命令: RET 結構:結構:主程序子程序1子程序2 過程(子程序)的定義過程(子程序)的定義 l過程定義偽指令的格式如下: 過程名過程名 PROC (NEARFAR) RET RET 過程名過程名 ENDPl說明: NEARFAR:距離類型。NEAR表示此過程僅能供段內其他程序調用。 過程必須在一個邏輯段內。 一個過程可能有多個RE
14、T指令,RET指令可以在過程中的任何位置,不一定放在一個過程的最后,但一個過程執(zhí)行的最后一條指令必定是RET。子程序的一些問題子程序的一些問題l子程序的嵌套l子程序的遞歸調用l子程序的參量傳遞DOS功能子程序課題三課題三一、關于DOS功能子程序 DOS為程序設計人員提供了許多功能子程序,可供用戶直接調用。 DOS共提供了84個功能子程序,這些子程序可分別完成以下功能:, 基本輸入輸出管 理(鍵盤,顯示器等), 系統(tǒng)日期時間的設置與讀出等等, 磁盤的讀寫控制, 文件操作, 目錄操作, 內存管理二、DOS功能子程序的調用 DOS功能子程序的調用要使用中斷指令: INT 21H 我們不必過問程序的內
15、部結構和細節(jié),只要遵照以下方法就可以直接調用:l送入口參量給指定寄存器或存儲單元;送入口參量給指定寄存器或存儲單元;lAH 功能號(子程序編號);功能號(子程序編號);lINT 21H三、部分常用DOS功能子程序 MOV AH,01H INT 21H 說明:l此功能勿需入口參量,出口參量在AL中。l調用后,程序等待鍵盤輸入,直到有一個鍵被按下(用戶輸入一個字符),然后把該字符的ASCII碼送入AL,并在屏幕上顯示該字符。l調用一次,只能輸入一個字符。 與1號功能類同,差異僅在進行調用時,鍵盤輸入的字符不在屏幕上顯示。 如: MOV AH,08H INT 21H3. 字符顯示(字符顯示(2號功能
16、)號功能) 僅能顯示單個字符。 要顯示的字符的ASCII碼要先存放在DL中。如: MOV DL,A ;或MOV DL,41H MOV AH,02H INT 21H 此功能可以實現(xiàn)一次輸入一串字符。 使用本功能前,應先在內存中建立一個緩沖區(qū):l緩沖區(qū)首字節(jié)存放緩沖區(qū)最大長度;緩沖區(qū)首字節(jié)存放緩沖區(qū)最大長度;l緩沖區(qū)第二字節(jié)用以存放實際輸入的字符數(shù)緩沖區(qū)第二字節(jié)用以存放實際輸入的字符數(shù)(不包括回車),這個數(shù)會自動填入;(不包括回車),這個數(shù)會自動填入;l從緩沖區(qū)第三字節(jié)開始存放輸入字符與回車從緩沖區(qū)第三字節(jié)開始存放輸入字符與回車符。符。 調用時,必須用DS:DX指向輸入緩沖區(qū)的段基值:偏移量緩沖區(qū)
17、示意圖 (以要輸入(以要輸入“ABC12”ABC12”為例)為例)M首字節(jié)(已放最大字符個數(shù))次字節(jié)(將存放實際字符個數(shù))實際輸入的字符實際輸入的字符(ASCII碼)回車符DS:DX0100H0102H0103H0104H0105H0106H0107H0108H30H05H41H42H43H31H32H0DHDX0100H例:CHAR_BUF DB 30H DB 0 DB 30H DUP(0) : : MOV DX,SEG CHAR_BUF MOV DS, DX MOV DX, OFFSET CHAR_BUF MOV AH, 0AH INT 21H5. 字符串顯示(字符串顯示(9號功能)號功能
18、) 要顯示的字符串必須先放在內存一個數(shù)據(jù)區(qū)中:l字符串以美元符號“$”作為結束標志;l調用時,把待顯示的字符串首地址的段基值和偏移量分別存入DS和DX中。例:CHAR DB “I am a student”,0Dh, “ $” : : MOV DX, OFFSET CHAR MOV AH,9 INT 21H6、程序結束(、程序結束(4CH號功能)號功能) 結束程序,返回操作系統(tǒng)。 例: MOV AH,4CH INT 21H四、使用實例 通過2號或9號功能將響鈴符(響鈴的ASCII碼)“顯示”出來,即能讓PC喇叭發(fā)聲。課題四課題四匯編語言中的常用運算符 8088/8086宏匯編語言中的操作運算符
19、分為:l算術運算符l邏輯運算符l關系運算符l數(shù)值返回運算符l屬性修改運算符 算術運算符主要有: 加()、減()、乘(*)、除()和模運算符MOD。l其中MOD操作得到的是除法的余數(shù)余數(shù),例如,27 MOD 4,其結果為3。 當算術運算用于地址操作數(shù)時,應保證其結果是一個有意義的存儲器地址,因而通常只使用、運算。 例: MOV AX,12+34相當于 MOV AX,46 邏輯運算符包括:l非(NOT)、與(AND)、或(OR)和異或(XOR) 邏輯運算符的運算對象必須是數(shù)值型的操作數(shù),并且是按位運算。 應當注意邏輯運算符與邏輯運算指令之間的區(qū)別,邏輯運算符的功能是在匯編時由匯編程序匯編程序完成,
20、而邏輯運算指令的功能由CPU完成。 例: MOV AL,11H and 7EH 相當于 MOV AL,10H 關系運算符包括:l相等(EQ)、不等(NE)、小于(LT)、不大于(LE)、大于(GT)和不小于(GE)。 關系運算符用于將兩個操作數(shù)進行比較,若符合比較條件(即關系式成立),所得結果為全1;否則,所得結果為全0。 數(shù)值返回運算符包括:l段基值(SEG)、偏移量(OFFSET)、類型(TYPE)、長度(LENGTH)和字節(jié)總數(shù)(SIZE) 數(shù)值返回運算符用來把存儲器操作數(shù)(變量或標號)分解為它的組成部分(段基值段基值、偏移量偏移量、類型類型、元素個數(shù)總數(shù)元素個數(shù)總數(shù)和數(shù)據(jù)字節(jié)總數(shù)數(shù)據(jù)字
21、節(jié)總數(shù)),并且返回一個表示結果的數(shù)值。續(xù)續(xù)1 這些運算符的格式如下: 運算符運算符 變量變量或標號標號段基值運算符段基值運算符SEG 當運算符SEG加在一個變量名或標號的前面時,得到的運算結果是返回這個變量名或標號所在段的段基值段基值。續(xù)續(xù)2偏移量運算符偏移量運算符OFFSET 當運算符OFFSET加在一個變量名或標號前面時,得到的運算結果是返回這個變量或標號在它段內的偏移量偏移量。例如:MOV SI,OFFSET KX設KX在它段內的偏移量是15H,那么這個指令就等效于:MOV SI,15H續(xù)續(xù)3 偏移量運算符偏移量運算符OFFSET 這個運算符十分有用。例如,現(xiàn)有以ARRAY為首址的字節(jié)數(shù)
22、組,為了逐個字節(jié)進行某種操作,可以使用類似下面的程序:ARRAYDB20DUP(?) MOV SI,OFFSETARRAYLOP:MOVAL,SI INCSI LOOPLOP續(xù)續(xù)4偏移量運算符偏移量運算符OFFSETl在這段程序中,首先把數(shù)組變量的首字節(jié)偏移量送給SI,把寄存器SI作為數(shù)組的地址指針。這樣在數(shù)組的逐個字節(jié)處理(即在LOP循環(huán))中,用寄存器間接尋址方式,每處理完一個字節(jié),就很方便地對地址指針SI進行修改,使它指向下一個字節(jié)。續(xù)續(xù)5類型運算符類型運算符TYPE 運算結果是返回反映變量或標號類型類型的一個數(shù)值。 如果是變量變量,則數(shù)值為字節(jié)數(shù)字節(jié)數(shù),DB為1,DW為2,DD為4,DQ
23、為8,DT為10; 如果是標號標號,則數(shù)值為代表標號類型的數(shù)值代表標號類型的數(shù)值,NEAR為1,F(xiàn)AR為2。續(xù)續(xù)6長度運算符長度運算符LENGTH 這個運算符僅加在變量的前面,返回的值是指數(shù)數(shù)組組變量的元素個數(shù)變量的元素個數(shù)。l如果變量是用重復數(shù)據(jù)操作符DUP說明的,則返回外層DUP給定的值;l如果沒有DUP說明,則返回的值總是1。續(xù)續(xù)7字節(jié)總數(shù)運算符字節(jié)總數(shù)運算符SIZE SIZE運算符僅用于變量的前面,運算結果是返回數(shù)組變量所占的總字節(jié)數(shù)數(shù)組變量所占的總字節(jié)數(shù),也就是等于LENGTH和TYPE兩個運算符返回值的乘積。 如數(shù)組變量ARRAY是用20H DUP(0)定義的,且數(shù)組元素的數(shù)據(jù)類型是字,則MOV AL,SIZE ARRAY等效為:MOV AL,40H 屬性運算符包括:l類型修改(PTR)、短轉移(SHORT)、類型指定(THIS)和段超越運算符(:)。 這種運算符用來對變量、標號或某存儲器操作數(shù)的類型屬性類型屬性進行修改。PTR類型修改類型修改PTR運算符運算符 PTR運算符格式如下: 類型類型 PTR 地址表達式地址表達式 其中,類型可以是BYTE(字節(jié))、WORD(字
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通信基站建設勞務分包合同
- 天津天獅學院《教育機器人與應用》2023-2024學年第二學期期末試卷
- 山西省太原市第四十八中學2025屆高三年級三診物理試題試卷含解析
- 寧夏銀川市興慶區(qū)一中2024-2025學年普通高中質量檢測試題(二)物理試題含解析
- 江西農業(yè)工程職業(yè)學院《精神神經系統(tǒng)整合課程》2023-2024學年第一學期期末試卷
- 江蘇省南通市2024-2025學年中考模擬最后十套:生物試題(四)考前提分仿真卷含解析
- 上海民遠職業(yè)技術學院《西牙語》2023-2024學年第二學期期末試卷
- 遼寧省本溪高級中學2025屆高三第一次統(tǒng)測英語試題含解析
- 山東省濱州市鄒平縣重點中學2025年高中畢業(yè)班第一次診斷性檢測試題物理試題試卷含解析
- 益陽師范高等專科學校《計算機輔助繪圖基礎》2023-2024學年第二學期期末試卷
- 外研版(三起)(2024)三年級下冊英語Unit 1 單元測試卷(含答案)
- 弘揚五四精神主題班會課件
- 2024年第二次廣東省普通高中生物學業(yè)水平合格性考試含答案
- 2025年滁州職業(yè)技術學院單招職業(yè)技能考試題庫及參考答案一套
- 交友主題班會-遠離“背后蛐蛐”課件
- 2025年陜西金融資產管理股份有限公司招聘筆試參考題庫含答案解析
- T-ZAWS 006-2024 企業(yè)安全文化建設等級測評規(guī)范
- 《鋼鐵是怎樣煉成的》超全知識點考點合集
- 《餐飲服務常用英文表達》課件
- 城區(qū)供水設施智能化改造項目概述
- 男裝商場商品知識培訓
評論
0/150
提交評論