ORG OOOOH LJMP J100 ORG 0810H MOV A,#00H JB P3.3,J101 MOV R2,#10H LCALL DELY JB P3.3,J101 JNB P3.3,J102 MOV R2,#10H LCALL DELY JNB P3.3,J102 INC A PUSH ACCCPL A
MOV P1,A
POP ACC
AJMP J101
PUSH 02H
PUSH 02H
PUSH 02H
DJNZ R2,DEL4
POP 02H
DJNZ R2,DEL3
POP 02H
DJNZ R2,DEL2
POP 02H
DJNZ R2,DELY
RET
END
这是一段汇编代码。以下是对其逐行解释的说明:
ORG OOOOH
: 将程序计数器设置为地址 0000H。LJMP J100
: 跳转到地址 J100 处执行代码。ORG 0810H
: 设置当前地址为 0810H,即从此处开始执行代码。MOV A,#00H
: 将累加器 A 的值设为 00H。JB P3.3,J101
:如果 P3.3 端口的值为0,则跳转到 J101 处执行代码。MOV R2,#10H
:将寄存器 R2 的值设为 10H。LCALL DELY
:调用 DELY 子例程。JB P3.3,J101
:如果 P3.3 端口的值为0,则跳转到 J101 处执行代码。JNB P3.3,J102
: 如果 P3.3 端口的值不为0,则跳转到 J102 处执行代码。MOV R2,#10H
:将寄存器 R2 的值设为 10H。LCALL DELY
:调用 DELY 子例程。JNB P3.3,J102
:如果 P3.3 端口的值不为0,则跳转到 J102 处执行代码。INC A
:累加器 A 的值加1。PUSH ACC
:将累加器 A 的值压入堆栈。CPL A
:取补累加器 A 的值。MOV P1,A
:将累加器 A 的值赋给 P1 端口。POP ACC
:将堆栈中的值弹出并存入累加器 A。AJMP J101
:无条件跳转到 J101 处执行代码。PUSH 02H
:将 02H 压入堆栈。PUSH 02H
:将 02H 压入堆栈。PUSH 02H
:将 02H 压入堆栈。DJNZ R2,DEL4
:将寄存器 R2 减1,如果结果不为0,则跳转到 DEL4 处执行代码,否则继续往下执行。POP 02H
:将堆栈中的值弹出,但不使用。DJNZ R2,DEL3
:将寄存器 R2 减1,如果结果不为0,则跳转到 DEL3 处执行代码,否则继续往下执行。POP 02H
:将堆栈中的值弹出,但不使用。DJNZ R2,DEL2
:将寄存器 R2 减1,如果结果不为0,则跳转到 DEL2 处执行代码,否则继续往下执行。POP 02H
:将堆栈中的值弹出,但不使用。DJNZ R2,DELY
:将寄存器 R2 减1,如果结果不为0,则跳转到 DELY 处执行代码,否则返回到调用者。RET
:返回到调用者。END
:结束程序。