第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí).ppt_第1頁(yè)
第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí).ppt_第2頁(yè)
第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí).ppt_第3頁(yè)
第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí).ppt_第4頁(yè)
第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí).ppt_第5頁(yè)
已閱讀5頁(yè),還剩49頁(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)介

23 46 第4章匯編語(yǔ)言程序設(shè)計(jì)知識(shí) 4 1編程的步驟 方法和技巧 4 2匯編語(yǔ)言源程序的編輯和匯編 23 46 4 1編程的步驟 方法和技巧 4 1 1編程的步驟 4 1 2編程的方法和技巧 4 1 3匯編語(yǔ)言程序的基本結(jié)構(gòu) 23 46 4 1 1編程步驟 一 分析問(wèn)題二 確定算法三 畫程序流程圖四 編寫程序 23 46 一 分析問(wèn)題 對(duì)需要解決的問(wèn)題進(jìn)行分析 以求對(duì)問(wèn)題有正確的理解 解決問(wèn)題的任務(wù)是什么 工作過(guò)程 現(xiàn)有的條件 已知數(shù)據(jù) 對(duì)運(yùn)算的精度和速度方面的要求 設(shè)計(jì)的硬件結(jié)構(gòu)是否方便編程 23 46 二 確定算法 算法 是如何將實(shí)際問(wèn)題轉(zhuǎn)化成程序模塊來(lái)處理 在編程以前 先要對(duì)幾種不同的算法進(jìn)行分析 比較 找出最適宜的算法 23 46 三 畫程序流程圖 程序流程圖 是使用各種圖形 符號(hào) 有向線段等來(lái)說(shuō)明程序設(shè)計(jì)過(guò)程的一種直觀的表示 流程圖步驟分得越細(xì)致 編寫程序是也越方便 畫流程圖是程序結(jié)構(gòu)設(shè)計(jì)是采用的一種重要手段 一個(gè)系統(tǒng)軟件有總的流程圖 主程序框圖 和局部的流程圖 流程圖常采用的圖形和符號(hào) 23 46 橢圓框 或桶形框 表示程序的開始或結(jié)束 矩形框 表示要進(jìn)行的工作 菱形框 表示要判斷的事情 菱形框內(nèi)的表達(dá)式表示要判斷的內(nèi)容 圓圈 表示連接點(diǎn) 指向線 表示程序的流向 23 46 四 編寫程序 用89C51匯編語(yǔ)言編寫的源程序行 一條語(yǔ)句 包括四個(gè)部分 也叫四個(gè)字段 標(biāo)號(hào) 操作碼 操作數(shù) 注釋 每個(gè)字段之間要用分隔符分隔 而每個(gè)字段內(nèi)部不能使用分隔符 可以用作分隔符的符號(hào) 空格 冒號(hào) 逗號(hào) 分號(hào) 等 例 LOOP MOVA 00H 立即數(shù)00H A 23 46 標(biāo)號(hào) 標(biāo)號(hào) 是用戶定義的符號(hào)地址 一條指令的標(biāo)號(hào)是該條指令的符號(hào)名字 標(biāo)號(hào)的值是匯編這條指令時(shí)指令的地址 標(biāo)號(hào)由以英文字母開始的1 8個(gè)字母或數(shù)字組成 以冒號(hào) 結(jié)尾 標(biāo)號(hào)可以由賦值偽指令賦值 如果沒(méi)有賦值 匯編程序把存放該指令目標(biāo)碼第一字節(jié)的存儲(chǔ)單元的地址賦給該標(biāo)號(hào) 所以 標(biāo)號(hào)又叫指令標(biāo)號(hào) 23 46 操作碼 操作碼是必不可少的 它用一組字母符號(hào)表示指令的操作碼 在89C51中 由89C51的指令助記符組成 23 46 操作數(shù) 匯編語(yǔ)言指令可能要求或不要求操作數(shù) 所以這一字段可能有也可能沒(méi)有 若有兩個(gè)操作數(shù) 操作數(shù)之間用逗號(hào) 分開操作數(shù)包括的內(nèi)容有 1 工作寄存器 由PSW 3和PSW 4規(guī)定的當(dāng)前工作寄存器區(qū)中的R0 R7 2 特殊功能寄存器 21個(gè)SFR的名字 23 46 操作數(shù) 3 標(biāo)號(hào)名 賦值標(biāo)號(hào) 由匯編指令EQU等賦值的標(biāo)號(hào) 指令標(biāo)號(hào) 指令標(biāo)號(hào)指示的指令的第一字節(jié)地址是該標(biāo)號(hào)的值 4 常數(shù) 可用二進(jìn)制 B 十進(jìn)制 十六進(jìn)制 H 若常數(shù)以字符開頭 前面加0 5 用來(lái)表示程序計(jì)數(shù)器的當(dāng)前值 6 表達(dá)式 匯編時(shí) 計(jì)算出表達(dá)式的值填入目標(biāo)碼 23 46 注釋 注釋部分不是匯編語(yǔ)言的功能部分 只是用于增加程序的可讀性 良好的注釋是匯編語(yǔ)言程序編寫中的重要組成部分 23 46 4 1 2編程的方法和技巧 一 模塊化的程序設(shè)計(jì)方法二 編程技巧 23 46 一 模塊化的程序設(shè)計(jì)方法 1 程序功能模塊化的優(yōu)點(diǎn)2 劃分模塊的原則 23 46 1 程序功能模塊化的優(yōu)點(diǎn) 單個(gè)模塊結(jié)構(gòu)的程序功能單一 易于編寫 調(diào)試和修改 便于分工 從而可使多個(gè)程序員同時(shí)進(jìn)行程序的編寫和調(diào)試工作 加快軟件研制進(jìn)度 程序可讀性好 便于功能擴(kuò)充和版本升級(jí) 對(duì)程序的修改可局部進(jìn)行 其它部分可以保持不變 對(duì)于使用頻繁的子程序可以建立子程序庫(kù) 便于多個(gè)模塊調(diào)用 23 46 2 劃分模塊的原則 每個(gè)模塊應(yīng)具有獨(dú)立的功能 能產(chǎn)生一個(gè)明確的結(jié)果 即單模塊的功能高內(nèi)聚性 模塊之間的控制耦合應(yīng)盡量簡(jiǎn)單 數(shù)據(jù)耦合應(yīng)盡量少 即模塊間的低耦合性 控制耦合 指模塊進(jìn)入和退出的條件及方式 數(shù)據(jù)耦合 指模塊間的信息交換方式 交換量的多少 交換頻繁程度 模塊長(zhǎng)度適中 20條 100條的范圍較合適 23 46 二 編程技巧 1 盡量采用循環(huán)結(jié)構(gòu)和子程序 2 盡量少用無(wú)條件轉(zhuǎn)移指令 3 對(duì)于通用的子程序 考慮到其通用性 除了用于存放子程序入口參數(shù)的寄存器外 子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧 返回前再?gòu)棾?即保護(hù)現(xiàn)場(chǎng) 4 在中斷處理程序中 除了要保護(hù)處理程序中用到的寄存器外 還要保護(hù)標(biāo)志寄存器 5 用累加器傳遞入口參數(shù)或返回參數(shù)比較方便 在子程序中 一般不必把累加器內(nèi)容壓入堆棧 23 46 4 1 3匯編語(yǔ)言程序的基本結(jié)構(gòu) 一 順序程序二 分支程序三 循環(huán)程序四 子程序 23 46 一 順序程序 順序程序是最簡(jiǎn)單的程序結(jié)構(gòu) 即順序結(jié)構(gòu) 程序按順序一條一條地執(zhí)行指令 P92例 23 46 START MOVR0 00HMOVR1 00HMOVR2 00HMOVR3 00HMOVP1 00HMOVR4 FFHMOVR5 FFHMOV30H 00HMOV40H 00HEND 23 46 二 分支程序 程序分支是通過(guò)條件轉(zhuǎn)移指令實(shí)現(xiàn)的 即根據(jù)條件對(duì)程序的執(zhí)行進(jìn)行判斷 滿足條件則進(jìn)行程序轉(zhuǎn)移 不滿足條件就順序執(zhí)行程序 分支程序又分為單分支和多分支結(jié)構(gòu) 多分支程序 首先把分支程序按序號(hào)排列 然后按序號(hào)值進(jìn)行轉(zhuǎn)移 多分支轉(zhuǎn)移結(jié)構(gòu) P97圖4 1 23 46 23 46 二 分支程序 在89C51指令系統(tǒng)中 通過(guò)條件判斷實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有 JZ JNZ CJNE DJNZ等 此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令 如JC JNC JB JNB JBC等 使用這些指令可以完成0 1 正 負(fù) 以及相等 不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移 P97例4 6所示 23 46 JMP 128 MOVA R3RLAMOVDPTR JMPTABJMP A DPTRJMPTAB AJMPROUT00AJMPROUT01 AJMPROUT7F 128個(gè)子程序首址 例4 6 128種分支轉(zhuǎn)移程序 程序框圖 P97圖4 1功能 根據(jù)入口條件轉(zhuǎn)移到128個(gè)目的地址 入口 R3 轉(zhuǎn)移目的地址的序號(hào)00H 7FH 出口 轉(zhuǎn)移到相應(yīng)子程序入口 23 46 說(shuō)明 此程序要求128個(gè)轉(zhuǎn)移目的地址 ROUT00 ROUT7FH 必須駐留在與絕對(duì)轉(zhuǎn)移指令A(yù)JMP相同的一個(gè)2KB存儲(chǔ)區(qū)內(nèi) RL指令對(duì)變址部分乘以2 因?yàn)槊織lAJMP指令占兩個(gè)字節(jié) 23 46 三 循環(huán)程序 在程序運(yùn)行時(shí) 有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序 可以使用循環(huán)程序 其結(jié)構(gòu)包括四部分 1 置循環(huán)初值2 循環(huán)體 循環(huán)工作部分 3 修改控制變量4 循環(huán)控制部分 23 46 1 置循環(huán)初值 對(duì)于循環(huán)程序中所使用的工作單元 在循環(huán)開始時(shí)應(yīng)置初值 例 工作寄存器設(shè)置計(jì)數(shù)初值 累加器A清0 設(shè)置地址指針 長(zhǎng)度等 23 46 2 循環(huán)體 循環(huán)工作部分 重復(fù)執(zhí)行的程序段部分 分為循環(huán)工作部分和循環(huán)控制部分 循環(huán)控制部分每循環(huán)一次 檢查結(jié)束條件 當(dāng)滿足條件時(shí) 就停止循環(huán) 往下繼續(xù)執(zhí)行其他程序 23 46 3 修改控制變量 在循環(huán)程序中 必須給出循環(huán)結(jié)束條件 常見的是計(jì)數(shù)循環(huán) 當(dāng)循環(huán)了一定的次數(shù)后 就停止循環(huán) 在單片機(jī)中 一般用一個(gè)工作寄存器Rn作為計(jì)數(shù)器 對(duì)該計(jì)數(shù)器賦初值作為循環(huán)次數(shù) 每循環(huán)一次 計(jì)數(shù)器的值減1 即修改循環(huán)控制變量 當(dāng)計(jì)數(shù)器的值減為0時(shí) 就停止循環(huán) 23 46 4 循環(huán)控制部分 根據(jù)循環(huán)結(jié)束條件 判斷是否結(jié)束循環(huán) 89C51可采用DJNZ指令來(lái)自動(dòng)修改控制變量并能結(jié)束循環(huán) 2種循環(huán)組織方式 P101圖4 6 23 46 圖4 2循環(huán)組織方式流程圖 23 46 例4 11軟件延時(shí)P1011 采用循環(huán)程序進(jìn)行軟件延時(shí)子程序DELAY MOVR2 data 預(yù)置循環(huán)控制常數(shù)DELAY1 DJNZR2 DELAY1 當(dāng) R2 0時(shí) 轉(zhuǎn)向本身RET 23 46 2 采用雙重循環(huán)的延時(shí)子程序TIME MOVR1 0FAH 1個(gè)機(jī)器周期L1 MOVR0 0FFH 1個(gè)機(jī)器周期W1 DJNZR0 W1 2個(gè)機(jī)器周期DJNZR1 L1 2個(gè)機(jī)器周期NOP 1個(gè)機(jī)器周期NOP 1個(gè)機(jī)器周期RET 2個(gè)機(jī)器周期總的機(jī)器周期數(shù)N 1 1 2 255 2 250 1 1 2延時(shí)時(shí)間t N T 128255 2 256510 s 256 51ms 23 46 4 2匯編語(yǔ)言源程序的編輯和匯編 4 2 1源程序編輯 4 2 2源程序的匯編 4 2 3偽指令 23 46 4 2 1源程序編輯 在微型計(jì)算機(jī)上 借助編輯軟件 編寫或修改匯編語(yǔ)言源程序 如行編輯或屏幕編輯軟件 23 46 4 2 2源程序的匯編 匯編 將匯編語(yǔ)言源程序轉(zhuǎn)換為機(jī)器碼表示的目標(biāo)程序的過(guò)程 對(duì)單片機(jī)有 一 手工匯編二 機(jī)器匯編三 反匯編 23 46 一 手工匯編 通過(guò)手工方式查指令編碼表 P307附錄A指令表 逐個(gè)把助記符指令 翻譯 成機(jī)器碼 然后把得到的機(jī)器碼程序鍵入單片機(jī) 進(jìn)行調(diào)試和運(yùn)行 手工匯編的缺點(diǎn) 1 偏移量的計(jì)算麻煩且容易出錯(cuò)2 程序的修改會(huì)引起后面指令地址的變化 轉(zhuǎn)移指令的偏移量也要重新計(jì)算 23 46 二 機(jī)器匯編 機(jī)器匯編是在計(jì)算機(jī)上使用交叉匯編程序進(jìn)行源程序的匯編 匯編工作由機(jī)器自動(dòng)完成 最后得到以機(jī)器碼表示的目標(biāo)程序 匯編完成后 再由PC機(jī)把生成的目標(biāo)程序加載到用戶樣機(jī)上 23 46 三 反匯編 將二進(jìn)制機(jī)器語(yǔ)言程序翻譯成匯編語(yǔ)言程序的過(guò)程稱反匯編 匯編和反匯編的過(guò)程 P108圖4 10 圖4 10匯編和反匯編過(guò)程 23 46 4 2 3偽指令 偽指令 由英文字母表示的匯編命令 偽指令不是真正的指令 無(wú)對(duì)應(yīng)的機(jī)器碼 在匯編時(shí)不產(chǎn)生目標(biāo)程序 只是用來(lái)對(duì)匯編過(guò)程進(jìn)行某種控制 89C51有8個(gè)偽指令 ORGENDEQUDATADBDWDSBIT 23 46 1 ORG匯編起始命令 格式 ORG16位地址功能 規(guī)定該偽指令后面程序的匯編地址 即匯編后生成目標(biāo)程序存放的起始地址 例 ORG2000HSTART MOVA 64H 規(guī)定了START的地址是2000H 規(guī)定了匯編后的第一條指令碼從2000H開始存放 23 46 2 END匯編結(jié)束指令 格式 END功能 通知匯編程序結(jié)束匯編 在END之后所有的匯編指令均不予以處理 23 46 3 EQU賦值命令 格式 字符名稱EQU項(xiàng) 數(shù)或匯編符號(hào) 功能 把 項(xiàng) 賦給 字符名稱 注意 字符名稱不等于標(biāo)號(hào) 其后沒(méi)有冒號(hào) 其中的項(xiàng) 可以是數(shù) 也可以是匯編符號(hào) EQU賦值過(guò)的符號(hào)名可用作數(shù)據(jù) 代碼地址 位地址或一個(gè)立即數(shù) 可以是8位的 也可以是16位的 23 46 3 EQU賦值命令 例1 AAEQUR1MOVA AA AA代表工作寄存器R1例2 A10EQU10DELYEQU07EBHMOVA A10 A10作為片內(nèi)的一個(gè)直接地址LCALLDELY DELY作為一個(gè)16位子程序的入口地址 23 46 4 DATA數(shù)據(jù)地址賦值命令 格式 字符名稱DATA表達(dá)式功能 與EQU類似 但有以下差別 1 EQU定義的字符名必須先定義后使用 DATA定義的字符名可后定義先使用 2 用EQU偽指令可把一個(gè)匯編符號(hào)賦給一個(gè)名字而DATA只能把數(shù)據(jù)賦給字符名 3 DATA語(yǔ)句可把一個(gè)表達(dá)式的值賦給字符名稱其中的表達(dá)式應(yīng)是可求值的 DATA偽指令在程序中用來(lái)定義數(shù)據(jù)地址 23 46 5 DB定義字節(jié)命令 格式 DB 項(xiàng)或項(xiàng)表 功能 通知匯編程序從當(dāng)前ROM地址開始 保留一個(gè)字節(jié)或字節(jié)串的存儲(chǔ)單元 并存入DB后的數(shù)據(jù) 注意 項(xiàng)或項(xiàng)表可以是一個(gè)字節(jié) 用逗號(hào)隔開的字節(jié)串或括在單引號(hào)中的ASCII字符串 23 46 例 ORG2000HDB0A3HLIST DB26H 03HSTR DB ABC 經(jīng)匯編后 2000H 0A3H 2001H 26H 2002H 03H 2003H 41H 2004H 42H 2005H 43H 41H 42H 43H分別為A B C的ASCII碼 23 46 6 DW定義字命令 格式 DW16位數(shù)據(jù)項(xiàng)或項(xiàng)表功能 把DW后的16位數(shù)據(jù)項(xiàng)或項(xiàng)表從當(dāng)前地址連續(xù)存放 每項(xiàng)數(shù)值為16位二進(jìn)制數(shù)高8位先放 低8位后存放 DW用于定義一個(gè)地址表 23 46 例 ORG1500HTABLE DW7234H 8AH 10H 經(jīng)匯編后 1500H 72H 1501H 34H 1502H 00H 1503H 8AH 1504H 00H 1505H 10H 23 46 7 DS定義存儲(chǔ)空間命令 格式 DS表達(dá)式功能 在匯編時(shí) 從指定地址開始

溫馨提示

  • 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)論