考研复试单片机汇编用 我是借鉴别人的表格,然后按自己的理解补充的
立即寻址型传送指令 | MOV A,#data | MOV A,#55; A = 55 | |
MOV Rn,#data | MOV R7, #46; R7 = 46 n=0~7 | ||
MOV @Ri,#data | MOV @R0, #78; 如果R0=15H,那么就把78放在15H地址的内容上,n=0,1 | ||
MOV direct,#data | MOV 75H,#78; 将78放到75H地址的内容上 | ||
直接寻址型传送指令 | MOV A,direct | MOV A,55H ;把55H单元地址里面的值放到A中 | |
MOV direct,A | MOV 55H,A ;把A里面的值放到55H地址所在的内容上 | ||
MOV Rn,direct | MOV R0,12H; 把12H地址里面的内容,赋值给R0 | ||
MOV @Rn,direct | MOV @R0,12H; 把12H地址里面的内容,放到R0所在地址内容上 | ||
MOV direct2,direct1 | MOV 01H,02H; 把02H地址的内容,赋值给01H地址的内容上 | ||
寄存器寻址型传送指令 | MOV A,Rn | A = Rn | |
MOV Rn,A | Rn = A | ||
MOV direct,Rn | MOV 55H,R5; 55H地址里的内容=R5 | ||
寄存器间址型传送指令 | MOV A,@Ri | MOV A,@R0; R0地址的内容值 赋值 给A | |
MOV @Ri,A | A的值 赋值给 Ri现在地址的内容值 上 | ||
MOV direct,@Ri | MOV 34H,@R0;将 现在R0的地址的内容 赋值 给 34H地址的内容上 | ||
16位数传送指令 | MOV DPTR,#data16 | MOV DPTR,#1123;DPRT = 1123 唯一一条16位数传送指令 | |
外部ROM字节传送指令 | MOVC A,@A+DPTR | A=(A+DPTR) 查表数据送入A(DPTR) 外部ROM | |
MOVC A,@A+PC | PC=PC+1,A=(A+PC) 查表数据送入A(PC) 外部ROM | ||
外部RAM字节传送指令 | MOVX A,@Ri | 外部RAM 的Ri地址上的内容 送到A中 i=0,1 | |
MOVX @Ri,A | A内容 赋值到 外部RAM 的Ri地址的内容上,i=0,1 | ||
MOVX A,@DPTR | 将 外部RAM16位地址(DPTR)的内容 赋值给 A | ||
MOVX @DPTR,A | 将A的值 赋值给 外部16位RAM(DPTR)地址的内容上 | ||
堆栈操作指令 | PUSH direct | SP=SP+1,(SP)=(direct) 将地址入栈(保护现场) | |
POP direct | direct=(SP),SP=SP-1 将地址出栈(恢复现场) | ||
数据交换指令 | XCH A,Rn | A 和 Rn 互换数据 | |
XCH A,direct | A=(direct),(direct)=A ; 如果direct=30H,就是A 和 30H地址上的内容 互换 | ||
XCH A,@Ri | A=(Ri),(Ri)=A ; A 和 Ri地址上面的内容 互换 | ||
XCHD A,@Ri | A和(Ri)低4位相互交换 | ||
不带Cy加法指令 | ADD A,Rn | A = A+Rn ,n=0~7 | 减法是 SUB |
ADD A,direct | A = A+ direct地址里面的内容 | 减法是 SUB | |
ADD A,@Ri | A = A + Ri地址里面的内容,i=0,1 | 减法是 SUB | |
ADD A,#data | A = A + data 这个数 | 减法是 SUB | |
带Cy加法指令 | ADDC A,Rn | A=A+Rn+Cy | Cy是执行指令之前的,而不是指令执行中生成的Cy |
ADDC A,direct | A=A+direct地址上的内容 + Cy | ||
ADDC A,@Ri | A = A+ Ri地址上的内容 +Cy | ||
ADDC A,#data | A = A + data这个数 +Cy | ||
加1指令 | INC A | A++ | 只有第一条指令对奇偶标志位P产生影响,其余3条不会对任何标志位产生影响 |
INC Rn | Rn++ | ||
INC direct | direct地址上的内容++ | ||
INC @Ri | Ri地址上的内容++ | ||
INC DPTR | DPTR=DPTR+1 | ||
带Cy减法指令 | SUBB A,Rn | A=A-Rn-Cy | |
SUBB A,direct | A=A-direct地址上的内容 - Cy | ||
SUBB A,@Ri | A = A - Ri地址上的内容 - Cy | ||
SUBB A,#data | A = A - data这个数 -Cy | ||
减1指令 | DEC A | A-- | |
DEC Rn | Rn -- | ||
DEC direct | direct地址上的内容-- | ||
DEC @Ri | Ri地址上的内容-- | ||
十进制调整指令 | DA A | AC=1/低四位>9,A=A+06H;Cy=1/高四位>9,A=A+60H | |
乘除指令 | MUL AB | A*B=BA,形成标志位(OV溢出) B是高8位,A是低8位 | |
DIV AB | A/B=A……B,形成标志位(OV溢出) A是商,B是余数 例如5/2=2余1 A=2,B=1 | ||
逻辑与指令 | ANL A,Rn | A = A & Rn (注意是按位与&,不是逻辑与&&) | |
ANL A,direct | A = A & direct地址上的内容 | ||
ANL A,@Ri | A= A & Ri地址上的内容 | ||
ANL A,#data | A = A & data这个数 | ||
ANL direct,A | direct地址上的内容 = direct地址上的内容 & A | ||
ANL direct,#data | direct地址上的内容 = direct地址上的内容 & data这个数 | ||
逻辑或指令 | ORL A,Rn | A = A | Rn (按位或| , 而不是逻辑或||) | |
ORL A,direct | A = A | direct地址上的内容 | ||
ORL A,@Ri | A = A | Ri地址上的内容 | ||
ORL A,#data | A = A | data这个数 | ||
ORL direct,A | direct地址上的内容 = direct地址上的内容 | A | ||
ORL direct,#data | direct地址上的内容 = direct地址上的内容 | data这个数 | ||
逻辑异或指令 | XRL A,Rn | A = A ^ Rn(^在C指的是“异或”,在汇编可能是指的“与” ) | |
XRL A,direct | A ^= direct地址上的内容 | ||
XRL A,@Ri | A ^=Ri地址上的内容 | ||
XRL A,#data | A ^= data这个数 | ||
XRL direct,A | direct地址内容 ^= A | ||
XRL direct,#data | direct地址上内容 ^= data这个数 | ||
取反和清理指令 | CPL A | A = ~A 取反 | |
CLR A | A=0 清零 | ||
移位指令 | RL A | A左移一位(不是<<),高位移出到低位 | |
RR A | 右移,不是>>,低位移出到高位 | ||
RLC A | Cy在最高位,向左移一位 | ||
RRC A | Cy在最高位,向右移一位 | ||
SWAP A | 高四位和低四位交换位置 | ||
控制转移指令 | LJMP addr16 | PC=addr16(长跳转,能跳64K内的地址) | |
AJMP addr11 | PC=PC+2,PC10~PC0=addr11(跳2K内的地址) | ||
SJMP rel | PC=PC+2,PC=PC+rel 先PC+2,再PC=PC+rel(跳256字节地址) | ||
JMP @A+DPTR | PC=A+DPTR 通常跳到自己定义的数组去的 | ||
比较条件转移指令 | CJNE A,#data,rel | A=data,PC=PC+3;A!=data,PC=PC+3+rel;形成Cy标志位 | A>=data,Cy=0;A |
CJNE A,direct,rel | C比较,J 跳转,NE不相等 | ||
CJNE Rn,#data,rel | Rn 和 data这个数 比较,不相等就跳到rel上去,相等就顺序执行下一条 | ||
CJNE @Ri,#data,rel | |||
减1转移指令 | DJNZ Rn,rel | Rn-1!=0,PC=PC+2+rel;Rn-1=0,PC=PC+2; (D减1,J跳转,NZ不等于0) | |
DJNZ direct,rel | (direct地址上的内容 - 1 )不等于 0 就跳到 rel上去, 相等就顺序执行 | ||
短调用指令 | ACALL addr11 | PC=PC+2,SP=SP+1,(SP)=PC7~PC0,SP=SP+1,SP=PC15~PC8,PC10~0=addr11 | |
长调用指令 | LCALL addr16 | PC=PC+3,SP=SP+1,(SP)=PC7~PC0,SP=SP+1,SP=PC15~PC8,PC=addr16 | 调用地址,如LCALL DELAY |
返回指令 | RET | PC15~PC8=(SP),SP=SP-1,PC7~PC0=(SP),SP=SP-1 | 程序返回 |
RETI | PC15~PC8=(SP),SP=SP-1,PC7~PC0=(SP),SP=SP-1 | 中断返回,相当于执行完程序,返回中断前的地址 | |
位传送指令 | MOV C,bit | C=(bit) | C应该是Cy |
MOV bit,C | bit = C | bit位地址吧 20~2Fh单元 | |
位清零和位置位指令 | CLR C | Cy =0 | |
CLR bit | 位地址bit = 0 | ||
SETB C | Cy = 1 | ||
SETB bit | bit = 1 | 位地址 | |
位运算指令(布尔操作) | ANL C,bit | 与& | |
ANL C,/bit | /bit指的是bit先取反,再进行与& | ||
ORL C,bit | 或| | ||
ORL C,/bit | /bit指的是bit先取反,再进行或| | ||
CPL C | Cy = ~Cy | ||
CPL bit | bit = ~bit | ||
位跳转指令 | JC rel | Cy=1,PC=PC+2+rel; Cy=0,PC=PC+2 | Cy=1就跳 |
JNC rel | Cy=0,PC=PC+2+rel; Cy=1,PC=PC+2 | Cy=0就跳 | |
JB bit,rel | (bit)=1,PC=PC+3+rel; (bit)=0,PC=PC+3 | bit =1就跳 | |
JNB bit,rel | (bit)=0,PC=PC+3+rel; (bit)=1,PC=PC+3 | bit =0就跳 | |
JBC bit,rel | (bit)=1,PC=PC+3+rel,bit=0; (bit)=0,PC=PC+3 | bit =1就跳,并将bit清0 | |
JZ rel | A=0,则知PC=PC+2+rel; PC=PC+2 | A=0就跳 | |
JNZ rel | A != 0 就跳 |
移位补充说明: