实验8 查找相同数个数
一、实验目的
熟悉汇编语言编程
二、实验内容
在2000~200FH中查出有几个字节是零,把零的个数放在2100H中。
三、程序框图
四、实验步骤
在2000~200FH的几个单元中填入零,运行本程序后检查2100H单元中的数是否与2000~200FH中零的个数相同。
实验代码:
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
MOV R0,#16
MOV R6,#00H
MOV R7,#00H
LOOP1:
MOV A,R7
MOV DPTR,#0FFH
INC A
MOV R7,A
MOVC A,@A+DPTR
MOV DPH,#20H
MOV DPL,R6
MOVX @DPTR,A
INC R6
DJNZ R0,LOOP1
MOV R1,#16
MOV R2,#00H
MOV DPTR,#2000H
LOOP2:
MOVX A,@DPTR
INC DPTR
CJNE A,#00h,NEXT
INC R2
NEXT:
DJNZ R1,LOOP2
MOV A,R2
MOV DPTR,#2100H
MOVX @DPTR,A
ORG 100H
TAB:
DB 12H,34H,24H,00H,00H,11H,00H,56H
DB 23H,0BH,2FH,00H,0A2H,00H,25H,45H
END
实验截图:
五、实验体会
通过本次实验,我熟悉了汇编语言编程,并且对c51单片机有了更深一步的认识。
六、思考题
在1000~100FH的几个单元中填入8H,检查8H的个数,并填入1100H单元中,如何来修改程序?
修改后代码:
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
MOV R0,#16
MOV R6,#00H
MOV R7,#00H
LOOP1:
MOV A,R7
MOV DPTR,#0FFH
INC A
MOV R7,A
MOVC A,@A+DPTR
MOV DPH,#10H
MOV DPL,R6
MOVX @DPTR,A
INC R6
DJNZ R0,LOOP1
MOV R1,#16
MOV R2,#00H
MOV DPTR,#1000H
LOOP2:
MOVX A,@DPTR
INC DPTR
CJNE A,#08h,NEXT
INC R2
NEXT:
DJNZ R1,LOOP2
MOV A,R2
MOV DPTR,#1100H
MOVX @DPTR,A
ORG 100H
TAB:
DB 12H,34H,24H,08H,00H,11H,00H,56H
DB 23H,0BH,2FH,00H,0A2H,00H,25H,45H
END
七、参考程序
ORG 0AA0H
L5800: MOV R0,#10H ;查找16个字节
MOV R1,#00H
MOV DPTR,#2000H
L5811: MOVX A,@DPTR
CJNE A,#00H,L5816;取出内容与00H相等吗?
INC R1 ;取出个数加1
L5816: INC DPTR
DJNZ R0,L5811 ;未完继续
MOV DPTR,#2100H
MOV A,R1
MOVX @DPTR,A ;相同数个数送2100H
L581E: SJMP L581E
END
|