JNC LOOP1 INC R3 LOOP1: DJNZ R6,LOOP CLR C
MOV R5,#03H MOV R2,A LOOP2: MOV A,R3;除8 RRC A MOV R3,A MOV A, R2 RRC A MOV R2,A
DJNZ R5,LOOP2
4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte单元中。变换后行到的8个ASCII码存放在外部RAM以buf始的存储单元中去。
ORG 0030H MOV R0,#byte MOV DPTR,#buf MOV R5,#08H MOV A,@R0
LOOP: RLC A MOV R7,A
JC LOOP1 MOV A,#30H SJMP LOOP2 LOOP1: MOV A,#31H LOOP2: MOVX @DPTR,A MOV A,R7 INC DPTR DJNZ R5,LOOP
5、搜索一串ASCII码字符中最后一个非空格字符,字符串从外部RAM 8100H单元开始存放,并用一个回车符(0DH)作结束。编程实现搜索并把搜索到的非空格字符的地址存入内部RAM单元40H和41H中,其中高字节放入41H单元。 ORG 0030H MOV DPTR,#8100H MOV 40H,#00H MOV 41H,#00H LOOP: MOVX A,@DPTR INC DPTR
CJNE A,#0DH,LOOP;是否为回车符 loop1: mov a,dpl;dptr-1,指向0dh单元地址
clr c subb a,#01h mov dpl,a mov a,dph subb a,#00h mov dph,a
loop2:mov a,dpl;dptr-1,调整单元地址 clr c subb a,#01h mov dpl,a mov a,dph subb a,#00h mov dph,a
movx a,@dptr;取下一个数
cjne a,#20h,loop3;是否为空格字符,不是转 sjmp loop2;是空格字符则转调整单元地址 loop3: mov 40h,dpl;存最后一个非空格字符的 mov 41h,dph;地址 sjmp $ end
6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为
52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。 ORG 0030H MOV R0,#42H MOV R1,#52H MOV R7,41H LOOP: MOV A,@R0 MOV 30H,@R1 CJNE A,30H,LK INC R0 INC R1 DJNZ R7,LOOP MOV 40H ,#00H SJMP DD LK: MOV 40H,#0FFH DD: SJMP DD
7.外部RAM首址为table的数据表中,有每个字节的最高位无条件地置“1”。 ORG 0030H MOV DPTR,#table MOV R6,#10 LOOP:MOVX A,@DPTR
10个字节的数据。编程将
SETB E7H MOVX @DPTR,A INC DPTR DJNZ R6,LOOP
8、 8000H开始的有200个字节的源数据区,隔一个单元送到4000H开始的数据区。在目的数据区中,每隔两个单元写一个数。如遇0DH(回车)则传送结束。
ORG 0030H MOV DPTR,#8100H;源数据区首址 PUSH DPL ;源首址暂存堆栈 PUSH DPH ;
MOV DPTR,#4000H;目的数据区首址 MOV R2,DPL ;目的首址暂存寄存器 MOV R3,DPH ; MOV R7,#200
LOOP:POP DPH ;取回源地址 POP DPL ; MOVX A,@DPTR ;取出数据 INC DPTR ;源地址增量 INC DPTR ;隔一个单元 PUSH DPL ;源地址暂存堆栈 PUSH DPH ;