51单片机关于汇编的一道题
warning:
这篇文章距离上次修改已过1071天,其中的内容可能已经有所变动。
原题:
某班30人,某门课成绩(百分制)放在内存30H开始单元中,变成求最高分、及格人数(≥60分)、优秀人数(≥90分),分别存于内RAM60H、61H和62H单元。
汇编代码:
CSEG AT 0000H
LJMP 4000H ;转入程序
CSEG AT 4000H
START:
ADDR1 EQU 30H
LEN EQU 1EH
MAX EQU 60H
JGS EQU 61H
YXS EQU 62H
JG EQU 3CH
YX EQU 5AH
;初始化给30-3F数
MOV R1,#ADDR1
MOV @R1,#0AH
INC R1
MOV @R1,#28H
INC R1
MOV @R1,#3BH
INC R1
MOV @R1,#3CH
INC R1
MOV @R1,#41H
INC R1
MOV @R1,#50H
INC R1
MOV @R1,#5AH
INC R1
MOV @R1,#64H
;代码
MOV R0,#LEN
MOV R1,#ADDR1
LOOP: MOV A,@R1
CJNE A,#MAX,NEXT
NEXT: JC JGPD ;A<MAX
MOV MAX,A
JGPD: CJNE A,#JG,NEXT1
NEXT1: JC NOYX ;A<JG
INC JGS
CJNE A,#YX,NEXT2
NEXT2: JC NOYX ;A<YX
INC YXS
NOYX: INC R1
DJNZ R0,LOOP
AJMP HERE
HERE: AJMP HERE ;程序结束
END

参考代码:
ORG 0100H
ZG DATA 60H;最高分
JG DATA 61H;及格个数
YX DATA 62H;优秀个数
MOV ZG,#00H;初始化为0
MOV JG,#00H
MOV YX,#00H
MOV R0,#30H;成绩从30开始
MOV R2,#30;个数为30个
START: MOV A,@R0
CJNE A,ZG,NEXT1
NEXT1: JC CON;A<ZG
MOV ZG,A;保存最高的A到ZG
CON: CJNE A,#60,NEXT2
NEXT2: CJ NEXT3;A<60
INC JG
CJNE A,#90,NEXT4;
NEXT4: JC NEXT3;A<90
INC YX
NEXT3: INC R0
DJNZ R2,START
SJMP $
END