乱写的,凑合看吧:
ORG 2000H
CLR A
MOV R7,#0
MOV R6,#0
MOV R5,#30
MOV R4,#20
MOV R3,#50H
MOV R2,#20H
LOOP1: MOV A,@R4
JNB ACC.7,LOOP2 ;判断符号数的正负
INC @R3
MOVX @R3,A ;负数存入外存中51H开始的单元中
INC @R7 ;负数个数+1
LOOP2: INC @R2
MOVX @R2,A ;正数存入外存中21H开始的单元中
INC @R6 ;正数个数+1
CJNE A,#64H,LOOP3
SJMP LOOP4
LOOP3: JNC LOOP4
MOV B,#0AH ;小于100的数改成压缩BCD码送还至原地址单元
DIV AB
SWAP A
ADD A,B
MOV @R4,A
LOOP4: MOV @R4,#0AAH ;不小于100的数改为AAH送还至原地址单元
INC @R4
DJNZ R5,LOOP1
MOV DPTR,#20H ;正数的个数存放至外存区20H单元中 MOV A,@R6
MOVX @DPTR,A
MOV DPTR,#50H ;负数的个数存放在外存区50H单元中
MOV A,@R7
MOVX @DPTR,A
SJMP $
上边的几个回答- -...此程序若还有错误请及时联系我修改,谢谢先!
另:各位参考的童鞋切记要加相关注释,多少做点改动,被老师认为雷同的渣就概不负责了哈。
So,建兄,渣就不多解释了。
LOOP4:MOV R5,#30
LOOP2:MOV A,20H
JNB ACC.7,LOOP1
MOVX @R1,A
MOV 51#,@R1
INC R6
LOOP1:MOVX R0,A
MOV 21#,@R0
INC R7
CJNE A,#100,LOOP3
JC LOOP3
HBCD: MOV B,#100
DIV AB
MOV R3,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ADD A,B
RET
LOOP3:MOV A,AAH
DJNZ R5,LOOP4
MOV 20H,R6
MOV 50H,R7
离问题结束还有 14 天 23 小时
再明确一下:
将正数放到外部存储区21H单元开始的区域,20H单元存放“正数”的个数,
将负数放到外部存储区51H单元开始的区域,50H单元存放“正数”的个数,
--50H单元应该是存放“负数”的个数,对吧?
对于分离出来的正数作如下处理,将小于100的数改成压缩BCD码的表示形式,其它数据全部改成AAH,经过处理以后的数据仍然存放在原地址单元。
--“原地址单元”是指“片内RAM20H开始的单元”?
--还是“外部存储区21H单元开始的区域”?