大家来看看,用c实现...
单片机下面这个题目用c实现了之后用汇编如何实现?单片机是ATMEL 89C51在程序ROM空间地址1000H处依次存放系数ai(单字节无符号数),i=0~15;在外部RAM地址2000H处依次存放变量xi (单字节无符号数), i=0~15。编制程序实现 ai与xi的相乘累加求和 (假设y<=65535),和放入外部RAM的2100H和2101H处,2100H存放高字节。
拜谢各路高手!!
MAIN: MOV R3,#00H MOV R4,#00H MOV R5,#00H LOOPL: MOV R2,#00H MOV A,R3 MOV DPTR,#1000H MOVC A,@A+DPTR MOV R2,A MOV DPH,#20H MOVX A,@DPTR MOV B,A MOV A,R2 MUL AB LCALL PCDATAL INC R3 CJNE R3,#0FH,LOOPL ;MOV A,R5 ;PUSH ACC LOOPH: MOV R2,#00H MOV DPTR,#1000H ;给dptr赋初值 ,初值为表ai初始地址 MOV A,R4 MOVC A,@A+DPTR ;将表中值赋给a MOV R2,A ;将a中值赋给r2 MOV DPH,#20H MOVX A,@DPTR ;将xi值赋给a INC DPL ;将DPTR低八位DPL加一,这样就能够保证xi与ai顺序相同的能一起取出 MOV B,A ;将xi值赋给b MOV A,R2 ;将ai值取回 MUL AB ;ab做乘法 LCALL PCDATAH ;调用子程序 INC R4 ;r4加一 CJNE R4,#0FH,LOOPH ;判断循环次数 ;MOV A,R6 ;PUSH ACC PROADD: MOV A,#00H MOV A,R6 ADD A,R7 MOV DPTR,#2100H MOVX @DPTR,A MOV A,#00H MOV A,R5 MOV DPTR,#2101H ;低位存放单元地址 MOVX @DPTR,A SJMP $ PCDATAL: ADD A,R5 ;低八位相加,和存放在R5 XCH A,R5 ;将A中的和存到R5 JC JWB CLR C ;清除标志位 RET ;返回主程序 PCDATAH: MOV A,B ;将B中值存放到A,以便与R6做加法 ADD A,R6 XCH A,R6 RET JWB: INC R7 ;不用考虑高八位进位,所以只设置一个进位补偿就可以 SJMP PCDATAL ORG 1000H TABAI: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH ;ai表 END