精华内容
下载资源
问答
  • 本文主要介绍了51单片机条件转移指令
  • 条件转移指令是指在满足一定条件时进行相对转移。如: 判A内容是否为0转移指令 JZ rel JNZ rel
  • MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的调用和转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行...
  • 51单片机控制转移指令的一些理解

    千次阅读 2012-09-26 15:40:17
     MCS-51单片机的控制转移指令有以下几钟类型: 无条件转移:无需判断,执行该指令就转移到目的地址。条件转移:需判断标志位是否满足条件,若满足条件,则转移到目的地址,否则顺序执行。绝对转移:转移的目的...

            控制转移指令的功能是改变指令的执行顺序,转到指令的指示的新的PC地址执行。

            MCS-51单片机的控制转移指令有以下几钟类型:

    • 无条件转移:无需判断,执行该指令就转移到目的地址。
    • 条件转移:需判断标志位是否满足条件,若满足条件,则转移到目的地址,否则顺序执行。
    • 绝对转移:转移的目的地址用绝对地址指示,通常为无条件转移。
    • 相对转移:转移的目的地址用相对于当前PC的偏差(偏移量)指示,通常为条件转移。
    • 长转移或是长调用:目的地址距当前PC64KB地址范围内。
    • 短转移或是短调用:目的地址距当前PC2KB地址范围内。
            以上指令共有14条,做项目时需要根据机器码反汇编,有几条指令困扰了我蛮久,特别说下,需要注意下:

            1.长调用        LCALL    addr16;addr16->PC0~15

            该指令的机器码为3字节   12 addr16 。(addr16的范围为0x0000~0xFFFF,addr16为2字节的无符号数

            该指令为64KB地址范围内的调用子程序指令,子程序可以在64KB地址空间的任意一处。

            2.短调用        ACALL    addr11;addr11->PC0~10

            该指令的机器码为2字节,假设addr11的各位是a10a9a8...a0,则ACALL指令的机器码为a10a9a810001a7a6a5a4a3a2a1a0,所以在反汇编时,第一个字节的机器码为11,31,51,71,91,B1,D1,F1均为ACALL。

            addr11->PC0~10,而PC11~15保持原值不变。

            该指令为2KB地址范围的调用子程序指令,子程序入口地址距当前PC不得超过2KB的地址范围。

            3.无条件短转移指令        AJMP    addr11;addr11->PC0~10

            该指令的机器码为2字节,假设addr11的各位是a10a9a8...a0,则ACALL指令的机器码a10a9a800001a7a6a5a4a3a2a1a0,所以在反汇编时,第一个字节的机器码为01,21,41,61,81,A1,C1,E1均为AJMP。

            4.无条件相对转移        SJMP rel;PC+rel->PC

            即as+2+rel->PC,as为源地址(该指令的首地址),该指令为两个字节的指令,执行该指令时的当前PC=as+2,rel为转移的偏移量,转移可以向前转(目的地址小于源地址),也可以向后转,因此偏移量rel是1字节的有符号数,用补码表示(-128~+127),所以指令转移方位在离源地址as的-126~+129字节之间。机器码为80 rel。

      在其他条件转移指令中,也有出现rel,所以需要特别注意,特别是写程序时,我当时是假设机器码字节类型为unsigned char,结果碰到rel时就出问题了,正确的使用是将rel转换为有符号数(char)rel。


    (以上大部分内容摘自《单片机原理、接口及应用——嵌入式系统技术基础(第2版)》,清华大学出版社)

    展开全文
  • 8051单片机教程 上一课:8051单片机教程第十三课:逻辑与指令 http://www.eeskill.com/article/id/37455
  • 51单片机之控制转移指令SJMP、LJMP等

    千次阅读 多人点赞 2019-05-31 23:49:49
    文章目录前言一、无条件转移指令LJMP addr16AJMP addr11SJMP relJMP @A + DPTR关于SJMP、AJMP、LJMP的选择二、条件转移指令JZ rel 前言 控制指令是将程序跳转到某个指定的地址,在顺序执行 控制指令是通过修改PC的...


    前言

    控制指令是将程序跳转到某个指定的地址,在顺序执行
    控制指令是通过修改PC的内容来实现跳转的功能
    PC的内容是将要执行的下一跳指令的地址


    一、无条件转移指令

    LJMP英文全称:Long Jump
    AJMP英文全称:Absolute Jump
    SJMP英文全称:Short Jump
    JMP英文全称:Jump


    LJMP addr16

    指令名称:长转移指令
    目的:程序无条件转向64KB程序存储器地址空间的任何单元
    源操作数:16位跳转目标地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    LJMP addr16addr16 -> PC××××32
    • 地址范围为0000H—FFFFH;
    • addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示;

    AJMP addr11

    指令名称:绝对转移指令
    目的:程序无条件转向2KB程序存储器地址空间的任何单元
    源操作数:11位跳转目标地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    AJMP addr16(PC) + 2 -> PC, addr11 -> PC*××××22

    :PC* 表示 PC10 ~ 0,共计11位;

    1. AJMP跳转范围是AJMP后面指令的第一个字节开始的同一2KB范围,也就是说先对PC+2(命令长度为2B),在跳转到以PC当前位置为基准的2KB范围内,如下例子;
    2. AJMP addr11表示跳转到以 PC15 PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0 为目标地址,最高5位为PC源最高5位的内容,剩下11位为addr11中对应的内容;
    3. AJMP因跳转的范围在LJMP(64KB)和SJMP(256B)之间,也可以叫中跳转指令。

    例 若AJMP指令地址为2FFEH,跳转的范围为

    • PC + 2 = 3000H,故目标转移地址必在3000H—37FFH这2KB区域中;

    例 若AJMP指令地址为2FFDH,跳转的范围为

    • PC + 2 = 2FFFH,故目标转移地址必在 2800H—2FFFH这2KB区域中;

    SJMP rel

    指令名称:相对短转移指令
    目的:程序无条件转向256B程序存储器地址空间的任何单元
    源操作数:8位跳转相对地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    SJMP rel(PC) + 2 -> PC, (PC) + rel -> PC××××22
    1. rel是一个带符号的偏移字节数,其范围是-128~+127
    2. 00H~7FH(0000 0000B ~ 0111 1111B,第一个位为符号位)表示为0 ~ +127,正向转移;
    3. 80H ~ FFH(1000 0000B ~ 1111 1111B)表示为-128 ~ -1,反向转移;
    4. SJMP rel执行时是先将PC内容加2,在加相对地址;

    例 (PC) = 0100H

    • SJMP 55H:表示正向转移到0100H + 2 + 0055H = 0157H地址;
    • SJMP F6H:表示反向转移到0100H + 2 + FFF6H = 00F8H地址。
    1. rel可以是转移的目的地址的标号;

    例 SJMP RELADR,其中RELADR的标号为0123H,(PC) = 0100H;

    • 相对转移量 rel = 0123H - (0100 + 2)H = 21H;
    • rel并没有直接写出来,需要计算。

    JMP @A + DPTR

    指令名称:间接移指令/散转指令
    目的:程序无条件转向DPTR和A之和的目标地址空间单元
    源操作数:16位的DPTR和8位的累加器A

    助记符功能对标志位影响字节数周期数
    POVACCY
    JMP @A + DPTR(A) + (DPTR) -> PC××××12
    1. DPTR中存放16位基地址,累加器A存放目标转移地址对基地址的偏移量;
    2. 机器通过变址寻址转移指令便可实现程序的分支转移;
    3. DPTR中的值是固定的,通过修改A中的内容来选择跳转目标地址;
    4. 范围:以DPTR内容为首地址的256B范围内;

    例 (DPTR) = 1000H,修改A中的内容

    • 设 A = 10H, (PC) = 1010H;
    • 设 A = 20H, (PC) = 1020H;
    • 设 A = 30H, (PC) = 1030H;

    关于SJMP、AJMP、LJMP的选择

    SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP
    AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP
    LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP


    二、条件转移指令

    JZ英文全称:Jump if Zero
    JNZ英文全称:Jump if Not Zero
    CJNE英文全称:Compare Jump if Not Equal
    DJNE英文全称:Compare Jump if Not Equal


    JZ rel

    指令名称:判零转移指令
    目的:对累加器A中的内容进行零的判定
    源操作数:8位跳转相对地址

    JNZ rel

    指令名称:判零转移指令
    目的:对累加器A中的内容进行零的判定,同JZ
    源操作数:8位跳转相对地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    JZ rel(PC) + 2 -> PC; 若 A = 0,则 (PC) + rel -> A;若 A != 0,则 顺序执行,不跳转 ××××22
    JNZ rel(PC) + 2 -> PC; 若 A != 0,则 (PC) + rel -> A;若 A = 0,则 顺序执行,不跳转 ××××22
    1. JZ从英文字面上理解成A = Zero即0,就Jump,JNZ从英文字面上理解成A not Zero即!0,就Jump;
    2. 偏移量是一个带符号的8位,所有偏移量取值范围位-127~+128,同SJMP指令;
    3. 实际汇编中,rel用目标标号替代,如“JNZ NEXT”,此时rel并非一个在-127~+128之间的实际数,汇编时自动生成相对地址,同SJMP;

    例 (PC) = 0100H

    • JNZ 55H:当 (A) = 01H, 非零时,表示正向转移到0100H + 2 + 0055H = 0157H地址;当 (A) = 00H,PC = 0102H,继续执行下一条指令,不跳转;

    CJNE XXX, XXX, rel

    指令名称:比较转移指令
    目的:对指定的目的字节和源字节进行比较,不等转移,相等继续执行
    源操作数:8位跳转相对地址,累加器A,直接地址direct,立即数#data,间接寄存器@Ri,寄存器Rn

    助记符功能对标志位影响字节数周期数
    POVACCY
    CJNE A, direct, rel(PC) + 3 -> PC; 若(direct) < (A),则 (PC) + rel -> PC且 0 -> CY;若(direct) > (A),则 (PC) + rel -> PC且 1 -> CY;若 (direct) = (A),则顺序执行,不跳转且 0 -> CY; ×××32
    CJNE A, #data, rel(PC) + 3 -> PC; 若#data < (A),则 (PC) + rel -> PC且 0 -> CY;若#data > (A),则 (PC) + rel -> PC且 1 -> CY;若 #data = (A),则顺序执行,不跳转且 0 -> CY; ×××32
    CJNE Rn, #data, rel(PC) + 3 -> PC; 若#data < (Rn),则 (PC) + rel -> PC且 0 -> CY;若#data > (Rn),则 (PC) + rel -> PC且 1 -> CY;若 #data = (Rn),则顺序执行,不跳转且 0 -> CY; ×××32
    CJNE @Ri, #data, rel(PC) + 3 -> PC; 若#data < ((Ri)),则 (PC) + rel -> PC且 0 -> CY;若#data > ((Ri)),则 (PC) + rel -> PC且 1 -> CY;若 #data = ((Ri)),则顺序执行,不跳转且 0 -> CY; ×××32
    1. 三字节指令:CJMP (目的字节), (源字节), rel
    2. 执行CJMP指令结果可以简单理解,想等继续执行,CY清零;不相等,跳转,CY置一还是清零看比较大小;
    3. 目的字节 大于 源字节(前 大于 后)CY清零;
    4. 目的字节 小于 源字节(前 小于 后)CY置一;
    5. 程序转移范围以(PC) + 3为起始地址的-128 ~ +127共256B;

    (A) = 03H,(10) = 04H,CY = 0,rel = 30H,(PC) = 0100H

    • CJMP A, 10H
      (A) = 03H != (10H) = 04H,(PC) = (PC) + 3 + rel = 0133H;
      (A) < (10H) ,CY = 1;

    DJNZ XXX, rel

    指令名称:循环转移指令
    目的:以直接地址或寄存器Rn的单元内容作为循环控制寄存器使用,利用其进行循环
    源操作数:8位跳转相对地址,寄存器Rn,直接地址direct

    助记符功能对标志位影响字节数周期数
    POVACCY
    DJNZ Rn, rel(PC) + 2 -> PC;(Rn) - 1 -> Rn;当(Rn) != 0时,则(PC) + rel -> PC;当(Rn) = 0时,则结束循环,程序往下执行 ××××22
    DJNZ direct, rel(PC) + 3 -> PC;(direct) - 1 -> direct;当(direct) != 0时,则(PC) + rel -> PC;当(direct) = 0时,则结束循环,程序往下执行 ××××32
    1. 执行一次该语句,第一操作数减一,判断字节变量是否为0,不为0则继续循环;为0,则退出循环;
    2. DJNZ可以理解高级语言中的for (int i = n; i > 0; i–)循环语句;

    例 设(R1)= 07H,rel = 10H,(PC) = 0100H

    • DJNZ R1, rel
      R1循环07H,需要进行7次循环才为00H;
      循环7次后,(PC) = 0114H;
      跳转后, (PC) = 0124H

    三、调用和返回指令

    ACALL英文全称:Absolute subroutine Call
    LCALL英文全称:Long subroutine Call
    RET英文全称:Return from Subroutine
    RETI英文全称:Return from Interruption

    调用和返回之间的过程:

    1. CPU在主程序中遇到调用子程序ADD1的指令;
    2. CPU下一条指令第一字节的地址(PC值,断点处)压入堆栈中;
    3. 栈指针(SP) + 2,并将ADD1的起始地址送入PC,开始执行子程序了。
    4. 子程序执行完,通过RET指令回调到主函数;
    5. 将SP中的地址弹回PC中,回到主函数中。

    ACALL addr11

    指令名称:短调用指令
    目的:调用2KB范围内的所指定的子程序
    源操作数:11位目的地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    ACALL addr11(PC) + 2 -> PC;(SP) + 1 -> (SP), (PCL) -> (SP),(SP) + 1 -> (SP), (PCH) -> (SP),addr(10~0) -> PC(10~0);××××22

    • PCL为PC7 ~ 0即PC的低8位值;
    • PCH为PC15 ~ 8即PC的高8位值;
    1. 断点压入栈的过程
      将栈指针SP向下移动一个单元空间(对其加一操作);
      将PC的低8位送入SP的内容指向的单元空间;
      再将栈指针SP向下移动一个单元空间;
      将PC的高8位送入SP的内容指向的单元空间;
    2. 跳转到子程序过程
      将addr10 ~ 0送入PC10 ~ 0, PC15 ~ 11保持不变,形成16位转移目的地址;
      PC就指向子程序的首地址;
    3. 所调用的子程序首地址必须在ACALL指令后第一字节开始的2KB范围内的ROM中。

    例 (SP) = 40H,(PC) = 0100H,子程序ADD1首地址 0110H;

    • 执行ACALL ADD1
    • (PC) = (PC) + 2 = 0102H;先将PC加2,因指令长2字节;
    • (41H) = 02H ;先将PC的低8位放入SP指针内容的空间地址;
    • (42H) = 01H ;先将PC的高8位放入SP指针内容的空间地址,此时(SP) = 42H;
    • (PC) = 0110H;PC指向了子程序ADD1首地址;

    LCALL addr16

    指令名称:长调用指令
    目的:调用64KB范围内的所指定的子程序
    源操作数:16位目的地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    ACALL addr11(PC) + 3 -> PC;(SP) + 1 -> (SP), (PCL) -> (SP),(SP) + 1 -> (SP), (PCH) -> (SP),addr(15~0) -> PC;××××32

    • PCL为PC7 ~ 0即PC的低8位值;
    • PCH为PC15 ~ 8即PC的高8位值;
    1. 断点压入栈的过程
      将栈指针SP向下移动一个单元空间(对其加一操作);
      将PC的低8位送入SP的内容指向的单元空间;
      再将栈指针SP向下移动一个单元空间;
      将PC的高8位送入SP的内容指向的单元空间;
    2. 跳转到子程序过程
      将addr15 ~ 0送入PC15 ~ 0,形成16位转移目的地址;
      PC就指向子程序的首地址;
    3. 所调用的子程序首地址可以设置在64KB范围内的ROM中。

    例 (SP) = 07H,(PC) = 0123H,子程序ADD1首地址 5678H;

    • 执行LCALL ADD1
    • (PC) = (PC) + 3 = 0126H;先将PC加3,因指令长3字节;
    • (08H) = 26H ;先将PC的低8位放入SP指针内容的空间地址;
    • (09H) = 01H ;先将PC的高8位放入SP指针内容的空间地址,此时(SP) = 09H;
    • (PC) = 5678H;PC指向了子程序ADD1首地址。

    ACALL是你调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K


    RET

    指令名称:子程序返回指令
    目的:从子程序返回

    RETI

    指令名称:中断返回指令
    目的:从中断返回

    助记符功能对标志位影响字节数周期数
    POVACCY
    RET((SP)) -> PCH,(SP) - 1 -> SP,((SP)) -> PCL,(SP) - 1 -> SP××××12
    RETI((SP)) -> PCH,(SP) - 1 -> SP,((SP)) -> PCL,(SP) - 1 -> SP××××12

    • PCL为PC7 ~ 0即PC的低8位值;
    • PCH为PC15 ~ 8即PC的高8位值;
    1. 当子程序执行此指令表示子程序结束了
    2. 恢复断点过程
      先将(SP)内容执行的地址空间作为PC的高8位;
      SP指向上一个地址空间;
      在将(SP)内容执行的地址空间作为PC的低8位;
      SP指向上一个地址空间;
    3. 此时PC中有返回目的地址的16位;

    例 (SP) = 09H,(09H) = 01H,(08H) = 26H,(PC) = 5678H

    • 在子程序中执行RET
    • (PC) = 0178H;先将(SP)内容执行的地址空间内容作为PC的高8位;
    • (SP) = 08H;将(SP)内容减1;
    • (PC) = 0126H;先将(SP)内容执行的地址空间内容作为PC的低8位;
    • (SP) = 07H;将(SP)内容减1;
    • 此时已经返回到地址为0126H的地址。

    四、位条件转移类指令

    JC英文全称:Jump if the Carry flag is set
    JNC英文全称:Jump if Not Carry
    JB英文全称:Jump if the Bit is set
    JNB英文全称:Jump if the Bit is Not set
    JBC英文全称:Jump if the Bit is set and Clear the bit


    JC rel

    指令名称:判布尔累加器C转移指令
    操作数:8位目的地址

    JNC rel

    指令名称:判布尔累加器C转移指令
    操作数:8位目的地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    JC rel(PC) + 2 -> PC,若(C) = 1,则(PC) + rel -> PC;若(C) = 0,则顺序执行××××22
    JNC rel(PC) + 2 -> PC,若(C) = 0,则(PC) + rel -> PC;若(C) = 1,则顺序执行××××22
    1. 累加器C是一个布尔累加器,位累加器;
    2. 根据累加器C中的值进行判断转移。

    JB bit, rel

    指令名称:判位变量转移指令
    操作数:位变量,8位目的地址

    JNB bit, rel

    指令名称:判位变量转移指令
    操作数:位变量,8位目的地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    JB bit rel(PC) + 3 -> PC,若(bit) = 1,则(PC) + rel -> PC;若(bit) = 0,则顺序执行××××32
    JNB bit rel(PC) + 3 -> PC,若(bit) = 0,则(PC) + rel -> PC;若(bit) = 1,则顺序执行××××32
    1. 根据位变量bit的值进行判断转移;
    2. JB、JNB相对于JC、JNC,其是对位变量bit进行判断转移,其他性质都一样。

    JBC bit, rel

    指令名称:判位变量并清零转移指令
    操作数:位变量,8位目的地址

    助记符功能对标志位影响字节数周期数
    POVACCY
    JBC bit rel(PC) + 3 -> PC,若(bit) = 1,则(PC) + rel -> PC,0 -> CY;若(bit) = 0,则顺序执行××××32
    1. 相比于JB,JBC仅仅是增加CY清零的步骤;
    2. 在位变量bit为1时,不仅仅要跳转,还要CY清零。

    五、空操作指令

    NOP英文全称:No Operation

    NOP

    指令名称:空操作指令

    助记符功能对标志位影响字节数周期数
    POVACCY
    NOP空操作××××11

    51单片机之系统指令

    51单片机之逻辑运算指令ANL、ORL、XRL等

    51单片机之数据转移指令MOV、MOVX、MOVC等

    51单片机之位操作指令SETB、CPL等

    51单片机之算术运算指令ADDC、SUBB等

    参考


    由本人水平有限,文章难免有错误,望告知

    展开全文
  • 51单片机之数据转移指令MOV、MOVX、MOVC等

    千次阅读 多人点赞 2019-05-31 23:51:57
    文章目录数据转移指令 数据转移指令 内部RAM数据转移指令 助记符 功能 对标志位影响 字节数 P OV AC CY MOV A, R0 Rn -> A √ 1 MOV A, @Ri ...


    一、片内RAM数据转移指令 MOV

    MOV英文全称: Move


    MOV A, XXX

    目的:将指定的内容送入到累加器A中;
    源操作数:寄存器Rn,间接寄存Ri、直接地址direct与立即数#data

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOV A, Rn(Rn) -> A×××11
    MOV A, @Ri((Ri)) -> A; i = 0, 1×××11
    MOV A, direct(direct) -> A×××21
    MOV A, #datadata -> A×××21

    只有修改累加器中数据才会影响PSW标志位

    例 设 R1 中内容为50H,地址50H中内容为60H

    • MOV A R1:表示将R1所存放的50H内容移动到A中,(Rn) -> A,50H -> A;
    • MOV A @R1:表示R1所表示的50H地址中的60H内容移动到A中,((R1)) = 60H -> A;
    • MOV A, 50H:表示将地址50H存放的60H内容移动到A中,(50H) = 60H -> A;
    • MOV A, #50H:表示将50H这个数移动到A中,50H -> A。

    MOV Rn, XXX

    目的:把源操作数所指定的内容送入当前工作寄存器组中;
    源操作数:累加器A,直接地址direct与立即数data

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOV Rn, A(A) -> Rn××××11
    MOV Rn, direct(direct) -> Rn××××22
    MOV Rn, #datadata -> Rn××××21

    例 累加器A中内容为50H, 地址为60H的空间内容为61H

    • MOV R1, A:表示将A的内容移动到寄存器R1中, (A) = 50H -> R1;
    • MOV R1, 60H:表示将60H的内容移动到寄存器R1中,(60H) = 61H -> R1;
    • MOV R1, #60H:表示将60H这个数放在寄存器R1中,60H -> R1。

    MOV direct, XXX

    目的:把源操作数所指定的内容送入由直接地址direct所指出的内存单元
    源操作数:累加器A,寄存器Rn,直接地址direct1,间接地址@Ri与立即数#data

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOV direct, A(A) -> direct××××21
    MOV direct, Rn(Rn) -> direct××××22
    MOV direct1, direct2(direc2t) -> direct1××××32
    MOV direct, @Ri((Ri) )-> direct1××××22
    MOV direct, #datadata -> direct××××32

    例 设R1中内容为为50H,50H中内容为60H,累加器A中的内容为40H

    • MOV 70H, A:表示为将A中内容40H送到地址为70H中,(A) = 40H -> 70H;
    • MOV 70H, R1:表示为将R1中内容50H送到地址为70H中,(R1) = 50H -> 70H;
    • MOV 70H, 50H:表示将地址为50H空间的内容60H送到地址为70H中,(50) = 60H -> 70H;
    • MOV 70H, @R1:表示R1所表示的50H地址中的60H内容送到地址为70H空间中,((R1)) = 60H -> 70H;
    • MOV 70H, #50H:表示将50H这个数送到地址为70H空间中,50H -> 70H。

    MOV @Ri, XXX

    目的:将源操作数的内容送入间接寄存器中内容指定的RAM单元
    源操作数:累加器A,直接地址direct,立即数#data

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOV @Ri, A(A) -> (Ri)××××11
    MOV @Ri, direct(direct) -> (Ri)××××22
    MOV @Ri, #datadata -> (Ri)××××21

    例 累加器A中内容为50H, 地址为60H的空间内容为61H,R1的内容为70H

    • MOV @R1, A:表示将A的内容送入到R1中的内容指定的RAM单元, (A) = 50H -> (R1) = 70H即70H单元的内容为50H;
    • MOV @R1, 60H:表示将60H的内容送入到R1中的内容指定的RAM单元,(60H) = 61H -> (R1) = 70H即70H单元的内容为61H;
    • MOV @R1, #60H:表示将60H这个数送入到R1中的内容指定的RAM单元,60H -> (R1) = 70H即70H单元的内容为60H。

    MOV DPTR XXX

    目的:将16位源操作数送入16位数据指针
    源操作数:16位操作数,分别对其高8位DPH、低8位DPL传送数值

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOV DPTR, #data16dataH -> DPH,dataL -> DPL××××32

    例 对DPTR送入08D0H内容

    • MOV DPTR, #08D0H;
    • MOV DPH, #08H,MOV DPL, #D0H;

    二、片外RAM数据转移指令 MOVX

    MOVX英文全称: Move External RAM


    MOVX XXX XXX

    目的:CPU对片外RAM或片外I/O外设芯片访问
    源操作数:8为寄存器间接寻址、16为寄存器间接寻址

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOVX A, @Ri((Ri)) -> A,且/RD = 0×××12
    MOVX A, @DPTR((DPTR)) -> A,且/RD = 0×××12
    MOVX @Ri, A(A) -> (Ri),且/WR = 0××××12
    MOVX @DPTR, A(A) -> (DPTR),且/WR = 0××××12
    • @DPTR:指16寄存器间接寻址,寻址范围是片外RAM 0~64KB;
    • @Ri:指8位寄存器间接寻址,寻址范围是片外RAM 0~255B,包括@R1和@R2两种寄存器间接寻址;

    例 R1寄存器指向片外RAM 10H,DPTR寄存器指向片外RAM 7000H,其中10H中内容为20H,7000H中内容为30H,累加器A中内容为40H

    • MOVX A, @R1:表示将R1指向10H地址中的内容送入累加器A,((R1)) = 20H -> A;
    • MOVX A, @DPTR:表示将DPTR指向7000H地址中的内容送入累加器A,((DPTR)) = 30H -> A;
    • MOVX @R1, A:表示将A中的内容送入R1指向10H地址中,(A) = 40H -> (R1) = 10H即10H中的内容改为40H;
    • MOVX @DPTR, A:表示将A中的内容送入DPTR指向7000H地址中,(A) = 40H -> (DPTR) = 7000H即7000H中的内容改为40H。
      执行MOVX指令让/DR和/WR(读写选通信号)自动有效,从而对片外RAM读写
      MOVX A, @Ri只能访问外部RAM 低8位00H~FFH 的256B,高8位由P2决定

    三、片内片外ROM数据转移指令 MOVX

    英文全称: Move Code


    MOVC XXX XXX

    目的:对程序存储器(ROM)进行寻址
    源操作数:寄存器间接寻址

    助记符功能对标志位影响字节数周期数
    POVACCY
    MOVX A, @A + DPTR((A) + (DPTR)) -> A×××12
    MOVX A, @A + PC先(PC) + 1 -> PC,后((A) + (PC)) -> A×××12

    例 A中内容为0DH,PC内容为1003H,1010H的内容为02H

    • MOVC A, @A + PC:表示为将PC内容和累加器A相加形成的地址,取出该地址单元的内容送入到累加器A中,((A) + (PC)) = 02H -> A;

    例 A中内容为10H,DPTR内容为7000H,1010H的内容为02H

    • MOVC A, @A + DPTR:表示为将DPTR内容和累加器A相加形成的地址,取出该地址单元的内容送入到累加器A中,((A) + (DPTR)) = 02H -> A;
      MOVC指令只能读取程序存储器,不能写程序存储器
      MOVC A, @A + PC指令查找后面的256B
      MOVC A, @A + DPTR指令查找整个程序存储器64KB

    四、栈指令 PUSH POP

    PUSH英文全称: Push onto Stack
    POP英文全称: Pop from Stack


    PUSH direct

    目的:直接地址寻址的单元内容压入当前SP堆栈中
    源操作数:直接地址direct

    助记符功能对标志位影响字节数周期数
    POVACCY
    PUSH direct先(SP) + 1 -> (SP),后(direct) -> (SP)××××22

    SP先向下移动一个单元(加一),在将direct中内容送入SP中


    POP direct

    目的:将堆栈顶的内容送入直接地址寻址的单元
    源操作数:堆栈顶内容

    助记符功能对标志位影响字节数周期数
    POVACCY
    POP direct先(SP) -> (direct),后(SP) - 1 -> (SP)××××22

    先将SP指向的堆栈中数据送入直接地址direct,在SP向上移动一个单元(SP减一)


    五、字节交换指令 XCH XCHD

    XCH英文全称: Exchange
    XCHD英文全称: Exchange low-order Digit


    XCH XXX, XXX

    目的:交换源操作数和累加器A的内容
    源操作数:寄存器Rn,直接地址direct,间接地址@Ri

    助记符功能对标志位影响字节数周期数
    POVACCY
    XCH A, Rn(A) -> <- (Rn)×××11
    XCH A, direct(A) -> <- (direct)×××21
    XCH A, @Ri(A) -> <- ((Ri))×××11

    例 A中内容为10H,20H的内容为30H,30H的内容为40H,R1的内容为20H

    • XCH A,R1:表示为交换A与R1中的内容,A = (R1) = 20H,R1 = (A) = 10H;
    • XCH A,20H:表示为交换A与20H中的内容,A = (20H) = 30H,20H = (A) = 10H;
    • XCH A,@R1:表示为交换A与R1表示的地址空间的内容,A = ((R1)) = 40H,30H = (A) = 10H;

    XCHD A, @Ri

    目的:交换累加器A中低4位与Ri间接寻址的单元内容低4位,高4位不变
    源操作数:Ri间接寻址的单元内容的低4位

    助记符功能对标志位影响字节数周期数
    POVACCY
    XCHD A, @Ri(A*) -> <- ((Ri*))×××11

    注:A*是指:A0123
    注:Ri*是指:Ri0123


    51单片机之系统指令

    51单片机之逻辑运算指令ANL、ORL、XRL等

    51单片机之位操作指令SETB、CPL等

    51单片机之控制转移指令SJMP、LJMP等

    51单片机之算术运算指令ADDC、SUBB等

    由本人水平有限,文章难免有错误,望告知

    展开全文
  • 单片机汇编指令

    2021-06-11 21:06:09
    1、无条件转移指令 2、间接转移指令 3、条件转移指令 4、无条件调用和返回指令 5、位操作类指令:判断位转移 (持续更新中)

    1、无条件转移指令
    在这里插入图片描述
    2、间接转移指令
    在这里插入图片描述
    3、条件转移指令
    在这里插入图片描述4、无条件调用和返回指令
    在这里插入图片描述
    5、位操作类指令:判断位转移
    在这里插入图片描述
    (持续更新中)

    展开全文
  • 51单片机汇编语言指令汇总

    千次阅读 多人点赞 2020-06-21 15:57:59
    本文以AT89C51为例,列举51单片机汇编语言指令集。 AT89C51单片机的汇编指令共有111条,可按功能分为5大类: 数据传送类指令28条; 算数操作类指令24条;...rel:相对转移指令中的偏移量,为8位带符号补码数 DPTR
  • 跳转指令短跳指令 AJMP addr11PC←addr11,跳转范围2k长跳指令 LJMP addr16PC←addr16,跳转范围64k间接跳转指令 JMP @A+DPTRPC←(A)+(DPTR)相对转移指令 SJMP rel条件转移指令JZ rel ;(A)=0,转移JNZ rel ;(A)...
  • 一、串操作类指令 ”串“就是内存中一段地址相连的字节或字; 串操作,也叫数据块操作; 可实现存储器数据间的直接传送; 8086有5中基本串操作: MOVS 串传送指令 CMPS 串比较指令 SCAS 串扫描指令 LODS 取串指令 ...
  • 单片机指令系统(2)

    2018-12-07 15:47:22
    这篇博客的内容是指令系统的另一部分,上部分请看上篇博客。单片机指令系统(1) ...1 无条件转移指令 2 条件转移指令 3 间接转移指令 4 调用子程序及返回指令 5 空操作指令 五、位操作类指令 1 位数据传送指...
  • 51单片机跳转指令

    千次阅读 2020-06-06 16:42:02
    @ 无条件转移bai指令(共4条) LJMP addr16 ; PC〈—du— addr16 AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11 SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+rel JMP @A+DPTR ; PC〈—— A+DPTR 第一条指...
  • PIC单片机入门_指令系统

    千次阅读 多人点赞 2016-11-05 13:59:29
    前面学习了PIC单片机的系统框架,也介绍了程序存储器、数据存储器的组织形式。这里需要补充一点的就是寻址方式,之前仅仅提到了立即数寻址、直接寻址。其实还有几个比较重要的寻址方式,PC相对寻址&间接寻址! 1.1 ...
  • 在进行汇编程序设计时,MSP430的指令系统是程序的主体,但为了方便程序编制,还定义了一些指令,这些指令不参与和影响程序的执行,也不在计算机中运行,这类指令称为伪指令。 一般汇编器伪指令能帮助用户完成以下...
  • 单片机汇编指令

    千次阅读 2017-01-16 13:33:17
    一个单片机所需执行指令的集合即为单片机指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码, 单片机才能执行之。现在有很多半导体厂商都推出了自己的...
  • 单片机指令详解

    千次阅读 2011-08-24 21:28:00
    单片机指令详解 1、数据传送类指令 1.MOV:MOV(目的字节),(源字节); 2.MOVC:和MOV用法基本相同,主要用于ROM查表,也就是基址变址中。 3.MOVX:和MOV用法基本相同,主要读写片外RAM中,也就是间接...
  • AVR单片机汇编指令系统

    千次阅读 2019-11-21 17:11:54
    AVR单片机指令系统 计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令...
  • 51单片机的汇编指令(操作码)系统

    千次阅读 2020-06-29 16:11:44
    AT89C51汇编语言指令系统有42种助记符和111种指令,按指令长度可分单字节指令、双字节和三字节指令,按执行时间可分为单机器周期指令(64种)、双机器周期指令(45种)和四周期指令(只有乘、除法指令两种)。...
  • 单片机】汇编指令英文全称

    千次阅读 2014-05-18 15:38:47
    51单片机常用汇编语言助记符英文全称    (1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据...
  • 轩儿的51单片机汇编指令详解

    千次阅读 2020-11-07 13:39:13
    51单片机汇编指令一、寻址方式1、立即寻址(直接给操作数)2、直接寻址(给操作数所在地址)3、寄存器寻址4、寄存器间接寻址5、变址寻址二、数据传送与交换指令三、算术运算和逻辑运算四、控制转移指令五、位操作...
  • 汇编语言——伪指令详解 Wilson Huang(三点羊羽)2020-06-17 07:39:101849收藏27 分类专栏:微机原理、汇编语言 版权 1 汇编语言的语句结构 ...标号是程序的目标标志,总是和某地址相联系,供转移或循环指令控...
  • 51单片机汇编语言指令教程(校对版)2.1:MCS-51指令系统的概述 MCS-51共有111条指令指令的长度和执行时间因不同的指令而各不相同。 2.1.1 指令格式 2.1.2 指令的三种表示形式 2.1.3 指令的字节数 2.1.4 指令的分类 ...
  • 51单片机笔记(二)51单片机指令系统3.1 指令系统基础3.1.1 指令格式3.1.2 通用符号3.2 寻址方式3.3 数据传送指令3.4 算数运算指令3.4.1 加法指令3.4.2 减法指令3.4.3 乘法3.4.4 除法3.4.5 十进制调整指令3.5 逻辑...
  • MCS-51控制转移指令

    千次阅读 2009-06-08 08:57:00
    对于函数调用LACALL主要工作就是将PC压入堆栈中,RET主要工作就是从堆栈中移出PC,跳回主程序。 控制转移指令用于控制程序的流向,所控制的...还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,533
精华内容 613
关键字:

单片机条件转移指令