清華電子系李老師計(jì)算機(jī)硬件技術(shù)基礎(chǔ)Chap3_449[1]_第1頁(yè)
清華電子系李老師計(jì)算機(jī)硬件技術(shù)基礎(chǔ)Chap3_449[1]_第2頁(yè)
清華電子系李老師計(jì)算機(jī)硬件技術(shù)基礎(chǔ)Chap3_449[1]_第3頁(yè)
清華電子系李老師計(jì)算機(jī)硬件技術(shù)基礎(chǔ)Chap3_449[1]_第4頁(yè)
清華電子系李老師計(jì)算機(jī)硬件技術(shù)基礎(chǔ)Chap3_449[1]_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.,1,第六節(jié) 匯編語(yǔ)言程序設(shè)計(jì) 講課內(nèi)容 一、概述 1. 編寫(xiě)匯編語(yǔ)言程序步驟 2. 判斷程序質(zhì)量的標(biāo)準(zhǔn) 3. 幾種程序結(jié)構(gòu) 二、匯編語(yǔ)言程序設(shè)計(jì)舉例 例1 將寄存器BX中的內(nèi)容以十六進(jìn)制形式顯示出來(lái)。 例2 將鍵盤(pán)輸入的十進(jìn)制數(shù)據(jù)串轉(zhuǎn)換成其相應(yīng)大小的數(shù)值 存放在BX寄存器中。 復(fù)習(xí)內(nèi)容:p110p140,.,2,1、作業(yè) 3-16,3-20 2、選擇其中之一大作業(yè),(1)、實(shí)驗(yàn)四 任務(wù)1,作為家庭作業(yè),在計(jì)算機(jī)上調(diào)通, 經(jīng)過(guò)教師檢查 簽字。 (2)、閱讀教課書(shū)中 P125 P132 (3.8.1 3.8.4節(jié)) 的程序并寫(xiě)出總結(jié)(程序內(nèi)涵)。 內(nèi)容: 子程與主程的參數(shù)傳送: 用寄存器傳送

2、用定義的變量傳送, 利用地址表傳送 用堆棧傳送,.,3,一、概述 1. 編寫(xiě)匯編語(yǔ)言程序步驟 2. 判斷程序質(zhì)量的標(biāo)準(zhǔn) 3. 幾種程序結(jié)構(gòu),.,4,一. 編寫(xiě)匯編語(yǔ)言程序步驟 分析實(shí)際問(wèn)題,抽象描述問(wèn)題的模型 確定解決模型的算法 按算法畫(huà)出程序流程圖 按流程圖編寫(xiě)程序 上機(jī)調(diào)試, 運(yùn)行程序,.,5,2. 判斷程序質(zhì)量的標(biāo)準(zhǔn) 程序的正確性 程序的可讀性 程序的執(zhí)行時(shí)間 程序所占內(nèi)存大小,.,6,3幾種程序結(jié)構(gòu) 順序結(jié)構(gòu) 分支結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 子程結(jié)構(gòu),.,7,順序結(jié)構(gòu),.,8,分支結(jié)構(gòu),.,9,Y,Y,N,N,分支結(jié)構(gòu),.,10,循環(huán)結(jié)構(gòu),當(dāng)型循環(huán) (當(dāng)條件成立進(jìn)入循環(huán)),直到型循環(huán) (直到條件成

3、立退出循環(huán)),.,11,1多處調(diào)用完成同一功能的子程: code SEGMENT start: 、 CALL subp 、 CALL subp 、 CALL subp 、 MOV AH, 4CH INT 21H subp PROC 、 、 RET subp ENDP code ENDS END start,2模塊化程序設(shè)計(jì): 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,子程結(jié)構(gòu),注意返回DOS語(yǔ)句位置,.,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功能調(diào)用處, 最后的結(jié)果是死機(jī).,.,13,二、匯編語(yǔ)言程序設(shè)計(jì)舉例 例1 將寄存器BX中的內(nèi)容以十六進(jìn)制形式顯示出來(lái)。 (二進(jìn)制 十六進(jìn)制) 例2 將鍵盤(pán)輸入的十進(jìn)制

5、數(shù)據(jù)串轉(zhuǎn)換成其相應(yīng)大小的數(shù)值 存放在BX寄存器中。,.,14,有關(guān)字符、數(shù)碼轉(zhuǎn)換的處理 1. 計(jì)算機(jī)處理字符時(shí),常用的字符編碼是ASCII 碼。 2. 數(shù)字和字母的ASCII碼是一個(gè)有序序列 數(shù)字09 : 30H 39H 大寫(xiě)字母AZ : 41H 5AH 小寫(xiě)字母az : 61H 7AH,.,15,3. 計(jì)算機(jī)處理信息時(shí),其對(duì)象都是二進(jìn)制數(shù)。 外設(shè)(顯示器、打印機(jī)、鍵盤(pán)等) 用ASCII碼與CPU進(jìn)行信息傳送。 例如: (1) 在鍵盤(pán)上按下某一字符鍵 (如9), 鍵盤(pán)接口向鍵盤(pán)緩沖區(qū)送去的是該字符的ASCII碼(如39H), 不是送數(shù)字09H。 ( 2) 在文本方式下,要在顯示器上顯示某一字符

