(1) 进栈指令 PUSH direct 首先将栈指针SP加1,然后把directr中的内容送到SP指示的内部 RAM单元中。 例如:当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令 PUSH Acc;(SP)+1=61H→SP,(A)→61H PUSH B ;(SP)+1=62H→SP,(B)→62H 结果:(61H)=30H,(62H)=70H,(SP)=62H。 (2)出栈指令 POP direct 将SP指示的栈顶单元的内容送入direct字节中,SP减1。 26
26 (1)进栈指令 PUSH direct 首先将栈指针SP加1,然后把direct中的内容送到SP指示的内部 RAM单元中。 例如:当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令 PUSH Acc ;(SP)+1=61H→SP,(A)→61H PUSH B ;(SP)+1=62H→SP,(B)→62H 结果:(61H)=30H,(62H)=70H,(SP)=62H。 (2)出栈指令 POP direct 将SP指示的栈顶单元的内容送入direct字节中,SP减1。 26
例如:当(SP)=62H,(62H)=70H,(61H)=30H时,执行指令 POP DPH ;(SP)→DPH,(SP)-1→SP POP DPL ;((SP))→DPL,(SP)-1→SP 结果为(DPTR)=7030H,(SP)=60H。 7.累加器A与外部数据存储器RAM/IO传送指令 MOVX A,@DPTR ;((DPTR)→A,读外部RAM/IO MOVX A,@R/ ;((R))→A,读外部RAM/IO MOVX @DPTR,A ;(A)→((DPTR)),写外部RAM/IO MOVX @R/,A ;(A)→((R)),写外部RAM/I0
27 例如:当(SP)=62H,(62H)=70H,(61H)=30H时,执行指令 POP DPH ;((SP))→DPH,(SP)-1→SP POP DPL ;((SP))→DPL,(SP)-1→SP 结果为(DPTR)=7030H,(SP)=60H。 7.累加器A与外部数据存储器RAM/IO传送指令 MOVX A,@DPTR ;((DPTR))→A,读外部RAM/IO MOVX A,@Ri ;((Ri))→A,读外部RAM/IO MOVX @DPTR,A ;(A)→((DPTR)),写外部RAM/IO MOVX @Ri ,A ;(A)→((Ri)),写外部RAM/IO 27
MOV的后面加“X”,表示访问的是片外RAM或I/0口,在执行前两 条指令,RD(P3.7)有效;后两条指令,WR(P3.6)有效。 采用16位的DPTR间接寻址,可寻址整个64KB片外数据存储器空间 ,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输 出。 采用Ri(=0,1)进行间接寻址,可寻址片外256个单元的数据 存储器。8位地址由P0口输出,锁存在地址锁存器中,然后P0口 再作为8位数据口。 8.查表指令 共两条,仅有的两条读程序存储器中表格数据的指令。由于程序
28 MOV的后面加“X”,表示访问的是片外RAM或I/O口,在执行前两 条指令, (P3.7)有效;后两条指令, (P3.6)有效。 采用16位的 DPTR间接寻址,可寻址整个64KB片外数据存储器空间 ,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输 出。 采用Ri(i =0,1)进行间接寻址,可寻址片外256个单元的数据 存储器。8位地址由P0口输出,锁存在地址锁存器中,然后P0口 再作为8位数据口。 8.查表指令 共两条,仅有的两条读程序存储器中表格数据的指令。由于程序 28 RD WR
存储器只读不写,因此传送为单向,从程序存储器中读出 数据到A中。两条查表指令均采用基址寄存器加变址寄存器间 接寻址方式。 (1)MOVC A,@A+PC 以PC作为基址寄存器,A的内容(无符号数)和PC的当前值(下 一条指令的起始地址)相加后得到一个新的16位地址,把该 地址的内容送到A。 例如:当(A)=30H时,执行地址1000H处的指令 1000H: MOVC A,@A+PC 29
29 存储器只读不写,因此传送为单向,从程序存储器中读出 数据到A中。两条查表指令均采用基址寄存器加变址寄存器间 接寻址方式。 (1)MOVC A,@A+PC 以PC作为基址寄存器,A的内容(无符号数)和PC的当前值(下 一条指令的起始地址)相加后得到一个新的16位地址,把该 地址的内容送到A。 例如:当 (A)=30H时,执行地址1000H处的指令 1000H: MOVC A,@A+PC 29
该指令占用一个字节,下一条指令的地址为1001H, (PC)=1001H再加上A中的30H,得1031H,结果把程序存 储器中1031H的内容送入累加器A。 优点:不改变特殊功能寄存器及PC的状态,根据A的内容就 可以取出表格中的常数。 缺点:表格只能存放在该指令所在地址的+256个单元之内, 表格大小受到限制,且表格只能被一段程序所用。 (2)MOVC A,@A+DPTR DPTR为基址寄存器,A的内容(无符号数)和DPTR的内容相 加得到一个16位地址,把由该地址指定的程序存储器单 30
30 该指令占用一个字节,下一条指令的地址为1001H, (PC)=1001H再加上A中的30H,得1031H,结果把程序存 储器中1031H的内容送入累加器A。 优点:不改变特殊功能寄存器及PC的状态,根据A的内容就 可以取出表格中的常数。 缺点:表格只能存放在该指令所在地址的+256个单元之内, 表格大小受到限制,且表格只能被一段程序所用。 (2)MOVC A,@A+DPTR DPTR为基址寄存器,A的内容(无符号数)和DPTR的内容相 加得到一个16位地址,把由该地址指定的程序存储器单