mcs 51 单片机汇编语言编程题

2024-12-22 19:53:17
推荐回答(3个)
回答1:

TEMP EQU 50H ;临时变量
SGM_H EQU 51H ;求和的高8位,以及平均值
SGM_L EQU 52H ;求和的低8位,以及平均值的余数

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
LCALL MM ;排序子程序
LCALL AVG ;平均值子程序
SJMP $

MM:
MOV R0,#40H
LP_1:
MOV A,R0
MOV R1,A
MOV TEMP,@R0
LP_2:
INC R1
MOV A,@R1
CJNE A,TEMP,NEXT1
NEXT1:
JNC NEXT2
MOV @R0,A
MOV @R1,TEMP
MOV TEMP,@R0
NEXT2:
CJNE R1,#4FH,LP_2
INC R0
CJNE R0,#4FH,LP_1
RET

AVG:
MOV R0,#41H
MOV A,@R0
MOV SGM_H,#00H
LP_3:
CLR C
INC R0
ADD A,@R0
JNC NEXT3
INC SGM_H
NEXT3:
CJNE R0,#4EH,LP_3
MOV SGM_L,A

;以上部分是求和
SWAP A
ANL A,#0FH
MOV R1,A
MOV A,SGM_H
SWAP A
ADD A,R1
MOV B,#14D
DIV AB
SWAP A
MOV SGM_H,A
MOV A,B
SWAP A
MOV R1,A
MOV A,SGM_L
ANL A,#0FH
ADD A,R1
MOV B,#14D
DIV AB
ADD A,SGM_H
MOV SGM_H,A
MOV SGM_L,B
;以上部分是16位除以8位的除法
RET

解题思路是先排序,得到最大值与最小值,然后求平均值。
以上供参考。

回答2:

TEMP EQU 50H;临时变量
SGM_H EQU 51H;求和8,平均

SGM_L EQU 52H;求和的低8位,将其平均值的其余

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

LCALL MM排序子程序

LCALL AVG平均子程序

SJMP元的 BR /> MM:

MOV R0,#40H

LP_1:

MOV A,R0

MOV R1,A

MOV TEMP,@ R0 LP_2 :

INC R1 MOV A,@ R1

CJNE A,温度,NEXT1

NEXT1:

捷讯NEXT2

MOV @ R0,A
> MOV @ R1,TEMP

MOV TEMP,@ R0

NEXT2:

CJNE R1,#4FH,
INC R0

CJNE R0,#4FH,LP_1 BR /> RET

AVG:

MOV R0,#41H

MOV A,@ R0

MOV SGM_H,#00H

LP_3:
> CLR C

INC R0

地址A,@ R0

JNC NEXT3

INC SGM_H

NEXT3:

CJNE R0,#4EH,LP_3
> MOV SGM_L

上述的一些求和

交换

ANL A,#0FH

MOV R1,A

MOV A,SGM_H

SWAP“

地址A,R1

MOV B,#14D

DIV AB

SWAP”

MOV SGM_H,A
> MOV A,B

SWAPá

MOV R1,一个

MOV A,SGM_L

ANL A,#0FH

ADD A,R1

MOV乙,#14D

DIV AB

地址,SGM_H

MOV SGM_H,A

MOV SGM_L乙

以上16除以8师 RET

解决问题的思路,然后进行排序,得到的最高和最低值的平均值。
以上仅供参考。

回答3:

;结果存于50H

CPU.INI EQU 00HERROR EQU 00H
ORG 0000H
LJMP L0081H
L0003H:
CJNE R4, #00H, L0011H
CJNE R6, #00H, L0032H
MOV A, R7
MOV 0F0H, R5
DIV AB
MOV R7, A
MOV R5, 0F0H
RET
L0011H:
CLR A
XCH A, R4
MOV R0, A
MOV 0F0H, #08H
L0017H:
MOV A, R7
ADD A, R7
MOV R7, A
MOV A, R6
RLC A
MOV R6, A
MOV A, R4
RLC A
MOV R4, A
MOV A, R6
SUBB A, R5
MOV A, R4
SUBB A, R0
JC L002BH
MOV R4, A
MOV A, R6
SUBB A, R5
MOV R6, A
INC R7
L002BH:
DJNZ 0F0H, L0017H
CLR A
XCH A, R6
MOV R5, A
RET
L0032H:
MOV A, R5
MOV R0, A
MOV 0F0H, A
MOV A, R6
DIV AB
JB 0D0H.2, L0057H
MOV R6, A
MOV R5, 0F0H
MOV 0F0H, #08H
L0041H:
MOV A, R7
ADD A, R7
MOV R7, A
MOV A, R5
RLC A
MOV R5, A
JC L0050H
SUBB A, R0
JNC L0052H
DJNZ 0F0H, L0041H
RET
L0050H:
CLR C
SUBB A, R0
L0052H:
MOV R5, A
INC R7
DJNZ 0F0H, L0041H
L0057H:
RET
L0058H:
CLR A
MOV R7, A
MOV R6, A
MOV R5, A
L005CH:
MOV A, #40H
ADD A, R5
MOV R0, A
MOV A, @R0
MOV R4, A
XRL A, #0FEH ;Max
JZ L0071H
MOV A, R4
XRL A, #01H ;Min
JZ L0071H
MOV A, R4
ADD A, R7
MOV R7, A
CLR A
ADDC A, R6
MOV R6, A
L0071H:
INC R5
CJNE R5, #10H, L005CH
MOV R4, #00H
MOV R5, #0EH
LCALL L0003H
MOV 50H, R7
L007EH:
SJMP L007EH
RET
L0081H:
MOV R0, #7FH
CLR A
L0084H:
MOV @R0, A
DJNZ R0, L0084H
MOV 81H, #50H
LJMP L0058H
MOV R0, #7FH

END
1、置结果为0
2、逐个查找,如果不是已知的max/min则累加
3、累加和除次数即为结果