|
========================================
【第1題】
已知從外部數(shù)據(jù)存儲(chǔ)器的1560H單元開(kāi)始,
共有60個(gè)存貯單元中均存放有8位無(wú)符號(hào)整數(shù),
試用MCS-51指令編寫(xiě)一源程序,
求其中低4位全為0的數(shù)據(jù)個(gè)數(shù)(例如60H,90H等),
結(jié)果存入2500H單元。
【答】:
First: MOV DPTR, #1560H ;外部數(shù)據(jù)塊首址
MOV R2, #60 ;外部數(shù)據(jù)塊數(shù)據(jù)個(gè)數(shù)
MOV R3, #0
Check: MOVX A, @DPTR ;讀入數(shù)據(jù)指針?biāo)傅囊粋(gè)數(shù)
ANL A, #00001111B
JNZ Next ;低4位非全0, 查下一個(gè)
INC R3 ;低4位全0的數(shù)據(jù)個(gè)數(shù)累加
Next: INC DPTR ;數(shù)據(jù)指針加1,查下一個(gè)數(shù)
DJNZ R2, Check ;待查數(shù)據(jù)個(gè)遞減1,未為0則繼續(xù)查
Finish: MOV DPTR, #2500H
MOV A, R3
MOVX @DPTR,A ;低4位全為0的數(shù)據(jù)個(gè)數(shù)存入2500H單元
END
========================================
【第2題】
已知從外部數(shù)據(jù)存儲(chǔ)器的2630H開(kāi)始,
共有50個(gè)存貯單元中各存放有一個(gè)不相同的8位無(wú)符號(hào)整數(shù),
試用MC-51指令編寫(xiě)一源程序,找出其中的最大值,
將該最大值存入1200H單元,
該最大值所存放單元地址低8位的存入1201H單元,
該最大值所存放單元地址高8位的存入和1202H單元。
【答】:
First: MOV DPTR, #2630H ;數(shù)據(jù)塊首址
MOV R2, #50 ;數(shù)據(jù)塊的單元個(gè)數(shù)
MOVX A, @DPTR
MOV R3,A ;將首個(gè)數(shù)暫存于R3
Check: INC DPTR
MOVX A, @DPTR
MOV R4, A ;將下一個(gè)數(shù)暫存于R4
CLR C ;減法運(yùn)算前借位清0
SUBB A, R3 ;比較兩數(shù)大小
JC Next ;若有借位,R4值<R3值, 查下一個(gè)
MOV A, R4 ;若無(wú)借位,R4值>R3值
MOV R3, A ;將較大數(shù)暫存于R3
MOV R5,DPL
MOV R6,DPH
Next: DJNZ R2,Check ;待查數(shù)據(jù)個(gè)數(shù)遞減1,未為0則繼續(xù)查
Finish: MOV DPTR, #1200H
MOV A, R3
MOVX @DPTR, A ;最大值存入1200H單元
INC DPTR
MOV A, R5
MOVX @DPTR, A ;最大值地址低8位存入1201H單元
INC DPTR
MOV A, R6
MOVX @DPTR, A ;最大值地址高8位存入1202H單元
END
========================================
【第3題】
已知從外部數(shù)據(jù)存儲(chǔ)器的2650H單元開(kāi)始,
共有84個(gè)存貯單元各存有一個(gè)8位有符號(hào)整數(shù),
試用MCS-51指令編寫(xiě)一源程序,
求其中所有大于70H的正數(shù)之和,
結(jié)果低8位存放入1500H單元,高8位存入1501H單元。
【答】:
First: MOV DPTR,#2650H ;待查數(shù)據(jù)塊首址
MOV R2,#84 ;待查數(shù)據(jù)個(gè)數(shù)
MOV R4,#0
MOV R5,#0
Check: MOVX A,@DPTR
JZ Next ;若查到某個(gè)數(shù)為0,則查下一個(gè)
MOV R3,A ;將非0的數(shù)暫存于R3
ANL A,10000000B ;檢測(cè)該數(shù)的符號(hào)位
JNZ Next ;若符號(hào)位為1,是負(fù)數(shù),查下一個(gè)
MOV A,R3 ;若符號(hào)位為0,是正數(shù)
CLR C ;減法運(yùn)算前借位清0
SUBB A,#70H ;該數(shù)與70H作比較
JC Next ;若有借位,該數(shù)<70H, 查下一個(gè)
JZ Next ;若相減結(jié)果為0,該數(shù)=70H, 查下一個(gè)
MOV A,R3
CLR C
ADD A,R4 ;符合條件的數(shù)累加
MOV R4,A ;累加值低8位暫存于R4
JNC Next
INC R5 ;若低8位累有進(jìn)位,則高8加1
Next: INC DPTR ;數(shù)據(jù)指針加1,查下一個(gè)數(shù)
DJNZ R2,Check ; 待查數(shù)據(jù)個(gè)遞減1,未為0則繼續(xù)查
Finish: MOV DPTR,#1500H
MOV A,R4
MOVX @DPTR,A ;累加結(jié)果低8位存入1500H單元
INC DPTR
MOV A,R5
MOVX @DPTR,A ;累加結(jié)果高8位存入1501H單元
END
========================================
【第4題】
已知從外部數(shù)據(jù)存儲(chǔ)器的2940H單元開(kāi)始,
共有95個(gè)存貯單元中均存放有8位無(wú)符號(hào)整數(shù),
試用MCS-51指令編寫(xiě)一源程序,
求其中所有小于65H的數(shù)據(jù)之和,
結(jié)果低8位存入1400H單元,高8位存入1401H單元。
【答】:
First: MOV DPTR, #2940H ;外部數(shù)據(jù)塊首址
MOV R2, #95 ;外部數(shù)據(jù)塊數(shù)據(jù)個(gè)數(shù)
MOV R4, #0
MOV R5, #0
Check: MOVX A, @DPTR ;讀入數(shù)據(jù)指針?biāo)傅囊粋(gè)數(shù)
MOV R3, A ;將該數(shù)放入R3暫存
CLR C ;減法運(yùn)算前借位清0
SUBB A, #65H ;該數(shù)與65H作比較
JZ Next ;若相減結(jié)果為0,該數(shù)=65H, 查下一個(gè)
JNC Next ;若無(wú)借位,該數(shù)>65H, 查下一個(gè)
MOV A ,R3
CLR C ;加法運(yùn)算前進(jìn)位清0
ADD A, R4 ;符合條件的數(shù)累加
MOV R4 ,A ;累加值低8位暫存于R4
JNC NEXT
INC R5 ;若有進(jìn)位,則高8位累加1
Next: INC DPTR ;數(shù)據(jù)指針加1,查下一個(gè)數(shù)
DJNZ R2, Check ;待查數(shù)據(jù)個(gè)遞減1,未為0則繼續(xù)查
Finish: MOV DPTR,#1400H
MOV A,R4
MOVX @DPTR,A ;累加結(jié)果低8位存入1400H單元
INC DPTR
MOV A,R5
MOVX @DPTR,A ;累加結(jié)果高8位存入1401H單元
END
========================================
|
評(píng)分
-
查看全部評(píng)分
|