項(xiàng)目單元4 80C51定點(diǎn)數(shù)運(yùn)算程序設(shè)計(jì)實(shí)訓(xùn).ppt_第1頁
項(xiàng)目單元4 80C51定點(diǎn)數(shù)運(yùn)算程序設(shè)計(jì)實(shí)訓(xùn).ppt_第2頁
項(xiàng)目單元4 80C51定點(diǎn)數(shù)運(yùn)算程序設(shè)計(jì)實(shí)訓(xùn).ppt_第3頁
項(xiàng)目單元4 80C51定點(diǎn)數(shù)運(yùn)算程序設(shè)計(jì)實(shí)訓(xùn).ppt_第4頁
項(xiàng)目單元4 80C51定點(diǎn)數(shù)運(yùn)算程序設(shè)計(jì)實(shí)訓(xùn).ppt_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、項(xiàng)目單元4 80C51定點(diǎn)數(shù)運(yùn)算程序設(shè)計(jì)實(shí)訓(xùn),4.1訓(xùn)練要求 1編寫程序?qū)崿F(xiàn)兩個(gè)16位數(shù)的減法:7F4DH2B4EH,結(jié)果存入內(nèi)部RAM的30H和31H單元,30H單元存差的高8位,31H單元存差的低8位。 2編寫程序?qū)崿F(xiàn)兩個(gè)數(shù)的乘積運(yùn)算,要求(R1R0)(R0)=(R5R4R3) 4.2訓(xùn)練目的 使學(xué)生能夠靈活運(yùn)用算術(shù)運(yùn)算指令進(jìn)行數(shù)據(jù)加、減、乘、除運(yùn)算操作 4.3相關(guān)知識(shí) 項(xiàng)目學(xué)習(xí)情境1 算術(shù)運(yùn)算指令 1加法指令 (1) 不帶進(jìn)位的加法指令,ADD加法指令的目的操作數(shù)是A,運(yùn)算結(jié)果存放在A和Cy中。最高位有進(jìn)位時(shí),Cy=1,否則 Cy=0。加法指令除影響Cy外,還影響PSW的其他標(biāo)志位,如A

2、C、OV和P。,(2) 帶進(jìn)位的加法指令,指令的功能是把源操作數(shù)與累加器A的內(nèi)容相加再與進(jìn)位標(biāo)志CY的值相加,結(jié)果送入目的操作數(shù)A中。加的進(jìn)位標(biāo)志CY的值是在該指令執(zhí)行之前已經(jīng)存在的進(jìn)位標(biāo)志的值,而不是執(zhí)行該指令過程中產(chǎn)生的進(jìn)位。 (3)BCD碼調(diào)整指令 DA A 指令的功能是對累加器A中剛進(jìn)行的兩個(gè)BCD碼的加法的結(jié)果進(jìn)行十進(jìn)制調(diào)整。兩個(gè)壓縮的BCD碼按二進(jìn)制相加后,必須經(jīng)過調(diào)整方能得到正確的壓縮BCD碼的和。調(diào)整要完成的任務(wù)是: 當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼(10101111)或低4位產(chǎn)生進(jìn)位(AC=1),則應(yīng)在低4位加6調(diào)整,以產(chǎn)生低4位正確的BCD結(jié)果。 當(dāng)累加器A中的高4位

3、數(shù)出現(xiàn)了非BCD碼(10101111)或高4位產(chǎn)生進(jìn)位(CY=1),則應(yīng)在高4位加6調(diào)整,以產(chǎn)生高4位正確的BCD結(jié)果。 2.減法指令,減法指令的功能是將A中的數(shù)據(jù)減去源操作數(shù)中的數(shù)據(jù)和Cy,差存放在A中,運(yùn)算過程影響PSW的標(biāo)志位:CY、AC、P、OV。由于減法指令在執(zhí)行時(shí)都會(huì)減Cy,在第一次執(zhí)行減法操作時(shí)必須保證此時(shí)的Cy=0,否則,運(yùn)算結(jié)果時(shí)錯(cuò)誤的。 3.乘法指令 MUL AB ;累加器A與B寄存器相乘 該指令的功能是將累加器A與寄存器B中的無符號(hào)8位二進(jìn)制數(shù)相乘 ,乘積的低8位留在累加器A中,高8位存放在寄存器B中。 當(dāng)乘積大于FFH時(shí),溢出標(biāo)志位(OV)=1。而標(biāo)志CY總是被清0。

