版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章单片机CPU指令集架构何宾2023.08数据传送指令MCS-251ISA中的数据传送指令包括:数据传输指令堆栈操作指令数据交换指令数据传送指令
--数据传输指令STC单片机中的数据传输指令包括:内部数据传输指令外部数据传输指令查找表传输指令数据传输指令
--通用传输(MOV)它是最通用的指令。该类型指令用于传输(搬运)变量,它将源操作数指定的字节变量复制到目标操作数指定的位置,而源操作数不受影响与MCS-51ISA相比,其寻址模式在MCS-251ISA中进行扩展MOV可以在任意两个寄存器之间或寄存器与地址空间中的任何位置之间传输字节(8位)、字(16位)或双字(32位)该类型指令不影响标志位数据传输指令
--通用传输(MOV)MOVA,Rn(*)该指令执行的操作和机器指令格式rrr为源寄存器Rn编号所对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(A)←(Rn)[11101rrr]12数据传输指令
--通用传输(MOV)MOVA,dir8(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(dir8)[11100101][直接地址]21数据传输指令
--通用传输(MOV)MOVA,@Ri(*)该指令执行的操作和机器指令格式i的取值为“0”或“1”,这意味着该指令可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(A)←((Ri))[1110011i]12数据传输指令
--通用传输(MOV)MOVA,#data(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←#data[01110100][8位立即数]21数据传输指令
--通用传输(MOV)MOVRn,A(*)该指令执行的操作和机器指令格式rrr为源寄存器Rn编号所对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rn)←(A)[11111rrr]12数据传输指令
--通用传输(MOV)MOVRn,dir8(*)该指令执行的操作和机器指令格式rrr为源寄存器Rn编号所对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rn)←(dir8)[10101rrr][直接地址]21数据传输指令
--通用传输(MOV)MOVRn,#data(*)该指令执行的操作和机器指令格式rrr为源寄存器Rn编号所对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rn)←#data[01111rrr][8位立即数]21数据传输指令
--通用传输(MOV)MOVdir8,A(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(dir8)←(A)[11110101][直接地址]21数据传输指令
--通用传输(MOV)MOVdir8,Rn(*)该指令执行的操作和机器指令格式rrr为源寄存器Rn编号所对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir8)←(Rn)[10001rrr][直接地址]21数据传输指令
--通用传输(MOV)MOVdir8,dir8(*)
该指令执行的操作和机器指令格式操作机器码字节数时钟数(dir8)←(dir8)[10000101][8位源直接地址][8位目标直接地址]31数据传输指令
--通用传输(MOV)MOVdir8,@Ri(*)
该指令执行的操作和机器指令格式i的取值为“0”或者“1”,这意味着该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir8)←((Ri))[1000011i][直接地址]22数据传输指令
--通用传输(MOV)MOVdir8,#data(*)
该指令执行的操作和机器指令格式操作机器码字节数时钟数(dir8)←#data[01110101][直接地址][8位立即数]31数据传输指令
--通用传输(MOV)MOV@Ri,A(*)该指令执行的操作和机器指令格式i的取值为“0”或“1”,这意味着该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((Ri))←(A)[1111011i]12数据传输指令
--通用传输(MOV)MOV@Ri,dir8(*)该指令执行的操作和机器指令格式i的取值为“0”或“1”,这意味着该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((Ri))←(dir8)[1010011i][直接地址]22数据传输指令
--通用传输(MOV)MOV@Ri,#data(*)该指令执行的操作和机器指令格式i的取值为“0”或“1”,这意味着该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((Ri))←#data[0111011i][直接地址]21数据传输指令
--通用传输(MOV)【例6-32】下面的指令执行传输操作,即:
假设片上数据存储器RAM地址0x30的位置保存着数据为0x40,即(0x30)=0x40;数据存储器RAM地址0x40的位置保存着数据为0x10,即(0x40)=0x10,P1端口的内容(P1)=”11001010”(0xCA)
依次执行下面的指令:
MOVR0,#30H;(R0)=0x30 MOVA,@R0;(A)=0x40 MOVR1,A;(R1)=0x40
MOVB,@R1;(B)=0x10 MOV@R1,R1;(0x40)=0xCA MOVP2,P1;(P2)=0xCA数据传输指令
--通用传输(MOV)MOVDPTR,#data16(*)该指令执行的操作和机器指令格式
该指令将16位常数加载到16位数据指针寄存器DPTR中。常数的高字节加载到数据指针高寄存器DPH中。常数的低字节加载到数据指针低寄存器DPL中该指令不影响标志位操作机器码字节数时钟数(DPTR)←#data16[10010000][立即数高字节][立即数低字节]31数据传输指令
--通用传输(MOV)MOVRmd,Rms
该指令执行的操作和机器指令格式ssss与SSSS分别为目的寄存器Rmd和源寄存器Rms编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rmd)←(Rms)[01111100][ssssSSSS]21数据传输指令
--通用传输(MOV)MOVWRjd,WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd编号jd/2后所对应的二进制数,TTTT为源寄存器WRjs编号js/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRjd)←(WRjs)[01111101][ttttTTTT]21数据传输指令
--通用传输(MOV)MOVDRkd,DRks该指令执行的操作和机器指令格式uuuu为目的寄存器DRkd编号kd/4后所对应的二进制数,UUUU为源寄存器DRks编号ks/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(DRkd)←(DRks)[01111111][uuuuUUUU]21数据传输指令
--通用传输(MOV)MOVRm,#data该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←#data[01111110][ssss0000][8位立即数]31数据传输指令
--通用传输(MOV)MOVWRj,#data16该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRj)←#data16[01111110][tttt0100][8位立即数高字节][8位立即数低字节]41数据传输指令
--通用传输(MOV)MOVDRk,#0data16该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(DRk)←#0data16[01111110][uuuu1000][8位立即数高字节][8位立即数低字节]41数据传输指令
--通用传输(MOV)MOVDRk,#1data16该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(DRk)←#1data16[01111110][uuuu1100][8位立即数高字节][8位立即数低字节]41数据传输指令
--通用传输(MOV)MOVDRk,dir8该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5当dir8指向SFR空间时时钟数为4操作机器码字节数时钟数(DRk)←(dir8)[01111110][uuuu1101][直接地址]31数据传输指令
--通用传输(MOV)MOVDRk,dir16该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(DRk)←(dir16)[01111110][uuuu1111][地址高字节][地址低字节]41数据传输指令
--通用传输(MOV)MOVRm,dir8该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←(dir8)[01111110][ssss0001][8位地址]31数据传输指令
--通用传输(MOV)MOVWRj,dir8该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRj)←(dir8)[01111110][tttt0101][8位地址]31数据传输指令
--通用传输(MOV)MOVRm,dir16该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←(dir16)[01111110][ssss0011][地址高字节][地址低字节]41数据传输指令
--通用传输(MOV)MOVWRj,dir16该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRj)←(dir16)[01111110][tttt0111][地址高字节][地址低字节]41数据传输指令
--通用传输(MOV)MOVRm,@WRj该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数,tttt为源寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←((WRj))[01111110][tttt1001][ssss0000]31数据传输指令
--通用传输(MOV)MOVRm,@DRk该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数,uuuu为源寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←((DRk))[01111110][uuuu1011][ssss0000]31数据传输指令
--通用传输(MOV)MOVWRjd,@WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd编号jd/2后所对应的二进制数,TTTT为源寄存器WRjs编号js/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRjd)←((WRjs))[00001011][TTTT1000][tttt0000]31数据传输指令
--通用传输(MOV)MOVWRj,@DRk该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后所对应的二进制数,uuuu表示源寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRjd)←((DRk))[00001011][uuuu1010][tttt0000]31数据传输指令
--通用传输(MOV)MOVdir8,Rm该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir8)←(Rm)[01111010][ssss0001][8位地址]31数据传输指令
--通用传输(MOV)MOVdir8,WRj该指令执行的操作和机器指令格式tttt为源寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir8)←(WRj)[01111010][tttt0101][8位地址]31数据传输指令
--通用传输(MOV)MOVdir16,Rm该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir16)←(Rm)[01111010][ssss0011][地址高字节][地址低字节]41数据传输指令
--通用传输(MOV)MOVdir16,WRj该指令执行的操作和机器指令格式tttt为源寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir16)←(WRj)[01111010][tttt0111][地址高字节][地址低字节]41数据传输指令
--通用传输(MOV)MOV@WRj,Rm该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数,tttt为目的寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((WRj))←(Rm)[01111010][tttt1001][ssss0000]31数据传输指令
--通用传输(MOV)MOV@DRk,Rm该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数,uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((DRk))←(Rm)[01111010][uuuu1011][ssss0000]31数据传输指令
--通用传输(MOV)MOV@WRjd,WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd编号jd/2后所对应的二进制数,TTTT为源寄存器WRjs编号js/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((WRjd))←(WRjs)[00011011][tttt1000][TTTT0000]31数据传输指令
--通用传输(MOV)MOV@DRk,WRj该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数,tttt表示源寄存器编号除以2以后的二进制表示法在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((DRk))←(WRj)[00011011][uuuu1010][tttt0000]31数据传输指令
--通用传输(MOV)MOVdir8,DRk该指令执行的操作和机器指令格式uuuu为源寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir8)←(DRk)[01111010][uuuu1101][直接地址]31数据传输指令
--通用传输(MOV)MOVdir16,DRk该指令执行的操作和机器指令格式uuuu为源寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(dir16)←(DRk)[01111010][uuuu1111][地址高字节][地址低字节]41数据传输指令
--通用传输(MOV)MOVRm,@WRj+dis16该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数,tttt为源寄存器WRj编号j/2后所对应二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←((WRj))+(dis)[00001001][sssstttt][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOVRm,@DRk+dis24该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号的二进制表示法,tttt表示源寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(Rm)←((DRk))+(dis)[00101001][ssssuuuu][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOVWRj,@DRk+dis24该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后所对应的二进制数,uuuu为源寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRj)←((DRk))+(dis)[01101001][ttttuuuu][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOV@WRj+dis16,Rm该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数,tttt为目的寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((WRj))+(dis)←(Rm)[00011001][sssstttt][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOV@WRjd+dis16,WRjs该指令执行的操作和机器指令格式tttt为源寄存器WRjs编号js/2后所对应的二进制数,TTTT为目的寄存器WRjd编号jd/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((WRjs))+(dis)←(WRjd)[01011001][ttttTTTT][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOV@DRk+dis24,Rm该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数,tttt为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((DRk))+(dis)←(Rm)[00111001][ssssuuuu][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOV@DRk+dis24,WRj该指令执行的操作和机器指令格式tttt为源寄存器WRj编号j/2后所对应的二进制数,uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数((DRk))+(dis)←(WRj)[01111001][ttttuuuu][偏移地址高字节][偏移地址低字节]41数据传输指令
--通用传输(MOV)MOVHDRk(hi),#data16该指令执行的操作和机器指令格式该指令将16位立即数#data16搬移到双字寄存器DRk的高位字中具体来说,将16位立即数#data16移动到32位双字寄存器DRk的高位字中。双字寄存器的低位字保持不变,该指令不影响标志位该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(DRk).31:16←#data16[01111010][uuuu1100][立即数高字节][立即数低字节]41数据传输指令
--通用传输(MOV)【例6-34】下面的指令执行16位数据加载操作MOVHDRk,#1122H执行指令之前,双字寄存器中DRk的内容为(DRk)=0x55667788执行完该指令后,双字寄存器DRk的内容(DRk)=0x11227788数据传输指令
--通用传输(MOV)MOVSWRj,Rm
该指令将8位寄存器的内容加载到有符号扩展的16位寄存器中具体来说,将8位寄存器Rm的内容加载到16位寄存器WRj的低字节,然后用符号扩展填充16位寄存器WRj的高字节。该指令不影响标志位注:当符号扩展时,使用0xFF/0x00填充高字节,取决于源寄存器Rm的MSB。
该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数,tttt为目的寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRj).7–0←(Rm).7–0(WRj).15–8←MSB[00011010][ttttssss]21数据传输指令
--通用传输(MOV)【例6-35】下面的指令执行8位数据加载操作MOVSWRj,Rm在执行该指令之前,8位寄存器Rm的内容(Rm)=“01010101”,16位寄存器WRj的内容(WRj)=“11111111111111111”执行该指令后,16位寄存器WRj的内容(WRj)=”0000000001010101”数据传输指令
--通用传输(MOV)MOVZWRj,Rm
该指令将8位寄存器的内容加载到16位寄存器,并用全“0”填充高字节具体来说,将8位寄存器Rm的内容加载到16位寄存器WRj的低字节中,高字节用全“0”填充,该指令不影响标志位该指令执行的操作和机器指令格式ssss为源寄存器Rm编号所对应的二进制数,tttt为目的寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(WRj).7–0←(Rm).7–0(WRj).15–8←0[00001010][ttttssss]21数据传输指令
--通用传输(MOV)【例6-36】下面的指令执行8位数据加载操作MOVZWRj,Rm执行指令之前,8位寄存器Rm的内容(Rm)=”11010101”,16位寄存器WRj的内容(WRj)=“1111111111111111”执行该指令后,16位寄存器WRj的内容(WRj)=“0000000011010101”数据传输指令
--代码空间数据传输指令(MOVC)该指令将代码字节或程序存储器中的常数加到载累加器A取出的字节地址是原来的无符号8位累加器(A)内容和一个16位基址寄存器的内容之和,该寄存器可以是数据指针低或PC的低16个LSB。在后一种情况下,PC会递增到下一条指令的地址再加上累加器的内容。否则,基址寄存器保持不变执行的是16位的加法该指令不影响标志位数据传输指令
--代码空间数据传输指令(MOVC)【例6-37】累加器A中保存了0~3之间的某个数字。下面的指令序列将累加器A中的值转换为DB(定义字节)控制语句定义的四个值之一REL_PC:INCAMOVCA,@A+PCRET
DB66HDB77HDB88HDB99H数据传输指令
--代码空间数据传输指令(MOVC)如果在调用该子程序之前累加器A的内容(A)=0x02,执行完该子程序后,累加器A的内容(A)=0x88MOVC指令之前的INCA指令是为了在查表时跨越RET而设置的如果MOVC和表格之间被多个字节隔开,则为了正确地读取表格,必须将相应的字节数预先加到累加器A上数据传输指令
--代码空间数据传输指令(MOVC)MOVCA,@A+DPTR(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←((A)+(DPTR))[10010011]14数据传输指令
--代码空间数据传输指令(MOVC)MOVCA,@A+PC(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+1(A)←((A)+(PC))[10000011]13数据传输指令
--外部数据存储器传输指令(MOVX)
数据传输指令
--外部数据存储器传输指令(MOVX)MOVXA,@Ri(*)
该指令执行的操作和机器指令格式i的取值为“0”或“1”,这意味着该指令可用的寄存器为R0或R1操作机器码字节数时钟数(A)←((Ri))[1110001i]13数据传输指令
--外部数据存储器传输指令(MOVX)MOVXA,@DPTR(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←((DPTR))[11100000]13数据传输指令
--外部数据存储器传输指令(MOVX)MOVX@Ri,A(*)该指令执行的操作和机器指令格式i的取值为“0”或“1”,这意味着该指令可用的寄存器为R0或R1操作机器码字节数时钟数((Ri))←(A)[1111001i]12数据传输指令
--外部数据存储器传输指令(MOVX)MOVX@DPTR,A(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数((DPTR))←(A)[11110000]12数据传送指令
--堆栈操作指令压栈(PUSH)
该指令执行压入堆栈(入栈)操作具体来说,当入栈时,堆栈指针自动加1,然后将指定变量的内容保存到当前堆栈指针所指向的片上数据RAM的存储地址中该指令不影响标志位堆栈操作指令
--压栈(PUSH)PUSHdir8(*)该指令将直接地址dir8的内容保存到堆栈中其执行的操作和机器指令格式操作机器码字节数时钟数(SP)←(SP)+1((SP))←(dir8)[11000000][直接地址]21堆栈操作指令
--压栈(PUSH)【例6-38】下面的指令执行入栈操作,即
PUSHS:82H;寄存器DPL在SFR的地址S:82HPUSHS:83H;寄存器DPH在SFR的地址S:83H在进入中断程序之前,堆栈指针SP的内容(SP)=0x09,数据指针DPTR的内容(DPTR)=0x0123。执行完上面的指令后,堆栈指针SP的内容(SP)=0x0B。在片上数据存储器地址为0x0A和0x0B的位置,分别保存着寄存器DPL的值0x23和寄存器DPH的值0x01堆栈操作指令
--压栈(PUSH)PUSH#data该指令将8位立即数#data保存到堆栈中其执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)+1((SP))←#data[11001010][00000010][8位立即数]31堆栈操作指令
--压栈(PUSH)PUSH#data16该指令将16位立即数#data16保存到堆栈中其执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)+2((SP))←MSBof#data16((SP))←LSBof#data16[11001010][00000110][立即数高字节][立即数低字节]41堆栈操作指令
--压栈(PUSH)PUSHRm该指令将寄存器Rm的内容保存到堆栈中其执行的操作和机器指令格式ssss为寄存器Rm编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)+1((SP))←(Rm)[11001010][ssss1000]21堆栈操作指令
--压栈(PUSH)PUSHWRj该指令将16位字寄存器的内容保存到堆栈中其执行的操作和机器指令格式tttt为寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)+1((SP))←(WRj)高字节(SP)←(SP)+1((SP))←(WRj)低字节[11001010][tttt1001]21堆栈操作指令
--压栈(PUSH)PUSHDRk该指令将32位双字寄存器DRk的内容保存到堆栈中其执行的操作和机器指令格式uuuu为寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)+1((SP))←(DRk)(SP)←(SP)+3[11001010][uuuu1011]21数据传送指令
--堆栈操作指令出栈(POP)
该指令执行弹出操作(出栈)具体来说,当出栈时,读取由堆栈指针所指向的片上数据RAM存储单元中的内容,然后将堆栈指针减1。在原始RAM位置读取的值被传输到新寻址的位置,该位置可以是8位或16位堆栈操作指令
--出栈(POP)POPDRk该指令将当前堆栈指针所指向数据存储器的连续4个字节内容恢复到32位双字寄存器DRk中(遵循大端规则)其执行的操作和机器指令格式uuuu为寄存器DPk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)–3(DRk)←((SP))(SP)←(SP)–1[11011010][uuuu1011]21堆栈操作指令
--出栈(POP)POPWRj该指令将当前堆栈指针所指向数据存储器的连续2个字节的内容恢复到16位字寄存器WRj中(遵循大端规则)其执行的操作和机器指令格式tttt为寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(SP)←(SP)–
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论