子程序调用
下图为整个程序运行结果
ORG 0000H
MOV A, #0
LCALL SUB1
MOV B,#10
SUB1: MOV A,#100
RET
END
圈内为ROM内存储结果
内部ROM结果
0000H 74H MOV A, #0
0001H 00H
0002H 12H LCALL SUB1
0003H 00H
0004H 08H SUB1: MOV A, 100H 所存单元0008H 0005H 75H MOV B, #10
0006H 0F0H
0007H 0AH
0008H 74H SUB1: MOV A, 100H
0009H 64H
000AH 22H
执行MOV A,#0前PC=0000H 后
因为A内容为0,(A)=00H. 该指令占2字节PC=0002H
执行LCALL SUB1 调用子程序SUB1将原程序压入堆栈
复位后(SP)=07H. (SP)=SP+1,(SP)=08H程序向下应该执行LCALL SUB1.执行后为了回到原程序,现将00005H单元压入堆栈。由于SP只能存8位二进制。现将低8位05H 存入SP.
PUSH 05H (SP)=(SP)+1 (SP)=09H再将高8位存入SP. PUSH 00H.
SUB1: MOV A, #100
SP=09H (A)=64H 程序占2字节PC=0005H
下一步取出高8位POP 00H (SP)-1=SP (SP) =08H 取出低8位POP 05H (SP) =07H
返回继续程序执行MOV B,#10. RET见下图
PC=000AH (B)=0AH PC=0008H END