4、例:若(A)=50H,(B)=A0H,執(zhí)行指令 MUL AB 之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。 4.除法指令 DIV AB ;累加器A除以寄存器B 該指令的功能是將累加器A中的無符號(hào)8位二進(jìn)制數(shù)除以寄存器B中的無符號(hào)8位二進(jìn)制數(shù),商的整數(shù)部分存放在累加器A中,余數(shù)部分存放在寄存器B中。當(dāng)除數(shù)為0時(shí),則結(jié)果的A和B的內(nèi)容不定,且溢出標(biāo)志位(OV)=1。而標(biāo)志CY總是被清0。 例:若(A)=FBH(251),(B)=12H(18),執(zhí)行指DIV AB 之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。,項(xiàng)目學(xué)習(xí)情境2 指令應(yīng)用舉例 1加法指令舉例

5、【例4-1】 已知兩個(gè)雙字節(jié)無符號(hào)數(shù),分別存放在R0R1和R2R3中(高位在前),試編寫程序求它們的和,結(jié)果存放在R6R4R5中。 AA:MOV A,R1 ;取一個(gè)加數(shù)的低8位 ADD A,R3 ;與另外一個(gè)數(shù)的低8位相加 MOV R5,A ;存低8位的和 MOV A,R0 ;取一個(gè)加數(shù)的高8位 ADDC A,R2 ;高8位相加,并加低8位相加時(shí)的Cy MOV R4,A ;存高8位的和 CLR A ;A清0 ADDC A,#0 ;0+0+Cy A,取出高8位相加時(shí)的Cy MOV R6,A ;存進(jìn)位 RET 多字節(jié)數(shù)相加運(yùn)算,應(yīng)預(yù)先分析結(jié)果可能占用的空間,分配足夠的單元存放,本例中兩個(gè)16位的無

6、符號(hào)數(shù)相加的和可能會(huì)超過16位,就要占用3個(gè)字節(jié)。 對于有符號(hào)數(shù)的多字節(jié)加法,當(dāng)采用補(bǔ)碼形式的時(shí)候,程序和無符號(hào)數(shù)基本相同,只是在最高字節(jié)運(yùn)算后,不是判別Cy,而是判斷OV。當(dāng)OV=1時(shí),表示有符號(hào)數(shù)的運(yùn)算超出了范圍,這時(shí)可以將原先的兩個(gè)有符號(hào)數(shù)擴(kuò)充一個(gè)高字節(jié),然后再編程計(jì)算。正數(shù)擴(kuò)充高字節(jié)為00H,負(fù)數(shù)擴(kuò)充的高字節(jié)為FFH。,【例4-2】已知兩個(gè)字節(jié)有符號(hào)數(shù)(補(bǔ)碼),分別存放在R1R0和R3R2中(高位在前),試編寫程序求它們的和,結(jié)果存放在R5R4中。 START:MOV A,R0 ;取一個(gè)加數(shù)的低8位 ADD A,R2 ;與另外一個(gè)數(shù)的低8位相加 MOV R4,A ;存低8 位的和 MO

7、V A,R1 ;取一個(gè)加數(shù)的高8 位 ADDC A,R3 ;高8位相加,并加低8位相加時(shí)的Cy MOV R5,A ;存高8位的和,需要判斷OV RET 注意下面兩條指令的區(qū)別: INC A ADD A,#1 這兩條指令都實(shí)現(xiàn)將A中的數(shù)加1.第一條指令只影響PSW的標(biāo)志位P,第二條指令會(huì)影響PSW的標(biāo)志位:Cy、AC、OV、P。在有些情況下不能互換使用,后面的減法指令存在類似的情況。 【例4-3】已知一個(gè)原碼表示的雙字節(jié)有符號(hào)數(shù)(非負(fù)零)存放在R1R0(高位在前)中,試編寫程序求它的補(bǔ)碼,結(jié)果存放在R1R0中。 求一個(gè)表示的數(shù)的補(bǔ)碼,首先要知道這個(gè)數(shù)的符號(hào),正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)再按照求補(bǔ)的

