第1个回答 2014-07-11
First: MOV DPTR, #1200H ;数据块首址
MOV R2, #70 ;数据块的单元个数
MOV R3,0 ;符合条件的数之个数清0
Check: MOVX A, @DPTR
MOV R4, A ;该数暂存于R4
CLR C ;减法运算前借位清0
SUBB A, #40H ;用减法作比较
JZ Next ;若该数=40H,查一个个数
JNC Next ;若无借位,该数>40H,查下一个数
MOV A, R4 ;暂存的数送回A
MOV B, #2H
DIV AB ;<40H的数除以2
MOV A, B ;将B保存的余数送入A
JNZ Next ;若余数非0,该数为奇数,查下一个
INC R3 ;符合条件的数之个数累加
Next: INC DPTR ;数据指针加1
DJNZ R2,Check ;待查数据个数递减1,未为0则继续查
Finish: MOV DPTR, #2300H
MOV A, R3
MOVX @DPTR, A ;符合条件的数之个数存入2300H单元
END本回答被提问者采纳
第2个回答 2014-07-14
;采纳的答案有错,正确程序如下:
FIRST: MOV DPTR, #1200H ;
MOV R2, #70
MOV R3, #0
CHECK: MOVX A, @DPTR
JB ACC.0, NEXT ;是奇数就查下一个
CJNE A, #40H, $ + 3
JNC NEXT ;大于等于40H就查下一个
INC R3
NEXT: INC DPTR
DJNZ R2, CHECK
FINISH: MOV DPTR, #2300H
MOV A, R3
MOVX @DPTR, A
SJMP $
END
第3个回答 2014-07-11
MOV DPTR,#1200H
MOV R7,#70
MOV R6,#0
LP:
MOVX A,@DPTR
INC DPTR
DEC R7
JB ACC.0,JP ;该数据是奇数,返回
SUBB A,#40H
JNC LP ;该数据<40H,返回
CLR C ;清借位标志
INC R6 ;查到1个
MOV A,R7
JZ EXIT ;查完,退出
JMP LP
EXIT:
MOV DPTR,#2300H
MOV A,R6
MOVX @DPTR,A
SJMP $
END
第4个回答 2014-07-11
mov dptr, #1200
mov r7, #70
mov r6, #0
loop:
movx a, @dptr
jb p, next ; 奇数跳
setb c
sub a, #40h
jnc next ; 大于等于40h跳
inc r6
next:
inc dptr
djnz r7, loop
mov dptr, #2300h
mov a, r6 ; r6中是计数结果。
movx @dptr, a
ret