6、(如A), 須將該字符的ASCII碼(如41H)送顯示緩沖區(qū), 不是送數(shù)字0AH。,計(jì)算機(jī)要利用顯示器、鍵盤(pán)等外設(shè)時(shí), 須據(jù)程序設(shè)計(jì)的需要進(jìn)行有關(guān)轉(zhuǎn)換。,.,16,例 將CPU運(yùn)算的結(jié)果通過(guò)顯示器顯示時(shí),如二進(jìn)制數(shù)“A9” 需將結(jié)果轉(zhuǎn)換成其對(duì)應(yīng)的ASCII碼才能進(jìn)行顯示。,.,17,例 CPU要處理從鍵盤(pán)輸入的某一數(shù)據(jù),如鍵入“1234” 需將該數(shù)據(jù)串進(jìn)行轉(zhuǎn)換十六進(jìn)制后才能應(yīng)用。,.,18,例1 將BX寄存器中的內(nèi)容以十六進(jìn)制形式顯示出來(lái)。,BX是一個(gè)16位寄存器 二進(jìn)制 1010 1001 0011 1110,用十六進(jìn)顯示時(shí),每4位用一個(gè)字符顯示,共4個(gè) 其中: 0000 0 30H , 1

7、010 A 41H 0001 1 31H , 1011 B 42H 、 、 1001 9 39H , 1111 F 46H,十六進(jìn)制 A 9 3 E,屏幕上的顯示 A 9 3 E,對(duì)應(yīng)的ASCII 41H 39H 33H 45H,.,19,算法: 取出要顯示的某4位,轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼, 再調(diào)用DOS系統(tǒng)功能進(jìn)行顯示。,(1) 對(duì)于00001001(09), 先擴(kuò)展成一個(gè)字節(jié),高4位清0, 加上30H后, 即可得字符09對(duì)應(yīng)的ASCII碼。 0000 0001B + 30H= 31H 0000 1001B + 30H=39H 0001B 1 1001B 9,(2) 對(duì)于10101111(

8、AF), 先擴(kuò)展成一個(gè)字節(jié),高4位清0, 加上30H后, 還要再加上07H,才能得到AF 對(duì)應(yīng)的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 ;字符個(gè)數(shù) MOV CL, 4 ;循環(huán)移位次數(shù) next: ROL BX, CL ;取顯示位的值 MOV DL, BL ;保存在DL中 AND DL, 0FH ;清除高4位 ADD DL, 30H ;轉(zhuǎn)變?yōu)閿?shù)字的ASCII CMP DL, 39H ;大于39H

9、, 則應(yīng)轉(zhuǎn)變 JLE print ;為字母AF的ASCII ADD DL, 07H print: MOV AH, 2H ;顯示DL中的字符 INT 21H DEC CH ;顯示結(jié)束? JNZ next MOV AH, 4CH ;返回DOS INT 21H code ENDS END start,.,21,思考: 1. 例1采用的是大寫(xiě)字母AF進(jìn)行顯示, 若采用小寫(xiě)字符a f 進(jìn)行顯示,程序如何改寫(xiě)? 1010 0011 1001 1110 A39E 或 a39e,2. 編程將 CPU 內(nèi) 14個(gè) 16位寄存器當(dāng)前的內(nèi)容 分別用十六進(jìn)制形式顯示出來(lái)。,.,22,編程將CPU內(nèi)14個(gè)16位寄存器當(dāng)

10、前的內(nèi)容 分別用十六進(jìn)制形式顯示出來(lái)。 要點(diǎn): 將上例改寫(xiě)為一個(gè)子程,入口參數(shù)為BX 子程中注意寄存器值的保存和恢復(fù) 注意: CS 、IP、PSW寄存器值的獲取方法,.,23,例 將CPU內(nèi)14個(gè)16位寄存器當(dāng)前內(nèi)容分別用16進(jìn)制形式顯示出來(lái) (采用DEBUG下R命令的顯示順序),.,24,用十六進(jìn)制顯示 BX內(nèi)容子程,.,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檢測(cè)結(jié)果 -R ;顯示當(dāng)

11、前寄存器內(nèi)容 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 -,運(yùn)行的結(jié)果與用R命令顯示的結(jié)果相同, 程序運(yùn)行結(jié)果正確,.,26,例2

12、 將鍵盤(pán)輸入的十進(jìn)制數(shù)據(jù)串轉(zhuǎn)換成相應(yīng)大小的十六進(jìn) 制數(shù)值存放在BX寄存器中。,問(wèn)題:要轉(zhuǎn)換成1234 即 04D2h存放在BX中, 怎么實(shí)現(xiàn)?,.,27,算法一: 數(shù)值大小 = 各位值權(quán)值之和 1234D = 千位1000 + 百位100 + 十位10 + 個(gè)位 = 11000 + 2100 + 310 + 4 = 0000 0100 1101 0010B = 04D2H,.,28,算法二: 數(shù)值大小 =部分和10 +下一位數(shù)值 1234D = ( ( ( 010 + 1 ) 10 + 2 ) 10 + 3 ) 10 + 4 = 0000 0100 1101 0010B = 04D2H 部分和

13、從0開(kāi)始,循環(huán)次數(shù)等于輸入的位數(shù),.,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 程序存在的問(wèn)題: 1未處理輸入非數(shù)字字符的情況 2輸入的十進(jìn)制數(shù)范圍為065535 3當(dāng)輸入字符個(gè)數(shù)為0(直接回車(chē))時(shí),結(jié)果錯(cuò)誤 4未處理負(fù)數(shù)情況 5結(jié)果的顯示未換行 Input:1234 最后看到的是:0D42t:1234,.,34,編寫(xiě)子程序的注意事項(xiàng): 注意子程中PUSH、POP應(yīng)成對(duì),否則易造成死機(jī)。,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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論