8、過程去運(yùn)算。,START:MOV A,R1 ;取高8位 JNB ACC.7,AA ;高位為0,表示正數(shù)轉(zhuǎn)移,不需變換 MOV A,R0 嗎 ;取低8位 CPL A ;求反 ADD A,#1 ;加1 MOV R0,A ;存低8位 MOV A,R1 ;取高8位 CPL A ;求反 ADDC A,#0 ;加低8位的進(jìn)位 SETB ACC.7 ;高位置1,負(fù)數(shù) MOV R1,A ;存高8位 AA:RET 這個(gè)程序中的加1只能用ADD指令,因?yàn)橐紤]低8位加1后的進(jìn)位。 【例4-4】 已知兩個(gè)BCD碼表示的數(shù),分別存放在R0R1和R2R3中(高位在前),試編寫程序求它們的和,結(jié)果存放在R6R4R5中。,

9、AA:MOV A,R1 ;取一個(gè)加數(shù)的低8位 ADD A,R3 ;與另外一個(gè)數(shù)的低8位相加 DA A ;低位和BCD碼調(diào)整 MOV R5,A ;存低位的和 MOV A,R0 ;取一個(gè)加數(shù)的高8位 ADDC A,R2 ;高8位相加,并加低8位相加時(shí)的Cy DA A ;高位和BCD碼調(diào)整 MOV R4,A ;存高位的和 CLR A ;A清0 ADDC A,#0 ;0+0+CyA,取出高8位相加時(shí)的Cy MOV R6,A ;存進(jìn)位 RET 2減法指令舉例 【例4-5】 已知兩個(gè)雙字節(jié)數(shù),被減數(shù)存放在R0R1,減數(shù)存放在R3R2中(高位在前),試編寫程序求它們的差,結(jié)果存放在R5R4中。 STRAT:

10、CLR C ;清Cy MOV A,R0 ;取被減數(shù)的低8位 SUBB A,R2 ;減去減數(shù)的低8位 MOV R4,A ;存低8位的差 MOV A,R1 ;取被減數(shù)的高8位 SUBB A,R3 ;減去減數(shù)的高8位和低8位的借位 MOV R5,A ;存高8位的差 RET,3乘法指令舉例 【例4-6】 已知兩個(gè)無符號(hào)數(shù)分別存放在R1R0和R2中,試編寫程序計(jì)算它們的積,結(jié)果存放在R5R4R3(高位在前)。 START:MOV A,R0 ;取被乘數(shù)的低8位 MOV B,R2 ;乘數(shù) MUL AB ;相乘 MOV R3,A MOV R4,B ;存放積 MOV A,R1 ;取被乘數(shù)的高8位 MOV B,R

11、2 ;乘數(shù) MUL AB ;相乘 ADD A,R4 ;錯(cuò)位相加 MOV R4,A ;和回存 CLR A ;清A ADDC A,B ;進(jìn)位加到高字節(jié)中 MOV R5,A ;存高字節(jié) RET 4除法指令舉例 【例4-7】 已知8位的二進(jìn)制數(shù)存放在R0中,試編寫程序?qū)⑵滢D(zhuǎn)換為十進(jìn)制數(shù)存放在R3R2R1中(高位在前)。 在單片機(jī)中十進(jìn)制數(shù)只能以BCD碼的形式存在,單字節(jié)的二進(jìn)制數(shù)的范圍為0255,若需要求出它的百位、十位和個(gè)位,就用它去除以100,商就是百位,余數(shù)再除以10,就得到十位數(shù)和個(gè)位數(shù)。程序如下:,START: MOV A,R0 ;二進(jìn)制數(shù)送A作為被除數(shù) MOV B,#100 ;除數(shù)100

