版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.,1,第六節(jié) 匯編語言程序設計 講課內容 一、概述 1. 編寫匯編語言程序步驟 2. 判斷程序質量的標準 3. 幾種程序結構 二、匯編語言程序設計舉例 例1 將寄存器BX中的內容以十六進制形式顯示出來。 例2 將鍵盤輸入的十進制數據串轉換成其相應大小的數值 存放在BX寄存器中。 復習內容:p110p140,.,2,1、作業(yè) 3-16,3-20 2、選擇其中之一大作業(yè),(1)、實驗四 任務1,作為家庭作業(yè),在計算機上調通, 經過教師檢查 簽字。 (2)、閱讀教課書中 P125 P132 (3.8.1 3.8.4節(jié)) 的程序并寫出總結(程序內涵)。 內容: 子程與主程的參數傳送: 用寄存器傳送
2、用定義的變量傳送, 利用地址表傳送 用堆棧傳送,.,3,一、概述 1. 編寫匯編語言程序步驟 2. 判斷程序質量的標準 3. 幾種程序結構,.,4,一. 編寫匯編語言程序步驟 分析實際問題,抽象描述問題的模型 確定解決模型的算法 按算法畫出程序流程圖 按流程圖編寫程序 上機調試, 運行程序,.,5,2. 判斷程序質量的標準 程序的正確性 程序的可讀性 程序的執(zhí)行時間 程序所占內存大小,.,6,3幾種程序結構 順序結構 分支結構 循環(huán)結構 子程結構,.,7,順序結構,.,8,分支結構,.,9,Y,Y,N,N,分支結構,.,10,循環(huán)結構,當型循環(huán) (當條件成立進入循環(huán)),直到型循環(huán) (直到條件成
3、立退出循環(huán)),.,11,1多處調用完成同一功能的子程: code SEGMENT start: 、 CALL subp 、 CALL subp 、 CALL subp 、 MOV AH, 4CH INT 21H subp PROC 、 、 RET subp ENDP code ENDS END start,2模塊化程序設計: code SEGMENT begin: CALL sub1 CALL sub2 CALL sub3 MOV AH, 4CH INT 21H sub1 PROC 、 RET sub1 ENDP sub2 PROC 、 RET sub2 ENDP sub3 PROC 、 RE
4、T sub3 ENDP code ENDS END begin,子程結構,注意返回DOS語句位置,.,12,思考如下程序的執(zhí)行流程: code SEGMENT start: 、 CALL subp 、 CALL subp 、 ; MOV AH, 4CH ; INT 21H subp PROC 、 、 RET subp ENDP MOV AH, 4CH INT 21H code ENDS END start,程序執(zhí)行不到返回DOS功能調用處, 最后的結果是死機.,.,13,二、匯編語言程序設計舉例 例1 將寄存器BX中的內容以十六進制形式顯示出來。 (二進制 十六進制) 例2 將鍵盤輸入的十進制
5、數據串轉換成其相應大小的數值 存放在BX寄存器中。,.,14,有關字符、數碼轉換的處理 1. 計算機處理字符時,常用的字符編碼是ASCII 碼。 2. 數字和字母的ASCII碼是一個有序序列 數字09 : 30H 39H 大寫字母AZ : 41H 5AH 小寫字母az : 61H 7AH,.,15,3. 計算機處理信息時,其對象都是二進制數。 外設(顯示器、打印機、鍵盤等) 用ASCII碼與CPU進行信息傳送。 例如: (1) 在鍵盤上按下某一字符鍵 (如9), 鍵盤接口向鍵盤緩沖區(qū)送去的是該字符的ASCII碼(如39H), 不是送數字09H。 ( 2) 在文本方式下,要在顯示器上顯示某一字符
6、(如A), 須將該字符的ASCII碼(如41H)送顯示緩沖區(qū), 不是送數字0AH。,計算機要利用顯示器、鍵盤等外設時, 須據程序設計的需要進行有關轉換。,.,16,例 將CPU運算的結果通過顯示器顯示時,如二進制數“A9” 需將結果轉換成其對應的ASCII碼才能進行顯示。,.,17,例 CPU要處理從鍵盤輸入的某一數據,如鍵入“1234” 需將該數據串進行轉換十六進制后才能應用。,.,18,例1 將BX寄存器中的內容以十六進制形式顯示出來。,BX是一個16位寄存器 二進制 1010 1001 0011 1110,用十六進顯示時,每4位用一個字符顯示,共4個 其中: 0000 0 30H , 1
7、010 A 41H 0001 1 31H , 1011 B 42H 、 、 1001 9 39H , 1111 F 46H,十六進制 A 9 3 E,屏幕上的顯示 A 9 3 E,對應的ASCII 41H 39H 33H 45H,.,19,算法: 取出要顯示的某4位,轉換為對應的ASCII碼, 再調用DOS系統(tǒng)功能進行顯示。,(1) 對于00001001(09), 先擴展成一個字節(jié),高4位清0, 加上30H后, 即可得字符09對應的ASCII碼。 0000 0001B + 30H= 31H 0000 1001B + 30H=39H 0001B 1 1001B 9,(2) 對于10101111(
8、AF), 先擴展成一個字節(jié),高4位清0, 加上30H后, 還要再加上07H,才能得到AF 對應的ASCII碼 0000 1010B+30H+07H = 41H 0000 1111B+30H+07H =46H 1010B A 1111B F,.,20,code SEGMENT ASSUME CS:code start: MOV CH, 4 ;字符個數 MOV CL, 4 ;循環(huán)移位次數 next: ROL BX, CL ;取顯示位的值 MOV DL, BL ;保存在DL中 AND DL, 0FH ;清除高4位 ADD DL, 30H ;轉變?yōu)閿底值腁SCII CMP DL, 39H ;大于39H
9、, 則應轉變 JLE print ;為字母AF的ASCII ADD DL, 07H print: MOV AH, 2H ;顯示DL中的字符 INT 21H DEC CH ;顯示結束? JNZ next MOV AH, 4CH ;返回DOS INT 21H code ENDS END start,.,21,思考: 1. 例1采用的是大寫字母AF進行顯示, 若采用小寫字符a f 進行顯示,程序如何改寫? 1010 0011 1001 1110 A39E 或 a39e,2. 編程將 CPU 內 14個 16位寄存器當前的內容 分別用十六進制形式顯示出來。,.,22,編程將CPU內14個16位寄存器當
10、前的內容 分別用十六進制形式顯示出來。 要點: 將上例改寫為一個子程,入口參數為BX 子程中注意寄存器值的保存和恢復 注意: CS 、IP、PSW寄存器值的獲取方法,.,23,例 將CPU內14個16位寄存器當前內容分別用16進制形式顯示出來 (采用DEBUG下R命令的顯示順序),.,24,用十六進制顯示 BX內容子程,.,25,D:LIST_REG ;在DOS下執(zhí)行程序 0000 0000 00FF 0BDF 0000 0912 0000 0000 0BDF 0BDF 0BEF 0BEF 0000 3202 D: DEBUG LIST_REG.EXE ;利用DEBUG檢測結果 -R ;顯示當
11、前寄存器內容 AX=0000 BX=0000 CX=007B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=128E ES=128E SS=129E CS=129E IP=0000 NV UP EI PL NZ NA PO NC 129E:0000 53 PUSH BX -G ;執(zhí)行程序 0000 0000 007B 0000 0000 0000 0000 0000 128E 128E 129E 129E 0000 7202 Program terminated normally -,運行的結果與用R命令顯示的結果相同, 程序運行結果正確,.,26,例2
12、 將鍵盤輸入的十進制數據串轉換成相應大小的十六進 制數值存放在BX寄存器中。,問題:要轉換成1234 即 04D2h存放在BX中, 怎么實現(xiàn)?,.,27,算法一: 數值大小 = 各位值權值之和 1234D = 千位1000 + 百位100 + 十位10 + 個位 = 11000 + 2100 + 310 + 4 = 0000 0100 1101 0010B = 04D2H,.,28,算法二: 數值大小 =部分和10 +下一位數值 1234D = ( ( ( 010 + 1 ) 10 + 2 ) 10 + 3 ) 10 + 4 = 0000 0100 1101 0010B = 04D2H 部分和
13、從0開始,循環(huán)次數等于輸入的位數,.,29,.,30,input PROC LEA DX , string MOV AH , 09H INT 21H LEA DX , num MOV AH , 0AH INT 21H RET input ENDP CODE ENDS END start,.,31,change子程序流程圖,change PROC LEA SI, num+2 MOV CL, num+1 MOV CH, 0 MOV AX, 0 MOV DI, 10 next: MUL DI MOV BH, 0 MOV BL, SI AND BL, 0FH ADD AX, BX INC SI LOO
14、P next zero: MOV BX, AX RET change ENDP,1234D = ( ( ( 010 + 1 ) 10 + 2 ) 10 + 3 ) 10 + 4,.,32,list_bx子程序流程圖,list_bx PROC MOV CH, 4 MOV CL, 4 next: ROL BX, CL MOV DL, BL AND DL, 0FH ADD DL, 30H CMP DL, 39H JLE print ADD DL, 07H print: MOV AH, 2H INT 21H DEC CH JNZ next RET ;子程返回 list_bx ENDP code END
15、S END start,.,33,例2 程序存在的問題: 1未處理輸入非數字字符的情況 2輸入的十進制數范圍為065535 3當輸入字符個數為0(直接回車)時,結果錯誤 4未處理負數情況 5結果的顯示未換行 Input:1234 最后看到的是:0D42t:1234,.,34,編寫子程序的注意事項: 注意子程中PUSH、POP應成對,否則易造成死機。,data SEGMENT string DB Hello,$ data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data MOV DS, AX CALL input MOV AH, 4CH INT 21H input PROC PUSH AX LEA DX, string MOV AH, 09H INT 21H RET input ENDP code ENDS END start,.,35,例 下面程序段,思考是否可以完成 AX CX, BXDX,CODE SEGMENT ASSUME CS:code start: MOV AX,data MOV DS,AX PUSH AX PUSH BX CALL sub MOV AH
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 93溶質的質量分數(第課時)課件九年級化學人教版下冊
- 溶解的限度第課時課件-九年級化學北京版下冊-1
- 06年中考英語二輪復習語法專項突破課件(安徽)專題十四復合句
- 2025-2030家居清潔機械設備行業(yè)市場供需發(fā)展現(xiàn)狀分析調研以及投資組合趨向布局規(guī)劃涉及報告
- 大型機械設備操作規(guī)程指導
- 2026年中壓電氣設備選型指南
- 2026年照明設備的選型與應用
- 2026年未來電子產品的市場趨向與挑戰(zhàn)
- 幼兒園防溺水安全教育教案范文
- 工廠搬遷方案試卷教案(2025-2026學年)
- 2025年西藏自治區(qū)公務員面試結構化真題匯編試卷(含答案)
- 2025及未來5年軸功率監(jiān)測器項目投資價值分析報告
- 基于深度圖的三維重建算法優(yōu)化:理論、實踐與創(chuàng)新
- 吸煙有害健康課件教學
- 2025年公司押運年終總結樣本(五篇)
- 2025屆央國企校招筆試真題及答案
- 2025年新蘇教版七上生物知識點歸納
- 2025教育機構全職教師勞動合同(示范文本)
- 安全協(xié)議責任書模板
- 卵巢顆粒細胞瘤的診治進展2025
- 2025甘肅慶陽正寧縣公安局招聘警務輔助人員40人考試參考試題及答案解析
評論
0/150
提交評論