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

正文內(nèi)容

[計(jì)算機(jī)]第4章80c51的指令系統(tǒng)與匯編語言程序設(shè)計(jì)-資料下載頁

2024-10-16 23:03本頁面
  

【正文】 結(jié)構(gòu) 、 循環(huán)結(jié)構(gòu) 。 三種基本結(jié)構(gòu)的流程圖: ( a ) 順 序 結(jié) 構(gòu) ( b ) 分 支 結(jié) 構(gòu) ( c ) 循 環(huán) 結(jié) 構(gòu) 順序程序設(shè)計(jì) 順序結(jié)構(gòu)的程序多用來處理比較簡(jiǎn)單的問題 。 特點(diǎn)是:程序中的語句由前向后順序執(zhí)行 , 最后一條指令執(zhí)行完畢 , 整個(gè)程序也隨之結(jié)束 。 例 將 20H中存放的壓縮 BCD數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)存放在累加器 A中 。 解: ORG 1000H START: MOV A, 20H ;取數(shù) , ( A) ← ( 20H) ANL A, 0F0H ;屏蔽低 4位 SWAP A ;高低 4位互換 MOV B, 10H ; ( B) ← 10H MUL AB ; BCD數(shù)的高 4位乘以 10 MOV B, A ;寄過暫存 B MOV A, 20H ;取數(shù) ANL A, 0FH ;屏蔽高 4位 ADD A, B ;得到結(jié)果 END 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 分支程序設(shè)計(jì) 分支程序就是條件分支程序,即根據(jù)不同的條件,執(zhí)行不同的程序段。例 X存放于 VAR單元,函數(shù)值 Y存放在 FUNC單元。試按照下式的要求給 Y賦值。 解: VAR DATA 30H FUNC DATA 31H MOV A, VAR ;取出 X JZ COMP ; X= 0則轉(zhuǎn)移到 COMP JNB , POSI ; X0則轉(zhuǎn)移到 POSI MOV A, 0FFH ; X0則轉(zhuǎn)移到 Y=- 1 SJMP COMP POSI: MOV A, 1 ; X0則 Y= 1 COMP: MOV FUNC, A ;存函數(shù)值 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 循環(huán)程序一般由 4部分組成: ( 1) 置循環(huán)初值 。 ( 2) 循環(huán)體 。 ( 3) 循環(huán)修改 。 ( 4) 循環(huán)控制 。 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 圖 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 開 始循 環(huán) 結(jié) 束 ?置 循 環(huán) 初 值循 環(huán) 處 理循 環(huán) 修 改結(jié) 束 處 理結(jié) 束開 始置 循 環(huán) 初 值循 環(huán) 結(jié) 束 ?循 環(huán) 處 理循 環(huán) 修 改結(jié) 束 處 理結(jié) 束YNYN( a ) 先 執(zhí) 行 后 判 斷 ( b ) 先 判 斷 后 執(zhí) 行第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 例 RAM 2021H單元開始存放有 20個(gè)無符號(hào)數(shù) , 找出其最大值 ,把它放在內(nèi)部 RAM30H單元中 。 解: ORG 1000H MAIN: MOV DPTR, 2021H MOV R7, 20 MOV R5, 00H LOOP: MOVX A, @DPTR CLR C SUBB A, R5 JC NEXT MOVX A, @OPTR MOV R5, A INC DPTR NEXT: DJNZ R7, LOOP MOV 30H, R5 END 例 。 假設(shè)在片內(nèi) RAM中 , 起始地址為 40H的 10個(gè)單元中存放有 10個(gè)無符號(hào)數(shù) 。 試進(jìn)行升序排序 。 解:數(shù)據(jù)排序常用方法是冒泡排序法 。 過程類似水中氣泡上浮 ,故稱冒泡法 。 執(zhí)行時(shí)從前向后進(jìn)行相鄰數(shù)的比較 , 如數(shù)據(jù)的大小次序與要求的順序不符就將這兩個(gè)數(shù)互換 , 否則不互換 。 對(duì)于升序排序 , 通過這種相鄰數(shù)的互換 , 使小數(shù)向前移動(dòng) , 大數(shù)向后移動(dòng);從前向后進(jìn)行一次冒泡 ( 相鄰數(shù)的互換 ) , 就會(huì)把最大的數(shù)換到最后;再進(jìn)行一次冒泡 , 就會(huì)把次大的數(shù)排在倒數(shù)第二的位置 。 依此類推 , 完成由小到大的排序 。 編程中選用 R7做比較次數(shù)計(jì)數(shù)器 , 初始值為 09H, 位地址 00H作為冒泡過程中是否有數(shù)據(jù)互換的標(biāo)志位 , 若 ( 00H) = 0, 表明無互換發(fā)生 , 已排序完畢 。 ( 00H) = 1, 表明有互換發(fā)生 。流程圖如圖 。 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 圖 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 開 始數(shù) 據(jù) 區(qū) 首 址 → R 0置 交 換 標(biāo) 志前 數(shù) 與 后 數(shù) 交 換取 后 一 個(gè) 操 作 數(shù)取 前 一 個(gè) 操 作 數(shù)置 交 換 標(biāo) 志比 較 次 數(shù) → R 7前 數(shù) 后 數(shù)本 地 比 較 完 畢 ?本 輪 有 交 換結(jié) 束YNY程序如下: ORG 4000H START: MOV R0, 40H ;數(shù)據(jù)區(qū)首址送 R0 MOV R7, 09H ;各次冒泡比較次數(shù)送 R7 CLR 00H ;互換標(biāo)志位清零 LOOP: MOV A, @R0 ;取前數(shù)送 A中 MOV 2BH, A ;暫存到 2BH單元中 INC R0 ;修改地址指針 MOV 2AH, @R0 ;取后數(shù)暫存到 2AH單元中 CLR C ;清 CY SUBS A, @R0 ;前數(shù)減后數(shù) JC NEXT ;前數(shù)小于后數(shù) , 則轉(zhuǎn) ( 不互換 ) MOV @R0, 2BH ;前數(shù)大于后數(shù) , 兩數(shù)交換 DEC R0 MOV @R0, 2AH INC R0 ;地址加 1, 準(zhǔn)備下一次比較 SETB 00H ;置互換標(biāo)志 NEXT: DJNZ R7, LOOP ;未比較完 , 進(jìn)行下一次比較 JB 00H, START ;有交換 , 表示未排完序 , 進(jìn)行下一輪冒泡 END 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 例 50ms軟件延時(shí)程序 。 解:軟件延時(shí)程序一般都是由 DJNZ Rn , rel指令構(gòu)成 。 執(zhí)行一條 DJNZ指令需要兩個(gè)機(jī)器周期 。 在使用 12 MHz晶振時(shí) ,一個(gè)機(jī)器周期為 1μs, 執(zhí)行一條 DJNZ指令需要兩個(gè)機(jī)器周期 , 即 2μs。 延時(shí) 50 ms需用雙重循環(huán) , 源程序如下: DEL: MOV R7, 125;執(zhí)行時(shí)需 1個(gè)機(jī)器周期 DELI: MOV R6, 200 DEL2: DJNZ R6DEL2; 200 2=400μs( 內(nèi)循環(huán)時(shí)間 ) DJNZ R7 DEL1 ; ms 125=50ms( 外循環(huán)時(shí)間 ) RET 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 查表程序 程序設(shè)計(jì)中 , 有時(shí)會(huì)遇到比較復(fù)雜的運(yùn)算或轉(zhuǎn)換過程 , 直接編程的困難較大 , 采用查表的方法使解決這種問題的有效涂徑 。在編程時(shí)可以很方便地通過 DB偽指令把表格的內(nèi)容存入ROM。 用于查表的指令有兩條: MOVC A, @A+DPTR MOVC A, @A+PC 使用 DPTR作為基地址查表比較簡(jiǎn)單 , 可通過三步操作來完成: 將所查表格的首地址存入 DPTR數(shù)據(jù)指針寄存器; 將所查表的項(xiàng)數(shù) ( 即在表中的位置是第幾項(xiàng) ) 送到累加器; 執(zhí)行查表指令 MOVC A, @A+DPTR, 進(jìn)行讀數(shù) , 查表的結(jié)果送回累加器 A。 例 , 設(shè) x為小于 10的非負(fù)整數(shù) , 存放在內(nèi)部 RAM 20H單元中 , 結(jié)果保存在內(nèi)部 RAM 21H單元中 。 解:計(jì)算平方運(yùn)算 , 可采用乘法實(shí)現(xiàn) , 也可采用查表的方法實(shí)現(xiàn) , 本例采用查表程序設(shè)計(jì) 。 源程序如下: SQR: MOV DPTR, TAB MOV A, 20H MOVC A, @A+DPTR MOV 21H, A RET TAB: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 子程序 在一個(gè)程序中 , 往往有許多地方需要執(zhí)行同樣的一種操作 , 但又不能用循環(huán)程序來實(shí)現(xiàn) 。 這是我們可以把這個(gè)操作單獨(dú)編成一個(gè)獨(dú)立的程序段 , 過個(gè)獨(dú)立的程序段稱為子程序 。 子程序放在程序存儲(chǔ)器的特定區(qū)域 , 執(zhí)行時(shí)由主程序來調(diào)用它 。 子程序調(diào)用 , 就是暫時(shí)中斷主程序的執(zhí)行 , 而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序 , 執(zhí)行完畢后 , 自動(dòng)返回主程序 , 主程序再繼續(xù)向下執(zhí)行 。 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 80C51單片機(jī)指令系統(tǒng)提供了兩條子程序調(diào)用指令A(yù)CALL addr11和 LCALL addr16。 指令中的地址為子程序的入口地址 , 在實(shí)際的程序中通常用標(biāo)號(hào)來代表 。 在主程序調(diào)用子程序時(shí) , 只需執(zhí)行調(diào)用指令 , 單片機(jī)即可先將當(dāng)前的 PC值壓入堆棧 ,然后將 PC值修改為指令中標(biāo)號(hào)所代表的地址 , 從而實(shí)現(xiàn)了子程序的調(diào)用 。 子程序中應(yīng)該有返回指令 RET或 RETI, 以確保子程序能夠正確返回 。 執(zhí)行 RET指令時(shí)單片機(jī)將原來存在堆棧中的斷點(diǎn)送回 PC, 保證了子程序返回主程序中調(diào)用的地方繼續(xù)執(zhí)行 。 由此可見 , 子程序從子程序標(biāo)號(hào)開始 ,到 RET或 RETI指令結(jié)束 。 1 現(xiàn)場(chǎng)保護(hù)與恢復(fù) 調(diào)用子程序后 , CPU處理權(quán)轉(zhuǎn)到了子程序 , 在轉(zhuǎn)子程序前 , CPU有關(guān)寄存器和內(nèi)存有關(guān)單元是主程序的現(xiàn)場(chǎng) ,若這個(gè)現(xiàn)場(chǎng)信息還有用處 , 那么在調(diào)用子程序前要設(shè)法保護(hù)這個(gè)現(xiàn)場(chǎng) 。 恢復(fù)現(xiàn)場(chǎng)是保護(hù)現(xiàn)場(chǎng)的逆操作 。 當(dāng)用堆棧保護(hù)現(xiàn)場(chǎng)時(shí) , 還應(yīng)注意恢復(fù)現(xiàn)場(chǎng)的順序不能搞錯(cuò) , 否則不能正確地恢復(fù)主程序的現(xiàn)場(chǎng) 。 2 參數(shù)的傳遞 參數(shù)傳遞是指主程序與子程序之何相關(guān)信息或數(shù)據(jù)的傳遞 。 在調(diào)用子程序時(shí) , 主程序應(yīng)先把有關(guān)參數(shù) ( 常稱為入口參數(shù) ) 放到某些約定的位置 , 子程序在運(yùn)行時(shí) ,從約定的位置等到有關(guān)參數(shù) 。 同樣 , 子程序在運(yùn)行給束前 , 也應(yīng)把運(yùn)行結(jié)果 ( 常稱為出口參數(shù) ) 送到約定位置 , 在返回主程序后 , 主程序可以從這些地方得到所需的結(jié)果 , 這就是所謂的參數(shù)傳遞 。 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 例 用程序?qū)崿F(xiàn) 。 設(shè) a, b, c存于內(nèi)部RAM的三個(gè)單元 30H, 31H, 32H。 解:用子程序來實(shí)現(xiàn) , 即通過兩次調(diào)用查平方表子程序來得到 , 并在主程序中完成相加 。 平方表子程序的入口參數(shù)和出口參數(shù)都是 A。 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) ORG 1000H MOV A, 30H ;取第一個(gè)操作數(shù) ACALL SQR ;第一次調(diào)用 MOV R1, A ;暫存于 R1 MOV A, 31H ;取第二個(gè)操作數(shù) ACALL SQR ;再次調(diào)用 ADD A, R1 ;完成 MOV 32H, A SJMP $ ;暫停 SQR: INC A ;查表位置調(diào)整 MOVC A, @A+PC ;查平方表 RET TAB: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END 2 返回指令 返回指令也有兩條: RET RETI RET指令被稱為子程序返回指令 , 放在子程序的末尾 。 其功能是從堆棧中自動(dòng)取出斷點(diǎn)地址送入程序計(jì)數(shù)器 PC, 使程序返回到主程序斷點(diǎn)處繼續(xù)往下執(zhí)行 。 RETI指令是中斷返回指令 , 放在中斷服務(wù)子程序的末尾 。 其功能也是從堆棧中自動(dòng)取出斷點(diǎn)地址送入程序計(jì)數(shù)器 PC, 使程序返回到主程序斷點(diǎn)處繼續(xù)往下執(zhí)行 。 第 4章 80C51的指令系統(tǒng)與匯編語言程序設(shè)計(jì) 本章小結(jié) 主要講述了 80C51指令的尋址方式以及各指令的格式 、 功能和使用方法等 。 指令主要是用于進(jìn)行數(shù)據(jù)操作 , 尋址方式是解決如何取得操作數(shù)的問題 。 80C51共有七中尋址方式:寄存器尋址 、 直接尋址 、 立即尋址 、 寄存器間址 、 變址尋址 、 相對(duì)尋址和位尋址 。 對(duì)于具體指令 , 應(yīng)通過上機(jī)練習(xí)程序設(shè)計(jì)時(shí) , 多了解指令涉及的內(nèi)容 , 需要在編程實(shí)踐上多下功夫 。 介紹了偽指令和匯編語言程序的基本結(jié)構(gòu):順序結(jié)構(gòu) 、 分支結(jié)構(gòu) 、 循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu) 。 并通過對(duì)這幾種結(jié)構(gòu)進(jìn)行了匯編語言編程的舉例 。 通過這些實(shí)例 , 可以看出匯編語言的程序設(shè)計(jì)方法與其他計(jì)算機(jī)語言相同 , 沒有特別之處 。 部分習(xí)題參考答案 MOV DPTR, 2021H MOV A, @DPTR MOV 20H,A ( CY) =0, ( AC) =1, ( OV) =0, ( P) =0 (A)=1BH,(B)=09H,OV=1,CY=0,P=0 (1) AND A, 0F0H (2)OR A,0FH (3)XOR A,0FH (4)XOR A,0FFH 部分習(xí)題參考答案
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1