3.1 因为是多个单元操作,为方便修改地址使用间址操作。片外地址用 DPTR 指示,只能用 MOVX
指令取数到 A,片内地址用 R0 或 R1 指示,只能用 MOV 指令操作,因此循环操作外部数据存贮
器→A→ 内部部数据存贮器。
ORG 0000H
MOV DPTR,#1000H
MOV R0,#20H
LOOP: MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
CJNE R0,#71H,LOOP
SJMP $
3.2 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。
ORG 0
MOV A,R0
ADD A,R6
MOV 50H,A
MOV A,R7
ADDC A,R1
MOV 51H,A
MOV A,#0
ADDC A,ACC
MOV 52H,A
SJMP $
3.3 A 中放小于 14H(20)的数,平方表的一个数据占 2 个字节,可用 BCD 码或二进制数存放.(如 A 中放
的是 BCD 码,则要先化成二进制数再查表。)
ORG 0
MOV DPTR,#TAB
ADD A,ACC ;A*2
PUSH ACC
MOVC A,@A+DPTR
MOV R7,A
POP ACC
INC A
MOVC A,@A+DPTR
MOV R6,A
SJMP $
TAB: DB 00,00,00,01,00,04, 00,09,00,16H,……
DB ……… 04H,00
3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大.
ORG 0
MOV A,20H
XRL A,21H
ANL A,#80H
JZ CMP
JB 20H.7,BG
AG: MOV 22H,20H
SJMP $
BG: MOV 22H,21H
SJMP $
CMP: MOV A,20H
CJNE A,21H,GR
GR: JNC AG
MOV 22H,21H
SJMP $
3.5 fosc=6MHZ
机器周期数
DELAY: MOV R1,#0F8H 1
LOOP: MOV R3,#0FAH 1
DJNZ R3,$ 2
DJNZ R1,LOOP 2
RET 2
(1+(1+2*0xFA+2)*0xF8+2)*12/6MHz
= (1+(1+2*250+2)*248+2)*2us
= 249.494ms
3.6 将待转换的数分离出高半字节并移到低 4 位 加 30H;再将待转换的数分离出低半字节并 30H,安排
好源地址和转换后数的地址指针,置好循环次数。
ORG 0000H MOV A,@R0
MOV R7,#05H ANL A, #0FH
MOV R0,#20H ADD A,#30H
MOV R1,#25H MOV @R1,A
NET: MOV A,@R0 INC R0
ANL A,#0F0H INC R1
SWAP A DJNZ R7,NE
ADD A,#30H SJMP $
MOV @R1,A END
INC R1
3.7 片内 RAM 间址寄存器只能有 R0 和 R1 两个,而正数、负数和零共需 3 个寄存器指示地址,这时可