版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)專題五匯編語(yǔ)言程序設(shè)計(jì)第四章主講教師本章重點(diǎn)教學(xué)目標(biāo):
本章內(nèi)容是軟件編程的關(guān)鍵,地位重要。程序結(jié)構(gòu)(順序、分支、循環(huán)、子程序);應(yīng)用實(shí)例;熟練掌握程序設(shè)計(jì)的思路方法和技巧;要求掌握典型算法;找到分析問(wèn)題和解決問(wèn)題的著眼點(diǎn);學(xué)會(huì)抓住不同問(wèn)題的規(guī)律性;舉一反三,獨(dú)立思考,有創(chuàng)意,有新意,獨(dú)到。一、分清可執(zhí)行指令和非執(zhí)行指令及其功能二、將高級(jí)語(yǔ)言程序設(shè)計(jì)方法遷移到匯編語(yǔ)言程序設(shè)計(jì)中來(lái)三、特別注意匯編語(yǔ)言是面向機(jī)器的,要記住
CPU的資源;
存儲(chǔ)器結(jié)構(gòu)與尋址方式;
I/O口、定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)等關(guān)鍵的參數(shù);
寄存器間接尋址中指針的選擇和使用技巧。四、從宏觀上看,MCS-51匯編語(yǔ)言程序的整體結(jié)構(gòu)從微觀上看,微機(jī)中各組成部分是如何通過(guò)程序聯(lián)系起來(lái)。
匯編語(yǔ)言程序設(shè)計(jì)的要點(diǎn):4.1.1匯編語(yǔ)言與機(jī)器語(yǔ)言4.1.2匯編語(yǔ)言的格式4.1.3偽指令4.1.4匯編語(yǔ)言源程序的匯編4.1.5匯編語(yǔ)言程序設(shè)計(jì)的一般步驟4.1匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)4.2.1簡(jiǎn)單程序設(shè)計(jì)4.2.2分支程序設(shè)計(jì)4.2.3循環(huán)程序設(shè)計(jì)4.2.4查表程序設(shè)計(jì)4.2.5散轉(zhuǎn)程序設(shè)4.2.6子程序設(shè)計(jì)4.2.7運(yùn)算程序設(shè)計(jì)4.2MCS-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)機(jī)器語(yǔ)言計(jì)算機(jī)唯一能夠識(shí)別和執(zhí)行的語(yǔ)言,面向機(jī)器,二進(jìn)制。匯編語(yǔ)言“符號(hào)語(yǔ)言”,用指令助記符代表機(jī)器語(yǔ)言指令,面向機(jī)器。要經(jīng)過(guò)匯編。低級(jí)語(yǔ)言適合開(kāi)發(fā)實(shí)時(shí)控制程序高級(jí)語(yǔ)言面向算法、過(guò)程、對(duì)象,類似自然語(yǔ)言,可移植性好,須經(jīng)解釋或翻譯后才能被執(zhí)行。4.1.1匯編語(yǔ)言與機(jī)器語(yǔ)言1.
標(biāo)號(hào)段標(biāo)號(hào)段位于語(yǔ)句的開(kāi)頭,指明標(biāo)號(hào)所在指令的首地址,標(biāo)號(hào)又稱為標(biāo)號(hào)地址或符號(hào)地址,是一個(gè)可選項(xiàng),只有需要時(shí)才設(shè)置。絕對(duì)不允許把指令的保留字、寄存器號(hào)及偽指令字符作為語(yǔ)句的標(biāo)號(hào);標(biāo)號(hào)在同一程序單位中只能出現(xiàn)一次。2、
操作碼段操作碼段可以是可執(zhí)行指令的助記符,操作碼段用于指示計(jì)算機(jī)進(jìn)行何種操作,因此,是任何一條語(yǔ)句中的必選項(xiàng),匯編語(yǔ)言根據(jù)這一字段生成目標(biāo)代碼。操作碼段也可以是偽指令的助記符,對(duì)匯編程序下命令,在匯編時(shí)起作用。LOOP:MOVA,@R0……DJNZR2,LOOP3、操作數(shù)段操作數(shù)段用于存放指令的操作數(shù)或操作數(shù)地址,操作數(shù)的個(gè)數(shù)因指令的不同而不同,通常有三種情況:無(wú)操作數(shù)RET單操作數(shù)JCLOOP雙操作數(shù)MOVA,B可以采用字母或數(shù)字等多種表示形式:(1)操作數(shù)是立即數(shù),可用二進(jìn)制、十進(jìn)制和十六進(jìn)制形式(2)作寄存器和特殊功能寄存器名MOVA,PSW(3)標(biāo)號(hào)地址DJNZR7,NEXT(4)帶加、減運(yùn)算符的表達(dá)式,例:MOVA,#100-14、
注釋段:注釋指令或程序的含義,便于閱讀程序、維護(hù)程序。必須用“;”隔開(kāi),續(xù)行時(shí),也必須以“;”開(kāi)頭。常數(shù):B;12D,12;0F1H,59H67Q;‘A’,‘a(chǎn)’操作數(shù):A,B,DPTR表達(dá)式movA,#(12H-03H)4.1.4匯編語(yǔ)言源程序的匯編匯編可分成兩種:人工匯編機(jī)器匯編
機(jī)器匯編是用機(jī)器自動(dòng)把匯編語(yǔ)言源程序翻譯成可以運(yùn)行的目標(biāo)代碼程序,即二進(jìn)制程序的過(guò)程,它是一種用機(jī)器來(lái)代替人腦的匯編,完成這一匯編過(guò)程的軟件稱為“匯編程序”。匯編機(jī)器語(yǔ)言目標(biāo)程序匯編語(yǔ)言源程序匯編程序匯編機(jī)器語(yǔ)言目標(biāo)程序匯編語(yǔ)言源程序人工查指令機(jī)器碼表程序設(shè)計(jì)的方法結(jié)構(gòu)化設(shè)計(jì)模塊化設(shè)計(jì)開(kāi)發(fā)方法自底向上開(kāi)發(fā)先底層開(kāi)發(fā)自頂向下開(kāi)發(fā)先頂層開(kāi)發(fā)混合方法底頂程序設(shè)計(jì)的步驟分析課題,確定算法和思路根據(jù)算法和思路畫出流程圖根據(jù)流程圖編寫程序上機(jī)調(diào)試,排除錯(cuò)誤流程圖圖例起止框處理框判斷框連線開(kāi)始結(jié)束XX+1YY-1F>5?YN4.1.3偽指令定義:僅向匯編程序發(fā)出的,并僅由匯編程序在匯編過(guò)程中識(shí)別和執(zhí)行的一種匯編控制命令,它本身在目標(biāo)程序中不產(chǎn)生機(jī)器碼。匯編起始偽指令:ORG匯編結(jié)束偽指令:END定義字節(jié)偽指令:DB定義字偽指令:
DW定義位偽指令:
BIT賦值偽指令:
EQU
DATA匯編起始偽指令格式:ORG<起始地址>功能:指定匯編源程序編譯成機(jī)器語(yǔ)言程序 的起始地址例如:ORG0000HLJMP0100HORG0100HStart:MOVA,#5AHSJMP$END程序中可以有多條ORG語(yǔ)句,但定義的起始地址既不要交叉,也不要重疊。必須從小地址向大地址分配程序所占空間。匯編結(jié)束偽指令格式:END[起始地址]功能:停止匯編示例:ORG0000H
ljmp0100HORG0100HStart:movA,#5Ah
sjmp$END
定義字偽指令格式:<標(biāo)號(hào):>DW<項(xiàng)或項(xiàng)表>功能:把項(xiàng)或項(xiàng)表的數(shù)值存入從標(biāo)號(hào)開(kāi)始的連續(xù)單元,其中項(xiàng)或項(xiàng)表是一個(gè)字(兩字節(jié))。
ORG1000HDat:DW1122h,3344h,-1END1000H11H22H33H44H程序存儲(chǔ)器只對(duì)程序存儲(chǔ)器起作用FFHFFH定義位偽指令格式:<符號(hào)>BIT<位地址>功能:定義位變量地址UBIT20H.0VBIT20H.1WBIT20H.2XBITP1.0YBITP2.4ZBITP3.2QBITTCON.2賦值偽指令格式:<符號(hào)>EQU<變量值>功能:定義符號(hào)變量值
XEQU05HYEQU06HNEXTEQU2000H格式:<符號(hào)>DATA<變量值>功能:定義符號(hào)變量值(內(nèi)部RAM)
ONEDATA30H(數(shù)據(jù)或地址)
TWODATAONE+1
4.2.2分支程序設(shè)計(jì)用條件轉(zhuǎn)移語(yǔ)句實(shí)現(xiàn)二分支用cjne實(shí)現(xiàn)三分支例4-6多分支用jmp@A+DPTR實(shí)現(xiàn)多分支根據(jù)不同的條件,執(zhí)行不同的程序段。JZ、JNZ、JC、JNC、JB、JNB、CJNE、DJNZ正確合理地運(yùn)用用條件轉(zhuǎn)移語(yǔ)句實(shí)現(xiàn)二分支條件語(yǔ)句組1語(yǔ)句組2YesNo入口出口用cjne實(shí)現(xiàn)三分支編程要點(diǎn):cjne=等于≠不等于則:jc<小于或jnc>大于如何實(shí)現(xiàn)≤?≥?ORG0000H CjneR3,#15,NEQsjmpL1;=15NEQ:jnCL1;>15 sjmpL2;<15L1:nop;≥15……L2:y=(R0)x(R1)y2、判正負(fù)CJNER0,#0,NZEROCLRCMOVA,R0SUBBA,#0JZZEROMOVA,R0JZZERO其它方法?分析:1、判零MOVA,R0JNBACC.7,positiveCJNER0,#7FH,DO1SJMPpositiveDO1:
JCpositive……;negativePositive:….∴0FFH~80Hnegative00H~7FHpositive用cjne實(shí)現(xiàn)三分支
cjneR0,#0,MP1movR1,#0
sjmpMP3MP1:movA,R0jnbACC.7,MP2movR1,#0FFh
sjmpMP3MP2:movR1,#01hMP3:sjmp$endy=開(kāi)始結(jié)束y0y-1y+1x=0?x<0?YYNN(R0)x(R1)y判正負(fù)判零分支間隔離ORG1000HONEDATA30HTWODATA31HMAXDATA32HCLRCMOVA,ONESUBBA,TWOJZXMAXJBACC.7,NEGJBOV,YMAXSJMPXMAXNEG:JBOV,XMAXYMAX:MOVA,TWOSJMPRMAXXMAX:MOVA,ONERMAX:MOVMAX,ASJMP$END[例4-6]ONE和TWO單元中的兩個(gè)帶符號(hào)數(shù)比較大小,將較大者存入MAX單元中。兩數(shù)相等則任一個(gè)存入MAX即可。若X-Y為負(fù),則OV=0,X<YOV=1,X>Y若X-Y為正,則OV=0,X>YOV=1,X<Y用jmp@A+DPTR實(shí)現(xiàn)多分支KeyB5:movDPTR,#JMPTBLclrCsubbA,#0AhrlAJMP@A+DPTRJMPTBL:ajmpAAAajmpBBBajmpCCCajmpDDDAAA:……BBB:…鍵入10,轉(zhuǎn)AAA11,轉(zhuǎn)BBB12,轉(zhuǎn)CCC13,轉(zhuǎn)DDDCCC:……DDD:……(A)=?語(yǔ)句組1語(yǔ)句組2語(yǔ)句組3語(yǔ)句組40AH0BH0CH0DH入口AAABBBCCCDDD4.2.3循環(huán)程序設(shè)計(jì)循環(huán)程序結(jié)構(gòu)循環(huán)程序通常有兩種編制方法循環(huán)問(wèn)題的類型循環(huán)程序設(shè)計(jì)舉例循環(huán)程序結(jié)構(gòu)循環(huán)初始化:循環(huán)控制變量的初始化、數(shù)據(jù)變量的初始化循環(huán)工作部分:循環(huán)主體,重復(fù)執(zhí)行的部分循環(huán)控制部分:循環(huán)變量的修改、終止控制循環(huán)結(jié)束:這部分程序用于存放執(zhí)行循環(huán)程序所得結(jié)果以及恢復(fù)各單元的初值。1、先循環(huán)處理后循環(huán)控制,稱為直到型循環(huán);2、
先循環(huán)控制后循環(huán)處理,稱為當(dāng)型循環(huán)。
循環(huán)程序通常有兩種編制方法1、計(jì)數(shù)型—舉例循環(huán)次數(shù)已知,用計(jì)數(shù)方法控制循環(huán)的終止。
2、條件型—循環(huán)次數(shù)未知,根據(jù)某種條件判斷是否終止循環(huán)。[例4-7]內(nèi)部RAM塊傳,遇到“#”字符結(jié)束
3、計(jì)數(shù)型+條件型[例4-8]8031外部RAM塊傳及冒泡排序重點(diǎn)
循環(huán)問(wèn)題的類型單循環(huán)程序例1:多個(gè)單字節(jié)數(shù)求累加和計(jì)數(shù)型例2:內(nèi)部數(shù)據(jù)區(qū)清零
計(jì)數(shù)型[例4-7]內(nèi)部RAM塊傳改為條件型沒(méi)講多重循環(huán)程序例3:50ms延時(shí)程序
計(jì)數(shù)型[例4-7]內(nèi)部RAM塊傳計(jì)數(shù)型+條件型沒(méi)講[例4-8]外部RAM塊冒泡排序
重點(diǎn)計(jì)數(shù)型+條件型沒(méi)講
循環(huán)程序設(shè)計(jì)舉例例1:多個(gè)單字節(jié)數(shù)求累加和ORG0000HSUM:movR3,#0movR4,#0movR0,#50HmovR2,#5Loop:movA,R4
addA,@R0movR4,AincR0clrA
addcA,R3movR3,AdjnzR2,Loopsjmp$END內(nèi)部RAM50HR0R4R3R4R3@R0CY+ADDCADD23H98H0A8H0FDH6DH累加和單元要先請(qǐng)零∑例2:內(nèi)部數(shù)據(jù)區(qū)清零ORG0000HZero:movR0,#30HmovR7,#10movA,#00HLoop:mov@R0,AincR0djnzR7,Loopsjmp$END內(nèi)部RAM30HR023H98H0A8H0FDH…00000010個(gè)例3:50ms延時(shí)程序Delay:movR7,#200Del1:movR6,#123nopDel2:djnzR6,Del2djnzR7,Del1sjmp$;(不計(jì)入);1us;1us;1us;2us;2usT=[200×(1+1+123×2+2)+1]×1us=50001us=50ms[例4-7]把內(nèi)部RAM中起始地址為BLK1的數(shù)據(jù)塊傳送到外部RAM以BLK2為
起始地址的區(qū)域,直到遇到“#”字符的ASCⅡ碼為止。去掉塊長(zhǎng)度。參考程序如下: ORG 2000H BLK1 EQU 30H BLK2 EQU 1000HMOVSP,#6FH MOV R0,#BLK1;BLK1數(shù)據(jù)塊起始地址 MOV DPTR,#BLK2;BLK2數(shù)據(jù)塊起始地址 XH:CLR C MOV A,@R0 ;取數(shù)據(jù) PUSH ACC SUBB A,#23H ;判是否為“#”字符 JZ STOP POP ACC MOVX @DPTR,A ;數(shù)據(jù)傳送 INC R0 INC DPTR
AJMPXH
;循環(huán)控制STOP: SJMP $ END原題為計(jì)數(shù)型+條件型改為條件型[例4-7]把內(nèi)部RAM中起始地址為BLK1的數(shù)據(jù)塊傳送到外部RAM以BLK2為
起始地址的區(qū)域,直到遇到“#”字符的ASCⅡ碼為止。塊長(zhǎng)度在R1中。參考程序如下:ORG 2000H BLK1 EQU 30H BLK2 EQU 1000HNEQU100MOVSP,#6FH
MOV R0,#BLK1;BLK1數(shù)據(jù)塊起始地址 MOV DPTR,#BLK2;BLK2數(shù)據(jù)塊起始地址MOVR1,#N;塊長(zhǎng)度
INC R1 SJMP CHECK;防止數(shù)據(jù)塊的長(zhǎng)度為零
XH:CLR C MOV A,@R0 ;取數(shù)據(jù) PUSH ACC SUBB A,#23H
;判是否為“#”字符
JZ
STOP POP ACC MOVX @DPTR,A ;數(shù)據(jù)傳送 INC R0 INC DPTR
CHECK:DJNZR1,XH
;循環(huán)控制計(jì)數(shù)STOP: SJMP $ END計(jì)數(shù)型+條件型條件改錯(cuò)[例4-8]
設(shè)單片機(jī)8031外部RAM從3600H單元開(kāi)始存放有100個(gè)無(wú)符號(hào)數(shù),試編寫程序能使它們按從小到大的順序排列。(最小的數(shù)放在3600H單元)
解:排序程序采用“冒氣泡”的方法,其“冒氣泡”的過(guò)程如下:(設(shè)N=5時(shí))98542985243600H3600H排序前排序后外部RAM85429542842524第一輪比較4次第二輪比較3次第三輪比較2次第四輪比較1次9854289542859428549285425842548254242452對(duì)n個(gè)數(shù),則要進(jìn)行n-1輪掃描,在第i
輪掃描中要進(jìn)行n-i
次比較??梢酝浦喝魧⒃紨?shù)據(jù)改為98245,則排序過(guò)程如下:82459245824524第一輪比較4次第二輪比較3次第三輪比較2次第四輪比較1次9824589245829458249582452845248524524245可以看出:第三輪排序中沒(méi)有發(fā)生交換,即第三輪結(jié)束后,已經(jīng)排好了,應(yīng)結(jié)束排序,不必再排第四輪。為此增加一個(gè)“排好序標(biāo)志位”,預(yù)先將它清0,當(dāng)產(chǎn)生交換時(shí),將它置1,表示沒(méi)排好,可以進(jìn)行下一輪排序,否則,結(jié)束排序。外循環(huán)中循環(huán)內(nèi)循環(huán)
計(jì)數(shù)條件計(jì)數(shù)
輪數(shù)排好序標(biāo)志輪內(nèi)比較次數(shù)1N-1有交換置1繼續(xù)N-1次
N-2無(wú)交換跳出結(jié)束N-2次
N-3N-3次……N-222次N-111次
倒計(jì)數(shù)倒計(jì)數(shù)邏輯變量36H00H01H02H03H04H05H06HP2R0R1movxA,@R0mov30h,AmovxA,@R1movx@R0,AxchA,30Hmovx@R1,A交換用一個(gè)指針?用一個(gè)R0?用一個(gè)DPTR?A30H冒泡法排序ORG0000h movPSW,#00h movP2,#36h movR2,#100-1Loop0:movR0,#00h movR1,#01h mov03h,R2 clr7Fh;排好序標(biāo)志清0Loop1:movxA,@R0 mov30h,A movxA,@R1
cjneA,30h,Loop2 sjmpL1Loop2:JNCL1;小到大,JC大到小
movx@R0,A xchA,30h movx@R1,A setb7Fh;排好序標(biāo)志置1L1: incR0 incR1 djnzR3,Loop1;輪內(nèi)次數(shù)
jnb7Fh,Loop3;排好序標(biāo)志 djnzR2,Loop0;輪數(shù)Loop3:sjmp$ END交換4.2.6子程序設(shè)計(jì)子程序設(shè)計(jì)方法子程序的調(diào)用過(guò)程與子程序嵌套調(diào)用過(guò)程中的參數(shù)傳遞通過(guò)寄存器傳遞通過(guò)堆棧傳遞通過(guò)數(shù)據(jù)指針(DPTR)傳遞子程序設(shè)計(jì)方法格式:;子程序名;子程序功能:;入口參數(shù):;出口參數(shù):;占用資源:子程序名:...子程序的調(diào)用過(guò)程與子程序嵌套主程序要調(diào)用子程序時(shí)通過(guò)call指令子程序執(zhí)行完后通過(guò)ret指令返回防止自然進(jìn)入子程序和自然退出子程序子程序嵌套正在執(zhí)行主程序CPU正在執(zhí)行子程序SubACPU正在執(zhí)行子程序SubB通過(guò)寄存器傳遞方法簡(jiǎn)單、參數(shù)有限例:
ORG0000HMain:movsp,#5FH
mov
R0,#40H
movR7,#10H
lcallZero
sjmp$;子程序名:Zero;功能:對(duì)內(nèi)部數(shù)據(jù)區(qū)清零;入口參數(shù):R0內(nèi)部數(shù)據(jù)區(qū);R7內(nèi)部數(shù)據(jù)區(qū)長(zhǎng)度;出口參數(shù):無(wú);占用資源:A,R0,R7Zero:clrALoop:mov@R0,AincR0djnz,R7,LoopretEND通過(guò)堆棧傳遞ORG0000HMain:MOVSP,#5FHmov70H,#40hmov71H,#10Hpush70hpush71hlcallZerosjmp$;子程序名:Zero;功能:對(duì)內(nèi)部數(shù)據(jù)區(qū)清零;入口參數(shù):70內(nèi)部數(shù)據(jù)區(qū)地址;71h內(nèi)部數(shù)據(jù)區(qū)長(zhǎng)度;出口參數(shù):無(wú);占用資源:,R0,R7,70h,71hZero:popDPHpopDPLpop07h;R7pop00h;R0clrALoop:mov@R0,AincR0djnz,R7,LooppushDPLpushDPHretENDSP5FH61H40H10HPCLPCH63HZERO:MOVR0,SPDECR0DECR0MOV07H,@R0DECR0MOV01H,@R0CLRALOOP:MOV@R1,AINCR1DJNZ,R7,LOOPRETENDORG0000HMain:MOVSP,#5FHmov70H,#40hmov71H,#10Hpush70hpush71hlcallZero
popaccpopaccsjmp$方法2:SP5FH61H40H10HPCLPCH通過(guò)數(shù)據(jù)指針(DPTR)傳遞將待傳遞參數(shù)緊跟在調(diào)用指令之后
ORG0000HMain:MOVSP,#6FHNOPACALLPRINTDB‘THISISAN’DB’EXAMPLE’DB0AH,0DH,00HNEXT:NOPSJMP$PRINT:POPDPHPOPDPLPPP1:MOVA,#00HMOVCA,@A+DPTR
INCDPTRJZPPPENDPPP2:MOVP1,ASJMPPPP1PPPEND:JMP@A+DPTREND4.2.7運(yùn)算程序設(shè)計(jì)多字節(jié)加、減、乘、除運(yùn)算程序的設(shè)計(jì)1.多字節(jié)加減運(yùn)算程序設(shè)計(jì)
[例4-19]多字節(jié)無(wú)符號(hào)數(shù)求和[例4-20]8位二進(jìn)制帶符號(hào)數(shù)加法[例4-21]多字節(jié)減法子程序[例4-22]BCD數(shù)減法運(yùn)算程序
2.多字節(jié)乘除運(yùn)算程序設(shè)計(jì)
[例4-23]兩個(gè)16位二進(jìn)制無(wú)符號(hào)數(shù)相乘(連加)[例4-24]16位二進(jìn)制無(wú)符號(hào)數(shù)除法[例4-25]兩個(gè)16位二進(jìn)制帶符號(hào)數(shù)相乘
[例4-26]兩位十進(jìn)制數(shù)乘法程序設(shè)計(jì)[例4-27]兩位十進(jìn)制數(shù)除法程序設(shè)計(jì)3.講解舉例
查表程序?以PC為指針
?以DPTR為指針4.2.4查表程序設(shè)計(jì)4.2.5散轉(zhuǎn)程序設(shè)散轉(zhuǎn)程序?轉(zhuǎn)移指令表
?地址偏移量表
?轉(zhuǎn)向地址表邏輯運(yùn)算程序ASCII碼二進(jìn)制數(shù)據(jù)的拼裝與邏輯簡(jiǎn)單實(shí)例多字節(jié)左移一位講解舉例算術(shù)運(yùn)算程序?兩個(gè)多字節(jié)數(shù)加法?多字節(jié)BCD碼減法?多字節(jié)左移加乘法?多字節(jié)乘法,用MUL指令兩個(gè)多字節(jié)數(shù)加法
ORG0000HJIA:MOVR0,#40HMOVR1,#50HMOVR2,#4CLRCJIA1:MOVA,@R1ADDCA,@R0MOV@R0,AINCR0INCR1DJNZR2,JIA1MOVF0,CSJMP$END2F5BA7C3H
(43424140)H+14DF35B8H
(53525150)H443ADD7BH
(43424140)H
(F0)(CY)用三個(gè)指針怎么做?
ORG1000H MOVR0,#40HMOVR1,#50HMOVR2,#4
SETBRS0MOVR0,#60H
CLRRS0CLRCLOOP:MOVA,@R0ADDCA,@R1INCR0INCR1
SETBRS0MOV@R0,AINCR0CLRRS0DJNZR2,LOOPMOVF0,CSJMP$END+0區(qū)R00區(qū)R11區(qū)R040H50H60H例:24H+56H=7AH((R0))((R0))((R0))0區(qū)1區(qū)2區(qū)問(wèn):下例怎么設(shè)計(jì)?多字節(jié)BCD碼減法99887766H(43424140)H-44556677H(53525150)H
ORG0000HJia:movR0,#40hmovR1,#50hmovR2,#4
clrCJia1:movA,#9AhsubbA,@R1addA,@R0 daA
CPLC
mov@R0,A
incR0incR1
djnzR2,Jia1movF0,Csjmp$END
9AH-77H23H+66H89HCY=19AH66H
133H+77HAAH+66H10HCY=0
9AH55H45H+88HCDH+66H33HCY=09AH-44H56H+99HEFH+66H55HCY=09999999AH-44556677H??????????9A9AH數(shù)據(jù)的拼裝x7x6x5x4x3x2x1x0(20H)y7y6y5y4y3y2y1y0(21H)y2y1y0x4x3x2x1x0(30H)
ORG0000HSTART:MOV30H,20HANL30H,#00011111BMOVA,21HSWAPARLAANLA,#11100000BORL30H,ASJMP$ENDASCII碼二進(jìn)制ORG0000HAtoH:MOVA,#’A’CLRCSUBBA,#30HCJNEA,#0AH,NEQSJMPBIGNEQ:JCAENDBIG:SUBBA,#07HAEND:SJMP$END
ORG0000HHtoA:MOVA,#0BHADDA,#90HDAAADDCA,#40HDAASJMP$END0BH+90H9BH+66H101H40H+142H
與邏輯簡(jiǎn)單實(shí)例P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0執(zhí)行主程序的邏輯函數(shù):F=P1.6●
P1.4●P1.2P1.2——準(zhǔn)備就緒信號(hào),為“1”表示就緒P1.4——主回路工作正常信號(hào),為“1”表示正常P1.6——啟動(dòng)開(kāi)關(guān)閉合信號(hào),為“1”表示閉合程序片段:WAIT:MOVA,P1;(P1)=XXXXXXXXBANLA,#54H;01010100BCJNEA,#54H,WAIT;F=1?MAIN:……;主程序多字節(jié)左移一位0cycycy10010011100100001001011030H31H32Hcy100100110100100001100101101B3L:CLRCLOOP:MOVA,@R0RLCAMOV@R0,AINCR0DJNZR2,LOOPRETEND ORG2000HMAIN:MOVSP,#5FH
MOVR0,#30HMOVR2,#3ACALLB3LSJMP$兩個(gè)多字節(jié)數(shù)左移加乘法算法簡(jiǎn)介:例:1011B×1001B1011B×1001B
1011+1011000
01100011B手算:機(jī)器算:1001000000100000+101100101011
0101
0110
1010
1100
0101
1000+1011011000111CY001乘數(shù)擴(kuò)展積被乘數(shù)+先左移,再判斷為1,加被乘數(shù)CY積循環(huán)初值:1、乘法次數(shù)=左移次數(shù)=乘數(shù)的位數(shù)=(R3)*82、左移字節(jié)數(shù)=乘數(shù)的字節(jié)數(shù)+被乘數(shù)的字節(jié)數(shù)=積的字節(jié)數(shù)(R3)+(R2)=(R5)3、擴(kuò)大部分積的字節(jié)數(shù)=被乘數(shù)的字節(jié)數(shù),=擴(kuò)大部分積要清零的單元數(shù)=(R2)4、加法次數(shù)=(R2),有CY=1,再ADDC處理存儲(chǔ)結(jié)構(gòu):(R0)=45H,(R1)=43H(R6)=(R1)-(R2)=43H-3=40H
47H46H45H44H43H42H41H40H被乘數(shù)最低位乘數(shù)最低位積最低位積R0R1ORG0000HMIAN:MOVR0,#45HMOVR1,#43HMOVR2,#3MOVR3,#2MOVA,R3ADDA,R2MOVR5,AMOVA,R1CLRCSUBBA,R2MOVR6,AMOVR7,00HMOVA,#0MOV00H,R6MOV20H,R2LOOP:MOV@R0,AINCR0DJNZ20H,LOOP
MOVB,R3MOVA,#8MULABMOV21H,AGOON:MOV22H,R5MOVR1,06HCLRCRLCP:MOVA,@R1RLCAINCR1DJNZ22H,RLCPMOVR1,06HJNCNEXTMOV22H,R2MOVR0,07HCLRCADDP:MOVA,@R0ADDCA,@R1MOV@R1,AINCR0INCR1DJNZ22H,ADDPJNCNEXTMOVA,@R1ADDCA,#0MOV@R1,AJNCNEXTINCR1MOVA,@R1ADDCA,#0MOV@R1,ANEXT:DJNZ21H,GOONSJMP$END用MUL指令做多字節(jié)乘法3344H*56H4456H4456L+3356H3356L
(32H)(31H)(30H)
例:3344H*56H=?ORG3000HMOVA,#44HMOBB,#56HMULABMOV30H,A;(A)=4456L=(30H)MOV31H,B;(B)=4456H=(31H)MOVA,#33HMOVB,#56HMULAB;(A)=3356LADDA,31H;4456H+3356L=(31H))MOV31H,ACLRAADDCA,B;(B)=3356H+CYMOV32H,ASJMP$END
查表程序?qū)崿F(xiàn)查表算法。該方法把事先計(jì)算或?qū)嶒?yàn)數(shù)據(jù)按一定順序編成表格,存于程序存儲(chǔ)器內(nèi),然后根據(jù)輸入?yún)?shù)值,從表中取得結(jié)果。查表指令:MOVCA,@A+DPTR查表前數(shù)據(jù)表格表頭地址存入DPTR,要查得的數(shù)在表中相對(duì)表頭地址的偏移量送入累加器A,最后MOVCA,@A+DPTR完成查表,可在64KB內(nèi)查表因?yàn)镈PTR可以人為修改。MOVCA,@A+PC分為三步:1)用傳送指令把所查數(shù)據(jù)的項(xiàng)數(shù)送入累加器A;2)使用ADDA,#data指令對(duì)累加器A進(jìn)行修正,data值由下式確定:PC當(dāng)前值+data=數(shù)據(jù)表頭地址實(shí)際上data值等于查表指令和數(shù)據(jù)表格之間的字節(jié)數(shù);3)用指令MOVCA,@A+PC完成查表由于PC指針只能在A中提供的偏移地址的范圍內(nèi)查表,故,查表范圍進(jìn)在一頁(yè)內(nèi)。查表程序設(shè)計(jì)7402240383F880FE30313233PCASCTAB+00123ASCTAB+2PC當(dāng)前值3BPC當(dāng)前值+3=PC當(dāng)前值+3+2=表頭(A)補(bǔ)償值=表頭地址-PC當(dāng)前值表中偏移量MOVA,#2ADDA,#03H;計(jì)算偏移量MOVCA,@A+PC ;查表MOVR0,A;存結(jié)果SIMP$ASCTAB:DB ‘0’,‘1’,‘2’,‘3’ORG0100HMOVA,R0;取轉(zhuǎn)換值A(chǔ)NLA,#0FH;屏蔽高四位ADDA,#03H;計(jì)算偏移量MOVCA,@A+PC ;查表
MOVR0,A;存結(jié)果SIMP$ASCTAB:DB ‘0’,‘1’,‘2’,‘3’DB ‘4’,‘5’,‘6’,‘7’DB ‘8’,‘9’,‘A’,‘B’DB ‘C’,‘D’,‘E’,‘F’END303132333435363738394142ASCTAB1B2BPC當(dāng)前值3B以PC為指針查表程序TB1:movA,R2addA,R2movR3,AaddA,#07HmovcA,@A+PCxchA,R3addA,#03H+1movcA,@A+PCmovR4,Asjmp$TAB1:DW1520H,7586HDW2345H,1000HDW883H,9943HDW4051H,6785HDW4468H,5871HEND152075862345100008839943TAB11B2B1B1B2B以DPTR為指針查表程序LTB2:movDPTR,#TAB2movA,R3clrCrlcAmovR3,AxchA,R2rlcAxchR2,AaddA,DPLmovDPL,AmovA,DPHaddcA,R2movDPH,AclrAm
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)噴沙板市場(chǎng)調(diào)查研究報(bào)告
- 2025至2031年中國(guó)半自動(dòng)打碼機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國(guó)聚氯乙烯棒長(zhǎng)材數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度個(gè)人房產(chǎn)抵押貸款逾期罰息合同2篇
- 二零二五年度個(gè)人收益分成合同4篇
- 起重吊裝安全管理制度(共4篇)
- 二零二五年度農(nóng)產(chǎn)品電商平臺(tái)銷售返利協(xié)議3篇
- 建設(shè)工程測(cè)繪合同協(xié)議書
- 裝修工程保險(xiǎn)責(zé)任協(xié)議
- 食品加工居間投資合同
- 2024年安全教育培訓(xùn)試題附完整答案(奪冠系列)
- 神農(nóng)架研學(xué)課程設(shè)計(jì)
- 文化資本與民族認(rèn)同建構(gòu)-洞察分析
- 2025新譯林版英語(yǔ)七年級(jí)下單詞默寫表
- 【超星學(xué)習(xí)通】馬克思主義基本原理(南開(kāi)大學(xué))爾雅章節(jié)測(cè)試網(wǎng)課答案
- 《錫膏培訓(xùn)教材》課件
- 斷絕父子關(guān)系協(xié)議書
- 福建省公路水運(yùn)工程試驗(yàn)檢測(cè)費(fèi)用參考指標(biāo)
- 2024年中國(guó)工業(yè)涂料行業(yè)發(fā)展現(xiàn)狀、市場(chǎng)前景、投資方向分析報(bào)告(智研咨詢發(fā)布)
- 化工企業(yè)重大事故隱患判定標(biāo)準(zhǔn)培訓(xùn)考試卷(后附答案)
- 工傷賠償授權(quán)委托書范例
評(píng)論
0/150
提交評(píng)論