freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

單片機(jī)原理與應(yīng)用-4匯編語(yǔ)言程序設(shè)計(jì)(編輯修改稿)

2025-02-16 02:57 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 偏移量正好是 R3中相應(yīng)值的兩倍。 程序 AJMP addr11 2字節(jié)指令 例 試編寫(xiě)計(jì)算下式的程序 Y=a2+ b (當(dāng) b≥10時(shí) ) Y=a2- b (當(dāng) b10時(shí) ) ORG 0000H START: MOV A, a MOV B, A MUL AB ; BA= a2 MOV R0,A ; R1R0= a2 MOV R1,B MOV A,b CJNE A,0AH,MMN ; b≠ 10則轉(zhuǎn)移 MM: ADD A,R0 ; b≥10, a2+b=Y MOV R0,A MOV A,00H ADDC A,R1 MOV R1,A JMP MMNN MMN: JNC MM ;無(wú)借位 ( 即 b10) 轉(zhuǎn) MM MOV R3,A ; R3←b MOV A, R0 CLR C SUBB A,R3 ; R1R0←a 2- b MOV R0,A MOV A,R1 SUBB A,00H MOV R1,A MMNN: MOV Y0, R0 ; Y1Y0← 結(jié)果 MOV Y1,R1 HERE: AJMP HERE 167。 44 循環(huán) 結(jié)構(gòu)程序設(shè)計(jì) ? 特點(diǎn):程序中含有重復(fù)執(zhí)行的程序段 ? 例如:求 100個(gè)數(shù)的累加和可以用一條加法指令,并使之循環(huán)執(zhí)行 100次來(lái)完成。 循環(huán)程序的好處 ? 縮短所編程序的長(zhǎng)度,把需要重復(fù)的程序段放在循環(huán)體內(nèi)。 ? 減少程序所占內(nèi)存單元個(gè)數(shù) ? 改善縮編程序可讀性,提高程序設(shè)計(jì)時(shí)效 循環(huán)程序的構(gòu)成 ? 循環(huán)程序的組成 1)循環(huán)初始化 確立循環(huán)變量初值(例如:源指針和目的指針初值)。 確立循環(huán)計(jì)數(shù)器初值,決定循環(huán)次數(shù)。 2)循環(huán)體-可以重復(fù)執(zhí)行的程序段 循環(huán)處理-完成循環(huán)變量的處理和修改 循環(huán)控制-判斷循環(huán)計(jì)數(shù)器是否需要結(jié)束循環(huán) 3)循環(huán)結(jié)束處理 處理循環(huán)程序的結(jié)果 循環(huán)程序的類型 ? 循環(huán)程序有以下兩種類型 例 16. 把內(nèi)部 RAM中起始地址為 DATA的數(shù)據(jù)串傳送到外部 RAM以 BUFFER為首地址的區(qū)域,直到發(fā)現(xiàn)“ $”字符的 ASCII碼為止,數(shù)據(jù)串的最大長(zhǎng)度在內(nèi)存 20H中。 MOV R0,DATA ;數(shù)據(jù)區(qū)首地址 MOV DPTR,BUFFER ;數(shù)據(jù)區(qū)長(zhǎng)度指針 LOOP: MOV A, @R0 CJNE A,24H , LOOP2 ;判是否為 “ $”符 (24H) SJMP LOOP1 ;是 “ $”符 , 則結(jié)束 LOOP2: MOV A,@R0 ;不是 “ $”符 , 則傳送 MOVX @DPTR,A INC R0 INC DPTR DJNZ 20H,LOOP ;數(shù)據(jù)串未查完 , 繼續(xù) LOOP1: RET DATA: … ;數(shù)據(jù)串 注:本題中循環(huán)控制條件有二個(gè),一個(gè)是條件循環(huán)控制,以找到ASCII碼 “ $”符為循環(huán)結(jié)束條件,這是主要的結(jié)構(gòu);笫二個(gè)是計(jì)數(shù)循環(huán)結(jié)構(gòu),萬(wàn)一找不到 ASCII碼 “ $”符,則由數(shù)據(jù)串的最大長(zhǎng)度作為計(jì)數(shù)循環(huán)控制。 ? 已知數(shù)據(jù)塊長(zhǎng)度 L,編程求累加和 ? 已知塊長(zhǎng) L,編程求其最大值,并送 MAX 167。 45 子程序 什么是子程序 ? 編寫(xiě)匯編語(yǔ)言源程序時(shí) , 把經(jīng)常用到的一些程序段落編寫(xiě)成一個(gè)相對(duì)獨(dú)立的程序 , 用到時(shí)可以隨意調(diào)用并能自動(dòng)返回 。 被調(diào)用的程序稱作 子程序 ; 調(diào)用子程序的程序稱作 主程序 。 子程序的調(diào)用是匯編語(yǔ)言程序設(shè)計(jì)中的一種很重要的手段 , 微處理機(jī)指令系統(tǒng)中往往都設(shè)置有專門(mén)用于子程序 調(diào)用 和 返回 的指令 。 ?調(diào)用子程序的過(guò)程也像程序轉(zhuǎn)移一樣是通過(guò)修改程序計(jì)數(shù) 器 PC中的數(shù)值來(lái)實(shí)現(xiàn)的 。 ?它與一般程序轉(zhuǎn)移過(guò)程的區(qū)別在于: 子程序調(diào)用時(shí) , 先將程序計(jì)數(shù)器 PC的值壓入堆棧中保護(hù)起來(lái) 。 返回時(shí) , 以 RET指令結(jié)束 , 再將主程序調(diào)用時(shí)PC值從堆棧彈回 , 從而使程序能夠返回至主程序的調(diào)用處 。 ?這種設(shè)計(jì)的實(shí)現(xiàn)完全依賴于堆棧的先進(jìn)后出特性 , 必須使返回主程序時(shí)的堆棧指針 SP值與調(diào)用之時(shí)相等 , 否則將無(wú)法保證程序的正確返回 。 子程序的操作過(guò)程 ? ⑴ 子程序的第 1條語(yǔ)句必須要有標(biāo)號(hào) , 以便作為調(diào)用指令的調(diào)用名稱; ? ⑵ 子程序必須以 RET指令結(jié)束 , 以便能夠正確返回主程序; ? ⑶ 子程序應(yīng)有操作功能說(shuō)明 , 以便調(diào)用時(shí)參考; ? ⑷ 子程序應(yīng)該注明 入口條件 , 便于調(diào)用時(shí)設(shè)法給予滿足; ? ⑸ 子程序應(yīng)該標(biāo)注 出口條件 , 便于主程序的很好銜接 。 子程序的編寫(xiě)要點(diǎn) 子程序調(diào)用的現(xiàn)場(chǎng)保護(hù) 為了防止子程序中所使用的寄存器的內(nèi)容被修改后對(duì)主程序的錯(cuò)誤影響 , 必須對(duì) 主程序中所用到的 、 而在子程序中也必須使用的寄存器 在調(diào)用子程序之時(shí) , 對(duì)其內(nèi)容進(jìn)行保護(hù) 。 MCS51常用的數(shù)據(jù)保護(hù)方法通常有以下三種: ? ⑴ 利用 四組工作寄存器互換 的方法 , 使主程序與子程序使用不同組別工作寄存器 , 從而可以保護(hù)工作寄存器 R0~ R7中的數(shù)據(jù)不受破壞; ? ⑵ 利用堆棧的先進(jìn)后出特性 , 將主程序與子程序中均需使用的寄存器中內(nèi)容在進(jìn)入子程序時(shí)依次壓入 堆棧保護(hù) 起來(lái) , 返回主程序前再依次彈出恢復(fù); ? ⑶ 將主程序與子程序均需使用的寄存器中內(nèi)容在剛進(jìn)入子程序時(shí)暫用其它 空閑寄存器寄存 , 返回主程序前取回 。 被調(diào)用的子程序與調(diào)用的主程序之間有參數(shù)需要傳遞時(shí) , 視須傳遞的參數(shù)量的多少分別采用以下三種方法實(shí)現(xiàn): ? ⑴ 參數(shù)量很少時(shí) , 往往利用指定的寄存器進(jìn)行; 例如:將一個(gè)字節(jié)壓縮 BCD碼轉(zhuǎn)換成 2位 ASCII碼的子程序中 , 可指定以: R0中存放轉(zhuǎn)換的壓縮 BCD碼作為入口條件; R0中存放低位 BCD碼的 ASCII碼 、 R1中存放高位 BCD碼的 ASCII碼為出口狀態(tài) 。 ? ⑵ 參數(shù)量較多時(shí) , 往往需開(kāi)辟一個(gè)公共存儲(chǔ)區(qū)域作為主程序與子程序的數(shù)據(jù)共享區(qū)域 , 此時(shí) , 只需在主程序 、 子程序中分別指定數(shù)據(jù)區(qū)域的數(shù)據(jù)指針即可 。 ? ⑶ 參數(shù)量較少時(shí) , 往往可利用堆棧來(lái)進(jìn)行參數(shù)傳遞 。 子程序中參數(shù)傳遞 見(jiàn)例 45 見(jiàn)例 46 167。 46 匯編語(yǔ)言程序設(shè)計(jì)實(shí)例 一 、 數(shù)據(jù)傳送程序 ?以數(shù)據(jù)傳送類指令為主 , 將數(shù)據(jù)在 RAM中進(jìn)行復(fù)制和傳送 ( 包括片內(nèi)片外 RAM ) 。 二 、 數(shù)值運(yùn)算程序 ? 多字節(jié)無(wú)符號(hào)數(shù)加減程序 ? 帶符號(hào)數(shù)加減程序 ? 多字節(jié)無(wú)符號(hào)數(shù)乘法程序 ? 帶符號(hào)數(shù)乘法程序 ? 多字節(jié)無(wú)符號(hào)數(shù)除法程序 三 、 數(shù)碼處理程序 ?二進(jìn)制 、 十進(jìn)制數(shù) ( 即 BCD碼 ) 之間的轉(zhuǎn)換 四 、 數(shù)值處理程序 ? 查表程序設(shè)計(jì) ? 循環(huán)程序設(shè)計(jì) ? 散轉(zhuǎn)程序設(shè)計(jì) 五 、 其它處理程序 ? 遞歸程序 ? 多文件程序 一、數(shù)據(jù)傳送程序 ( P92) ? 例 431: 請(qǐng)編寫(xiě)將片內(nèi) RAM中 20H開(kāi)始的 8個(gè)單元中的數(shù)據(jù)傳送到 70H開(kāi)始的單元之中的程序 。 ? 例 432: 請(qǐng)編寫(xiě)將片內(nèi) RAM區(qū) 20H單元開(kāi)始的 16單元數(shù)據(jù)傳送到片外 RAM的 4000H單元開(kāi)始的存儲(chǔ)單元中的程序 。 ? 例 433: 試編寫(xiě)將 程序存儲(chǔ)器 區(qū) 1800H單元開(kāi)始的 16字節(jié)數(shù)據(jù)傳送到片內(nèi) RAM區(qū)的 60H為首地址單元中的程序 。 流程 431 432 433 二、數(shù)值運(yùn)算程序 ( P93) ? 例 434: 請(qǐng)編寫(xiě)多字節(jié)無(wú)符號(hào)二進(jìn)制數(shù)加法程序。被加數(shù)、加數(shù)分別存放在片內(nèi)以 ADR ADR2為首地址的RAM中,數(shù)據(jù)以低字節(jié)放低地址、高字節(jié)放高地址的規(guī)律依次存放,其字節(jié)數(shù)存放在工作寄存器 R7中,加得的結(jié)果放回被加數(shù)原存放單元。 ? 例 4 試編程將 R2R3和 R4R5中的兩個(gè)雙字節(jié)數(shù)相減,結(jié)果送入 R6R7。 ? 例 436: 請(qǐng)編寫(xiě)用查表法求片內(nèi) RAM區(qū) 60H單元中數(shù)的平方值,結(jié)果存入其后面二個(gè)單元中的程序。 434 436 49 四、數(shù)值處理程序 ? 例 4311: 請(qǐng)編寫(xiě)統(tǒng)計(jì)片外數(shù)據(jù)存儲(chǔ)器區(qū) 2022H單元開(kāi)始的 256單元中ASCII碼字符 A的個(gè)數(shù)的程序,統(tǒng)計(jì)數(shù)據(jù)存放在片內(nèi) RAM的 6FH單元中。 ? 例 41 若累加器 A中存放的是一位 BCD碼,試通過(guò)查表程序,將其轉(zhuǎn)換為相應(yīng)的七段數(shù)碼管的顯示碼,并存入寄存器 B中 ? 例 41 設(shè)有一個(gè)單片機(jī)應(yīng)用系統(tǒng),輸入一個(gè) ASCII命令字符,要求按輸入的命令字符轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序。 ? 例 41 已知內(nèi)部 RAM從 BLOCK單元開(kāi)始有一個(gè)無(wú)符號(hào)數(shù)的數(shù)據(jù)塊,其塊長(zhǎng)在 LEN單元,試編程求出數(shù)據(jù)塊中的最大值,并存入 MAX單元。 ? 例 4 試設(shè)計(jì) 50ms延時(shí)子程序。 4311 417 418 419 420 散轉(zhuǎn)程序設(shè)計(jì) 散轉(zhuǎn)程序是指程序中根據(jù) 輸入條件 或 運(yùn)算結(jié)果 分別轉(zhuǎn)入各自的處理程序。 MCS51提供一條散轉(zhuǎn)指令: JMP @A+DPTR 它是按照程序運(yùn)行時(shí)決定的地址執(zhí)行間接轉(zhuǎn)移指令。 A中內(nèi)容不同,則散轉(zhuǎn)的入口地址不同。 依據(jù)程序使用的不同方法,散轉(zhuǎn)程序可分為應(yīng)用轉(zhuǎn)移指令表實(shí)現(xiàn)散轉(zhuǎn)、應(yīng)用轉(zhuǎn)移地址表實(shí)現(xiàn)散轉(zhuǎn)以及應(yīng)用 RET指令實(shí)現(xiàn)散轉(zhuǎn)等。 例 42 根據(jù) R2的內(nèi)容,轉(zhuǎn)向各個(gè)處理程序: R2=0,轉(zhuǎn)向 PRG0 R2=1,轉(zhuǎn)向 PRG1 … R2=n,轉(zhuǎn)向 PRGn 422 五、其它處理程序 遞歸程序 ( P105) 在子程序嵌套的情況下,如果一個(gè)子程序調(diào)用的子程序就是它自身,這就稱為 遞歸調(diào)用 。這樣的子程序稱為 遞歸子程序 。 例 42 以下程序?qū)崿F(xiàn)了將“ X+1” 執(zhí)行 Y次。 多文件程序 ( P106) 當(dāng)一個(gè)程序太大,或者多個(gè)人員合作時(shí),有可能需要用多個(gè)文件保存程序,然后把這幾個(gè)文件組成一個(gè)工程文件,編譯、連接,生成一個(gè)可執(zhí)行(可下載)文件。了解 例 424 423 對(duì)于帶符號(hào)數(shù)的加法運(yùn)算 , 首先要進(jìn)行兩數(shù)符號(hào)的判定 ,若兩數(shù)符號(hào)相同 , 則進(jìn)行兩數(shù)相加 , 并以被加數(shù)符號(hào)為結(jié)果的符號(hào) 。 如果兩數(shù)符號(hào)不同,則進(jìn)行兩數(shù)相減。如果相減結(jié)果為正,則該數(shù)即為最后結(jié)果,并以被減數(shù)符號(hào)為結(jié)果的符號(hào)。如果兩數(shù)相減的結(jié)果為負(fù),則應(yīng)將其差數(shù)取補(bǔ),并把被減數(shù)的符號(hào)取反后作為結(jié)果的符號(hào)。 例 4. 帶符號(hào)雙字節(jié)二進(jìn)制數(shù)加減法程序 已知二個(gè) 16位的帶符號(hào)數(shù)分別存放在工作寄存器 R2(高字節(jié) ) 、 R3(低字節(jié) ) 和 R4(高字節(jié) )、 R5(低字節(jié) ) 中,二個(gè)數(shù)的D15位為符號(hào)位。請(qǐng)編寫(xiě)多字節(jié)帶符號(hào)數(shù)的加法和減法運(yùn)算程序。減法入囗地址為標(biāo)號(hào) BSUB,加法入口地址為 BADD。運(yùn)算結(jié)果存入R6(高字節(jié) )和 R7(低字節(jié) ) 。 BSUB: MOV A,R4 ;取減數(shù)高字節(jié) CPL ;減數(shù)符號(hào)取反以進(jìn)行加法 MOV R4,A BADD: MOV A,R2 ;取被加數(shù)高字節(jié) MOV C, MOV F0,C ;被加數(shù)符號(hào)保存在用戶標(biāo)志 F0中 XRL A,R4 ;判別二個(gè)數(shù)的符號(hào)位是否相同 ? MOV C, ;兩數(shù)同號(hào) CY=0, 兩數(shù)異號(hào) CY=1 MOV A,R2 CLR ;被加 (減 ) 數(shù)符號(hào)位清為 “ 0” MOV R2,A ;取被加 (減 ) 數(shù)的數(shù)值部分 MOV A,R4 ;加 (減 ) 數(shù)的符號(hào)位清為 “ 0” CLR MOV R4,A ;取加 (減 ) 數(shù)的數(shù)值部分
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1