,LOOP 2РRET 2 (1+2+(1+2×251+2)×248)×2us=250.48msР3.6 编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCII码存放在25H开始的单元内。Р3.6 将待转换的数分离出高半字节并移到低4位加30H;再将待转换的数分离出低半字节并加30H,安排好源地址和转换后数的地址指针,置好循环次数。Р ORG 0000HР MOV R7,#05HР MOV RO,#20HРMOV R1,#25H РNET:MOV A,@ROР ANL A,#OFOHР SWAP Р ADD A,#30HР MOV @R1,AР INC R1РMOV A,@RO РANL A,#OFH РADD A,#30H РMOV @R1,A РINC R0 РINC R1 РDJNZ R7,NE РSJMP $ ENDР3.7 从内部存储器30H单元开始,有16个数据,试编一个程序,把其中的正数、负数分别送40H和50H开始的存储单元,并分别将正数、负数和零的个数送R4,R5,R6。Р3.7 片内RAM间址寄存器只有Ro和R1,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第3个地址,POP和PUSH指令可自动修改地址。RO指正数存放地址,Rl指负数存放地址,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。Р ORG 0000HР MOV R7,#10HР MOV A,#0Р MOV R4,AР MOV R5,AР MOV R6,AР MOV R0,#40HР MOV R1,#50HРMOV SP,#2FH РNEXT:POP ACCР JZ ZER0Р JB ACC.7,NEР INC R4Р MOV @RO,AР INC R0Р AJMP DJР NE:INC R5Р MOV @R1,AР INC R1РAJMP DJ