【求助】折腾两三天了,一个汇编的题目
在程序ROM空间地址1000H处依次存放系数ai(单字节无符号数),i=0~15;在外部RAM地址2000H处依次存放变量xi (单字节无符号数), i=0~15。编制程序实现 ai与xi的相乘累加求和 (假设y<=65535),和放入外部RAM的2100H和2101H处,2100H存放高字节。昨天奋战到快两点,今天起来是真的有点崩了,keil一直不通过,连loop都给我不通过,气啊,请教大神们!!
2016-10-23 10:18
2016-10-23 10:18
2016-10-23 11:58
2016-10-23 17:30
2016-10-23 17:50
2016-10-23 17:51
2016-10-23 17:54
2016-10-25 23:28
程序代码: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
2016-10-25 23:32
2020-11-01 20:43