1、8种常用伪指令 1.ORG 16位地址 ;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。 2.[标号:] DB 字节数据项表 ;将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG: DB 88H,100,“7”,“C” 3.[标号:]DW 双字节数据项表 ;定义16位地址表,16地址按低位地址存低位字 节,高位地址存高位字
2、节。 例如:TAB: DW 1234H,7BH 4.名字 EQU 表达式 或名字=表达式 ;用与给一个表达式赋值或给字符串起名字。之 后名字可用做程序地址,数据地址或立即数地址
3、 使用。名字必须是一字母开头的字母数字串。 例如:COUNT=10 或 SPACE EQU 10H 5.名字 DATA 直接字节地址 ;给8位内部RAM单元起个名字,名字必须是一
4、 字母开头的字母数字串。同一单元可起多个名字。 例如:ERROR DATA 80H 6.名字 XDATA 直接字节地址 ;给8位外部RAM起个名字,名字规定同DATA
5、 伪指令。例如:IO_PORT XDATA 0CF04H 7.名字 BIT 位指令 ;给一可位寻址的位单元起个名字,规定同DATA 伪指令。例如:SWT BIT 30H 8.[标号:] END ;指出源程序到此结束,汇编对其后的程序语句不
6、 予理睬.源程序只在主程序最后使用一个END 定义指令符号 符号 说明 Rn 目前所选定的寄存器组中的R0-R7寄存器 Ri 当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1) Direct 8位直接寻址地址,可以是内存RAM地址(00H--7FH)或SFR(80H--FFH) @Ri 通过R0或R1做间接寻址内部RAM的地址(00H--FFH)的前缀 #data 8位立即数 #data16 16位立即数,只有DPTR中才用到 Addr 16 只用在LCALL(长指令调用,三字节)和LJMP(无条件长转移指令)指令中
7、的16位目的地地址,可寻址64K存储器中的任何地址 Addr 11 使用在ACALL(绝对调用指令,双字节)和AJMP(无条件绝对转移指令)指令中的11位目的地地址,可寻址下一个指令算起2K内的任何地址,即目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间 DPTR 数据指针 rel 有符号的8位偏移地址(Offset Address),其范围是从下一个指令算起的-128到+128字节中。负值表示地址向前推算,正值表示地址向后推算。使用在SJMP和所有条件式跳转指令中 bit 可直接位寻址的内部数据RAM(20H--2FH),其中地址范围为(00H--7FH)或特殊
8、功能积存器(80H--FFH) A 累加器 B 累加器,用于乘法和除法 (X) 某地址单元X中的内容 ((X)) 某地址单元X内存放一地址信息,此命令为寻址地址信息所指地址中存放的数据 MCS51汇编指令 指令格式(助记符) 指令功能说明 字节 周期 MOV A,direct (direct)→(A) 直接单元地址中的数据→累加器A 1 1 MOV A,#data #data→(A) 8位立即数→累加器A 2 1 MOV A,Rn (Rn )→(A) Rn寄存器中的数据→累加器A 1 1 MOV A,@Ri ((
9、Ri))→(A) Ri中的数据指向的地址单元中的数据 →累加器A 1 1 MOV Rn,direct (direct)→(Rn) 直接寻址单元中的数据 —> 寄存器Rn 2 2 MOV Rn,#data #data→(Rn) 8位立即数 —> 寄存器Rn 2 1 MOV Rn,A (A)→(Rn) 累加器A中的数据 —> 寄存器Rn 1 1 MOV direct,direct (direct)→(direct) 直接地址单元中的数据→直接地址单元direct 3 2 MOV direct,#data #data→(direct) 立即数→
10、直接地址单元direct 3 2 MOV direct,A (A)→(direct) 累加器A中的数据→直接地址单元direct 2 2 MOV direct,Rn (Rn)→(direct) 寄存器Rn中的数据→直接地址单元direct 2 2 MOV direct,@Ri ((Ri))→(direct) 寄存器Ri中的数据指定的地址单元中数据→直接地址单元direct 2 2 MOV @Ri,direct (direct)→((Ri)) 直接地址单元中的数据→以Ri中的内容为地址的RAM单元 2 2 MOV @Ri,#data #data→((
11、Ri)) 立即数→以Ri中的内容为地址的RAM单元 2 1 MOV @Ri,A (A)→((Ri)) 累加器A中的数据→以Ri中的内容为地址的RAM单元 1 1 MOVC A,@A+DPTR ((A))+(DPTR)→(A) 表格地址单元中的数据→累加器A 3 2 MOVC A,@A+PC ((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的数据→累加器A 1 2 MOVX @DPTR,A (A)→((DPTR)) 累加器中的数据→数据指针指向片外RAM地址中 3 2 MOVX A, @DPTR (A)→((DPTR)) 累
12、加器中的数据 → 数据指针指向片外RAM地址中 3 2 MOVX A, @Ri ((Ri))→(A) 寄存器Ri指向片外RAM地址中的数据→累加器A中 1 2 MOVX @Ri,A (A)→((Ri)) 累加器中的数据→寄存器Ri指向片外RAM地址中 1 2 PUSH direct (SP)+1→(SP),(direct)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中 2 2 PUSH Acc 将累加器A中的数据→堆栈顶端 2 2 POP direct (SP)→(direct)(SP)-1→(SP), 堆栈
13、指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作 2 2 POP A 将堆栈顶端的数据→累加器A 2 2 XCH A,Rn (A)←→(Rn)累加器与工作寄存器Rn中的数据互换 1 1 XCH A,@Ri (A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的数据互换 1 1 XCH A, direct (A)←→(direct)累加器与直接地址单元中的内容互换 2 2 XCHD A,@Ri (A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的数据低半字节互换 1 1 SWAP A (
14、A3-0)←→(A7-4)累加器中的内容高低半字节互换 1 1 MOV DPTR,#data16 #dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL 3 2 ADD A,#data A)+#data→(A) 累加器A中的数据与立即数#data相加,结果存在A中 2 1 ADD A,direct A)+(direct)→(A) 累加器A中的数据与直接地址单元中的数据相加,结果存在A中 2 1 指令格式(助记符) 指令功能说明 字节 周期 ADD A,Rn (A)+(Rn)→(A) 累加器A中的数据与工
15、作寄存器Rn中的数据相加,结果存在A中 1 1 ADD A,@Ri (A)+((Ri))→(A) 累加器A中的数据与工作寄存器Ri所指向地址单元中的数据相加,结果存在A中 1 1 ADDC A,direct (A)+(direct)+(C)→(A) 累加器A中的数据与直接地址单元的数据连同进位位相加,结果存在A中 2 1 ADDC A,#data (A)+#data +(C)→(A) 累加器A中的数据与立即数连同进位位相加,结果存在A中 2 1 ADDC A,Rn A)+Rn+(C)→(A) 累加器A中的数据与工作寄存器Rn中的数据、连同进位位相加,结
16、果存在A中 1 1 ADDC A,@Ri (A)+((Ri))+(C)→(A) 累加器A中的数据与工作寄存器Ri指向地址单元中的数据、连同进位位相加,结果存在A中 1 1 SUBB A,direct (A)-(direct)-(C)→(A) 累加器A中的数据与直接地址单元中的数据、连同借位位相减,结果存在A中 2 1 SUBB A,#data (A)-(Rn)-(C)→(A) 累加器A中的数据与工作寄存器中的数据、连同借位位相减,结果存在A中 2 1 SUBB A,Rn (A)-(Rn)-(C)→(A) 累加器A中的数据与工作寄存器中的数据、连同借位位相
17、减,结果存在A中 1 1 SUBB A,@Ri (A)-((Ri))-(C)→(A) 累加器A中的数据与工作寄存器Ri指向的地址单元中的数据、连同借位位相减,结果存在A中 1 1 MUL AB (A)×(B)→(A)和(B) 累加器A中的数据乘以寄存器B中的数据,结果高字节存入寄存器B,底字节存入累加器A 1 4 DIV AB (A)÷(B)→(A)和(B) 累加器A中的数据除以寄存器B中的数据,结果的商存入累加器A,余数存入寄存器B中 1 4 INC A +1¡ú(A) 累加器A中的数据加1,结果存在A中 1 1 INC direct (
18、direct)+1→(direct) 直接地址单元中的数据加1,结果送回原地址单元中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作 2 1 INC @Ri ((Ri))+1→((Ri)) 寄存器的数据指向的地址单元中的数据加1,结果送回原地址单元中 1 1 NC Rn Rn)+1→(Rn)寄存器Rn的数据加1,结果送回原地址单元 1 1 INC DPTR (DPTR)+1→(DPTR)数据指针的数据加1,结果送回数据指针中 1 2 DEC A (A)-1→(A)累加器A
19、中的数据减1,结果送回累加器A 1 1 DEC direct (direct)-1→(direct)直接地址单元中的数据减1,结果送回直接地址单元中 2 1 DEC @Ri ((Ri))-1→((Ri))寄存器Ri指向的地址单元中的数据减1,结果送回原地址单元中 1 1 DEC Rn (Rn)-1→(Rn)寄存器Rn中的数据减1,结果送回寄存器Rn中 1 1 DA A 累加器A中的数据做BCD调整 1 1 RL A 累加器A中的数据左移一位,bit7¡úbit0 1 1 RR A 累加器A中的数据右移一位,bit7¡úbit7 1
20、 1 RLC A 累加器A中的数据连同进位标志位CY左移一位,bit7¡úCY,CY¡úbit0 1 1 RRC A 累加器A中的数据连同进位CY位CY右移一位,bi0¡úCY,CY¡úbit7 1 1 SWAP A 累加器中的数据高低半字节互换 1 1 CPL A 累加器中的数据按位取反,即0¡ú1,1¡ú0 1 1 CLR A 0¡ú(A),累加器中的数据清0H 1 1 ANL A,direct 累加器A中的数据和直接地址单元中的数据执行与操作。结果存在寄存器A中 2 1 ANL direct,#data 直接地址单
21、元中的数据和立即数执行与操作。结果存在直接地址单元中 3 2 指令格式(助记符) 指令功能说明 字节 周期 NL A,#data 累加器A的数据和立即数执行与操作。结果存在累加器A中 2 1 NL A,Rn 累加器A的数据和寄存器Rn中的数据执行与操作。结果存在累加器A中 1 1 ANL direct,A 直接地址单元中的数据和累加器A的数据执行与操作。结果存在直接地址单元中 2 1 ANL A,@Ri 累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行与操作。结果存在累加器A中 1 1 ORL A,direct 累加器A中的数
22、据和直接地址单元中的数据执行逻辑或操作。结果存在寄存器A中 2 1 ORL direct,#data 累加器A中的数据和直接地址单元中的数据执行逻辑或操作。结果存在寄存器A中 3 2 ORL A,#data 累加器A的数据和立即数执行逻辑或操作。结果存在累加器 2 1 ORL A,Rn 累加器A的数据和寄存器Rn中的数据执行逻辑或操作。结果存在累加器A中 1 1 ORL direct,A 直接地址单元中的数据和累加器A的数据执行逻辑或操作。结果存在直接地址单元中 2 1 ORL A,@Ri 累加器A的数据和工作寄存器Ri指向的地址单元中的数据
23、执行逻辑或操作。结果存在累加器A中 1 1 XRL A,direct 累加器A中的数据和直接地址单元中的数据执行逻辑异或操作。结果存在寄存器A中 2 1 XRL direct,#data 直接地址单元中的数据和立即数执行逻辑异或操作。结果存在直接地址单元中 3 2 XRL A,#data 累加器A的数据和立即数执行逻辑异或操作。结果存在累加器A中 2 1 XRL A,Rn 累加器A的数据和寄存器Rn中的数据执行逻辑异或操作。结果存在累加器A中 1 1 XRL data,A 直接地址单元中的数据和累加器A的数据执行逻辑异或操作。结果存在直接地址
24、单元中 2 1 XRL A,@Ri 累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行逻辑异或操作。结果存在累加器A中 1 1 CLR C 清除进位标志CY为0 1 1 CLR bit 清除bit为0 2 1 SETB C 设定进位标志CY为1 1 1 SETB bit 设定bit为1 2 1 CPL C 将进位标志CY反相 1 1 CPL bit 将bit反相 2 1 ANL C,bit 将进位标志CY AND bit值¡ú进位标志位CY 2 2 ANL C,/bit 将进位标志CY AND bit反相值¡ú进位
25、标志位CY 2 2 ANL A,#data 将累加器A的各位与立即数的相对位置做AND¡úA累加器 2 2 ORL C,bit 将进位标志CY OR bit值¡ú进位标志位CY 2 2 ORL C,/bit 将进位标志CY OR bit反相值¡ú进位标志位CY 2 2 ORL A,#data 将累加器A的各位与立即数的相对位置做OR¡úA累加器 2 2 MOV C,bit 将bit值¡ú进位标志位CY 2 1 MOV bit,C 将进位标志位CY¡úbit值 2 2 JC rel 当进位标志位CY=1就跳至rel,否则执行下一条指令 2
26、 2 JNC rel 当进位标志位CY=0就跳至rel,否则执行下一条指令 2 2 JB bit rel 当进bit=1就跳至rel,否则执行下一条指令 3 3 JNB bit rel 当进bit=0就跳至rel,否则执行下一条指令 3 3 JBC bit rel 当进bit=1跳至rel,并且清除此bit为0,否则执行下一条指令 3 3 ACALL addr11 2K范围内子程序调用 2 2 LCALL addr16 64K范围内子程序调用 3 3 RET 子程序返回 1 2 RET1 中断服务程序结束返回 1 2 指令格式
27、助记符) 指令功能说明 字节 周期 AJMP addr11 2K范围内无条件跳转 2 2 LJMP addr16 64K范围内无条件跳转 2 2 SJMP rel 在此指令的前128或后128范围内无条件跳转 2 2 JMP @A+DPTR 跳至@A+DPTR所指定的地址 1 2 JZ rel 如A的内容为0,则短跳转,负责执行下一条指令 2 2 JNZ rel 如A的内容不为0,则短跳转,负责执行下一条指令 2 2 CJNE A,direct,rel 如A的内容与直接地址内的数据不同,则短跳转 3 2 CJNE A,#data,rel 如A的内容与立即数不同,则短跳转 3 2 CJNE Rn,#data,rel 如Rn寄存器中的数据与立即数不同,则短跳转 3 2 CJNE @Ri,#data,rel 如间接地址的数据与立即数不同,则短跳转 3 2 DJNZ Rn,rel Rn寄存器中的数据减1,若不为0,则短跳转,否则执行下条指令 2 2 DJNZ direct,rel 直接地址中的数据减1,若不为0,则短跳转,负责执行下条指令 3 2 NOP CPU仅仅作取指令,不动作 1 1