12、DIV AB ;執(zhí)行除法 MOV R3,A ;百位數(shù)送R3 MOV A,B ;余數(shù)送A作為被除數(shù) MOV B,#10 ;除數(shù)10 DIV AB ;執(zhí)行除法 MOV R2,A ;十位數(shù)送R2 MOV R1,B ;個(gè)位數(shù)送R1 RET 【例4-8】已知被除數(shù)在R1R0中,除數(shù)在R2中,試編寫程序來求它們的商,結(jié)果存放在R4R3中(高位在前)。 解題思路:用被除數(shù)減除數(shù),如果夠減,商加1.再減除數(shù),直到不夠減為止,每減一次,商就加1,這樣就可以求出商。程序如下:,START:MOV R4,#0 ;商高位清0 MOV R3,#0 ;商低位清0 AA:CLR C ;清Cy MOV A,R0 ;被除數(shù)低位

13、 SUBB A,R2 ;減除數(shù)低位 MOV R0,A ;低位差回送 MOV A,R1 ;被除數(shù)高位 SUBB A,#0 ;減除數(shù)高位(0) MOV R1,A ;高位差回送,JC BB ;不夠減轉(zhuǎn)移退出 MOV A,R3 ;夠減,商低位 ADD A,#1 ;加1 MOV R3,A ;商低位回送 MOV A,R4 ;商高位 ADDC A,#0 ;加進(jìn)位 MOV R4,A ;商高位回送 SJMP AA ;重新執(zhí)行減法 BB:RET,4.4軟件編制要點(diǎn)及參考程序 1軟件編制要點(diǎn) 80C51單片機(jī)提供的是字節(jié)運(yùn)算指令,所以在處理多字節(jié)數(shù)的加減運(yùn)算時(shí),要合理的運(yùn)用進(jìn)位(借位)標(biāo)志。 2參考程序,(1) O

14、RG 0000H LJMP START ORG 0040H START:CLR CY MOV 30H,#7FH MOV 31H,#4DH MOV R0, #31H MOV A,R0 SUBB A ,#4E MOV R0,A ;保存低字節(jié)相減結(jié)果 DEC R0 MOV A, R0 SUBB A,#2BH MOV R0,A ;保存高字節(jié)相減結(jié)果 END,(2) ORG 0000H LJMP START ORG 0040H START:MOV A,R0 MOV B,R2 MUL AB MOV R3,A MOV R4,B MOV A,R1 MOV B,R2 MUL AB ADD A,R4 MOV R4

15、,A CLR A ADDC A,B MOV R5,A RET,4.5實(shí)訓(xùn)基本任務(wù) 實(shí)訓(xùn)1: (1) 建工程:名稱為 *.UV2說明:*不要用中文用英文 (2) 建源文件:名稱為 *.asm 說明:*不要用中文用英文,且不能與工程名同 (3) 在工程中添加源文件說明:子程序緊接著主程序存放,必須在 END 指令前 (4) 調(diào)試并運(yùn)行程序 (5) 調(diào)試并運(yùn)行程序:觀察內(nèi)部RAM 30H、31H單元內(nèi)容并驗(yàn)證結(jié)果 實(shí)訓(xùn)2: (1) 建工程:名稱為 *.UV2說明:*不要用中文用英文 (2) 建源文件:名稱為 *.asm 說明:*不要用中文用英文,且不能與工程名同 (3) 在工程中添加源文件說明:子程序緊接著主程序存放,必須在 END 指令前 (4) 對工程進(jìn)行匯編、編譯 (5) 調(diào)試并運(yùn)行程序:觀察寄存器R5、R4、R3中的內(nèi)容并驗(yàn)證結(jié)果 4.6思考內(nèi)容 4-1編寫程序,實(shí)現(xiàn)雙字節(jié)無符號(hào)數(shù)加法運(yùn)算,要求 (R0R1)+(R6R7)(60H61H)。 4-2 .編寫多字節(jié)無符號(hào)數(shù)的加法程序。設(shè)兩個(gè)N字節(jié)的無符號(hào)數(shù)分別存放在內(nèi)部RAM中以DATA1和DATA2開始的單元中。相加后的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論