DATA1和DATA2,遇到传送的数据为零时停止。
解 外部RAM向内部RAM的数据传送一定要以累加器A作为过渡,利用判零条件
转移正好可以判别是否要继续传送或者终止。
MOV R0,#DATA1; 外部数据块首址送R0
MOV R1,#DATA2; 内部数据块首址送R1
LOOP:MOVX A,@R0; 取外部RAM数据入A
HERE:JZ HERE ; 数据为零则终止传送
MOV @R1, A; 数据传送至内部RAM单元
INC R0; 修改地址指针,指向下一数据地址
INC R1
SJMP LOOP; 循环取数
例32 将内部RAM中从DATA单元开始的10个无符号数相加,相加结果送SUM主元保
存。
解:设相加结果不超过8位二进制数,则相应的程序如下:
MOV R0,#0AH ; 给R0置计数器初值
MOV Rl,#DATA ; 数据块首址送Rl
CLR A ; A清零
LOOP:ADD A,@R1 ; 加一个数
INC R1 ;修改地址,指向下一个数
DJNZ R0,LOOP ; R0减1,不为零循环
MOV SUM,A ; 存10个数相加和
例 :设(SP)=30H,标号为SUB1的子程序首址在2500H, 执行指令:
3000H: LCALL SUBl ;(PC)=3000H
结果: (SP)=32H,(31H)=03H,(32H)=30H,(PC)=2500H。
2300H :ACALL SUB2 ; (PC)=2300H
执行该指令后:(PC)+2=2302H,(0010 0011 0000 0010)
可调用子程序的2KB范围为2000H~27FFH.
07FEH:ACALL SUB3 ;(PC)=07FEH
执行该指令后,(PC)+2=0800H ,(0000 1000 0000 0010)
可调用子程序的2KB范围为0800H~0FFFH。
十,程序设计。
例 1 两个无符号双字节数相加。
设被加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存放
于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
程序如下:
START: CLR C ; 将Cy清零
MOV R0, #41H ; 将被加数地址送数据指针R0
MOV R1, #51H ; 将加数地址送数据指针R1
AD1: MOV A, @R0 ; 被加数低字节的内容送入A
ADD A,@R1 ; 两个低字节相加