以老师上课讲的例题为例,进行程序分析。


#前两步为跳过中断区,一般程序都直接加上
ORG 0000H
LJMP MAIN
ORG 1000H #定义源地址为1000H
MAIN: MOV A,#30H #将 立即数30H 赋给 累加器A
MOVC A,@A+PC #将(累加器A + 下一条命令后程序计数器的值)对应地址的内容赋给A,
#即A =(源地址1000H + 30H + (MOV所占字节1 + MOVC所占字节2) )= 1033H
ORG 1030H #定义源地址为1030H
DB 01H,02H,03H,04H #分别将以下4个字节数放在源地址中,即分别对应1030H, 1031H,1032H,1033H
END

TEST.asm

#前两步为从单片机的源地址0000H开始,跳过中断区,为程序必有的部分
ORG 0000H
AJMP MAIN
#定义main的起始地址为0100H
ORG 0100H
MAIN: MOV A,#01H #将 立即数01H 赋给 累加器A
MOV 20H, #02H #将 立即数02H 赋给 20H地址的内容
MOV A, 20H #将20H对应地址里的内容 赋给 累加器A
END

MOVX.asm

#前两步为从单片机的源地址0000H开始,跳过中断区,为程序必有的部分
ORG 0000H
LJMP MAIN
#定义main的起始地址为1000H
ORG 1000H
MAIN: MOV A,#30H #将 立即数30H 赋给 累加器A
MOV R0,#40H #将 立即数40H 赋给 R0
MOV @R0,A #(在片内RAM中)将 累加器A的值 赋给 R0中的地址对应的数
#(在未定义的片外RAM中:地址为FF00H)
MOVX @R0,A #将 累加器A的值 赋给 R0中的地址对应的数
MOV P2,#11H #定义片外寄存器的地址为11H
#(在定义后的片外RAM中:地址为1100H)
MOVX @R0,A #将 累加器A的值 赋给 R0中的地址对应的数
#下两步为选择DPTR并赋值
MOV 0A2H, #01H #选择DPTR1
MOV DPTR, #1818H #给 DPTR1 赋值 1818H
MOVX @DPTR, A #将 累加器A的值(30H) 赋给 DPTR对应的地址的内容
END