当前位置:文档之家› MCS-51指令详解

MCS-51指令详解

MCS-51指令详解
MCS-51指令详解

MCS-51指令详解

说明:为了使MCS-51单片机初学者快速入门,迅速掌握单片机指令含意、操作码、操作数及;对应地址,汇编语言怎样编写等,现按指令操作码按顺序编写,可对照本公司编写的<>一书第145页指令手册查看,更详细资料请阅第四章 MCS-51指令系统" 及第124页指令系统摘要。并在仿真器上装入;JJM.HEX文件,并对有关单元置数,用单步(F8)验证其正确性及其运行结果。

ORG 0000H

NOP ;空操作指令

AJMP L0003 ;绝对转移指令

L0003: LJMP L0006 ;长调用指令

L0006: RR A ;累加器A内容右移(先置A为88H)

INC A ; 累加器A 内容加1

INC 01H ;直接地址(字节01H)内容加1

INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1

;(设R0=02H,02H=03H,单步执行后02H=04H)

INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1

;(设R1=02H,02H=03H,单步执行后02H=04H)

INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少)

INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用

S0019: LCALL S001C ;长调用

S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0

;单步执行后查A和C内容为多少)

DEC A ;A的内容减1

DEC 01H ;直接地址(01H)内容减1

DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1

DEC R0 ; R0内容减1

DEC R1 ; R1内容减1

DEC R2 ; R2内容减1

DEC R3 ; R3内容减1

DEC R4 ; R4内容减1

DEC R5 ; R5内容减1

DEC R6 ; R6内容减1

DEC R7 ; R7内容减1

JB 20H,L002D;如果位(20H,即24H的0位)为1则转移L002D: AJMP L0017 ;绝对转移

RET ;子程序返回指令

RL A ;A左移

ADD A,#01H ;A的内容与立即数(01H)相加

ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加 ADD A,R0 ; A的内容与寄存器R0的内容相加

ADD A,R1 ; A的内容与寄存器R1的内容相加

ADD A,R2 ; A的内容与寄存器R2的内容相加

ADD A,R3 ; A的内容与寄存器R3的内容相加

ADD A,R4 ; A的内容与寄存器R4的内容相加

ADD A,R5 ; A的内容与寄存器R5的内容相加

ADD A,R6 ; A的内容与寄存器R6的内容相加

ADD A,R7 ; A的内容与寄存器R7的内容相加

JNB 30H,L0041 ;直接位(30H)为0相对转移

L0041: ACALL S0100 ;绝对调用

RETI ;中断返回指令

RLC A ;带进位位左移

ADDC A,#02H ;A带进位位与立即数(#02H)相加

ADDC A,02H ; A带进位位与直接地扯(02H内容)相加

ADDC A,@R0 ; A带进位位与R0间扯内容相加 ADDC A,@R1 ; A带进位位与R1间扯内容相加 ADDC A,R0 ; A带进位位与R0内容相加

ADDC A,R1 ; A带进位位与R1内容相加

ADDC A,R2 ; A带进位位与R2内容相加

ADDC A,R3 ; A带进位位与R3内容相加

ADDC A,R4 ; A带进位位与R4内容相加

ADDC A,R5 ; A带进位位与R5内容相加

ADDC A,R6 ; A带进位位与R6内容相加

ADDC A,R7 ; A带进位位与R7内容相加 JC L0095 ;进位为1转移

NOP

AJMP L0017 ;绝对转移

ORL 02H,A ;直接地址内容与A或

ORL 02H,#02H ; 直接地址内容与立即数或 ORL A,#44H ;A与立即数或

ORL A,02H ; A与直接地址内容或

ORL A,@R0 ; A与R0间址内容或

ORL A,@R1 ; A与R1间址内容或 ORL A,R0 ; A与R0内容或

ORL A,R1 ; A与R1内容或

ORL A,R2 ; A与R2内容或

ORL A,R3 ; A与R3内容或

ORL A,R4 ; A与R4内容或

ORL A,R5 ; A与R5内容或

ORL A,R6 ; A与R6内容或

ORL A,R7 ; A与R7内容或

JNC L0017 ;进位为0转移

ACALL L0017 ;绝对调用

ANL 02H,A ; 直接地址与A与

ANL 02H,#02H ; 立即数与直接地址与 ANL A,#02H ; A与立即数与

ANL A,02H ;A与直接地址与

ANL A,@R0 ; A与R0间址与

ANL A,@R1 ; A与R1间址与

ANL A,R0 ; A与R0与

ANL A,R1 ; A与R1与 ANL A,R2 ; A与R2与 ANL A,R3 ; A与R3与 ANL A,R4 ; A与R4与 ANL A,R5 ; A与R5与 ANL A,R6 ; A与R6与 ANL A,R7 ; A与R7与 JZ L0084 ;A为零转移

L0084: AJMP L0017 ;绝对转移

XRL 01H,A ;直接地址与A异或

XRL 02H,#01H ; 直接地址与立即数异或 XRL A,#01H ;A与立即数异或

XRL A,01H ; A与直接地址异或

XRL A,@R0 ; A与R0间址址异或

XRL A,@R1 ; A与R1间址址异或

XRL A,R0 ; A与R0异或

XRL A,R1 ; A与R1异或

XRL A,R2 ; A与R2异或

XRL A,R3 ; A与R3异或

XRL A,R4 ; A与R4异或

L0095: XRL A,R5 ; A与R5异或

XRL A,R6 ; A与R6异或

XRL A,R7 ; A与R7异或

JNZ L0084 ;A不为零转

L009A: ACALL L0084 ;绝对调用

ORL C,01H ;直接位或到进位

JMP @A+DPTR;相对于DPTR间接转

MOV A,#01H ;立即数送A

MOV 01H,#02H ;立即数送直接地址 MOV @R0,#01H ;立即数送间址R0 MOV @R1,#02H ; 立即数送间址R1 MOV R0,#01H ; 立即数送R0

MOV R1,#01H ; 立即数送R1

MOV R2,#01H ; 立即数送R2

MOV R3,#01H ; 立即数送R3

MOV R4,#01H ; 立即数送R4

MOV R5,#01H ; 立即数送R5

MOV R6,#01H ; 立即数送R6

MOV R7,#01H ; 立即数送R7

SJMP L00BA ;短转移

L00BA: AJMP L0095 ;绝对转移

ANL C,02H ;直接地址与进位与

ORG 00C0H ;

MOV 02H,01H ;直接地址送直接地址 MOV 01H,@R0;间址R0送直接地址

MOV 01H,@R1; 间址R1送直接地址 MOV 01H,R0 ; R0送直接地址

MOV 01H,R1 ; R1送直接地址

MOV 01H,R2 ; R2送直接地址

MOV 01H,R3 ; R3送直接地址

MOV 01H,R4 ; R4送直接地址

MOV 01H,R5 ; R5送直接地址

MOV 01H,R6 ; R6送直接地址

MOV 01H,R7 ; R7送直接地址

NOP

MOV DPTR,#1234H;建立数据指针地址为1234H

ACALL L00BA ;绝对调用

MOV 03H,C ;进位送03H位(即20H的03位)

MOVC A,@A+DPTR ;由A+DPTR寻扯的程序存贮器字节送A SUBB A,#01H ;A减去立即数和进位位

SUBB A,02H ; A减去直接地址内容和进位位

SUBB A,@R0 ; A减去R0间接RAM和进位位

SUBB A,@R1 ; A减去R1间接RAM和进位位

SUBB A,R0 ; A减去R0和进位位 SUBB A,R1 ; A减去R1和进位位 SUBB A,R2 ; A减去R2和进位位 SUBB A,R3 ; A减去R3和进位位 SUBB A,R4 ; A减去R4和进位位 SUBB A,R5 ; A减去R5和进位位 SUBB A,R6 ; A减去R6和进位位 SUBB A,R7 ; A减去R7和进位位 ORL C,/00H ;直接位的反或到进位

AJMP L0084 ;绝对转移

MOV C,03H ;直接位数送进位

INC DPTR ;数据指针加1

MUL AB ;A乘以B

NOP ;A5H为二字节空操作指令

NOP

MOV @R0,05H ;直接字芯送R0间接RAM MOV @R1,05H ; 直接字芯送R1间接RAM MOV R0,05H ; 直接字芯送R0

单片机汇编语言查表实例

下面是汇编语言实现楼宇对讲功能的查表实例: 当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在RXD中,RXD+1保存指令终止符号,如要实现某个操作,外部发来0XA0操作符到RXD中,0XFF到RXD+1中,即开启查表,开始执行下列程序: MOV A,(RXD_Buf+1) CJNE A,RXD_Buf,Exit_Receive_Msg_Proc如果为退出指令,则退出 MOV B,RXD_Buf JmpX_By_Ins Division_Instruction,Run_Instr_Addr子程序 ;================================== Division_Instruction: DB00H,01H,03H,05H,06H,07H,09H,0AH,13H,14H,15H,16H DB28H,29H,2AH,2CH,2EH,30H,31H,33H,35H,FAH;FLAG OF END ;================================== Run_Instr_Addr: LJMP Call_By_Manger;00H; LJMP Put_Down_Hook;01H; LJMP Put_Off_Hook;03H; LJMP Disable_Calling;05H; LJMP Enable_Get_Msg;06H; LJMP There_Are_Msg;07H; LJMP Call_By_Door;09H; LJMP FeedBack_Alarm;0AH LJMP Put_Off_Hook_For_Out;13H; LJMP Set_Up_Fortify_By_GLC;14H; LJMP Disable_Alarm_By_GLC;15H; LJMP Reset_Divi_Password;16H; LJMP Calling_By_T_Main;28H; LJMP Hook_On_By_Brother;29H; LJMP Hook_Off_By_Brother;2AH; LJMP Hook_On_By_T_Main;2CH; LJMP Calling_By_Brother;2EH; LJMP Define_Baud_Rate;30H LJMP GLC_Proced_Alarm;31H LJMP Graphic_Msg_In_Main;33H LJMP Rst_Standart_Rate;35H Return_Main_Body_For_Divi_Ins: LJMP Exit_Receive_Msg_Proc;FAH JmpX_By_Ins MACRO I_Table,F_Table MOV DPTR,#I_Table将指令表首地址赋给DPTR LCALL DPTR_Comp_B调用 MOV A,R05此时R05表示查找到的位置 MOV B,#03LJMP指令占三个字节 MUL AB

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

MCS-51指令表

MCS-51单片机指令汇总表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位字节 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机指令表

此表主要是为了方便大家查阅每条指令的作用,写法以及字节数和周期数,建议大家保存为书签。 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1

MCS-51单片机指令系统

一、填空题 1、寻址是指( )。80C51单片机指令系统有7种寻址方式,分别是:( )。 2、访问内部RAM可以采用的两种寻址方式为:( )和( )。 3、MCS-51单片机指令的基本格式为:( )。 4、Rn代表( ),其中n的取值范围是( );Ri代表( ),其中i的取值范围是( )。@Ri的含义是( )。 5、在单片机指令中,30H和#30H的区别是( );R0和@ R0的区别是( );A←R1 和A←(R1) 的区别是( );DPTR和@DPTR的区别是( )。 6、汇编是指由( )“翻译”为( )的过程。 7、常用的伪指令有8条,试写出其中的5条( )、( )、( )、( )、( )。 8、LJMP指令的转移范围是(); AJMP指令的转移范围是(); SJMP指令的转移范围是()。 二、简答题 1、指出下列指令中的操作数的寻址方式。 (1)MOV R0,#30H (2)MOV A,30H (3)MOV A,@R0 (4)MOV @R0,A (5)MOVC A,@A+DPTR (6)CJNE A,#00H,30H (7)MOV C,30H (8)MUL AB (9)MOV DPTR,#1234H (10)POP ACC 2、80C51指令中,常用字符代表立即数或存储单元,试判断下列字符ABC的含义。(1)MOV A,#ABC (2)MOV A,ABC (3)MOV C,ABC (4)MOV DPTR,#ABC 3、若R0=11H,(11H)=22H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV A,@R0 (3)MOV A,33H (4)MOV A,#33H 4、若A=11H,(11H)=22H,B=44H,写出执行下列指令后的结果。 (1)MOV R1,A (2)MOV R3,11H (3)MOV R3,#11H (4)MOV R3,B 5、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV 40H,A (2)MOV 40H,R0 (3)MOV 40H,@R0 (4)MOV 40H,22H (5)MOV 40H,#22H 6、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV @R0,A (2)MOV @R0,22H (3)MOV @R0,#22H 7、若 A=11H,R0=33H,B=44H,(11H)=22H,(22H)=66H,(33H)=44H,分别写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV B,#55H (3)MOV 40H,@R0 (4)MOV 11H,22H (5)MOV @R0,22H 8、试将30H、R7、B、A、PSW、DPTR中的数据依次压入堆栈。并指出每次堆栈操作后,SP=?、(SP)=?设原SP=60H,当前工作寄存器区为0区,(30H)=11H,R7=22H,B=33H,A=44H,PSW=55H,DPTR=6677H。 9、若A=78H,R0=34H,(34H)=DCH,(56H)=ABH,求分别执行下列指令后A和Cy中的数据。 (1)ADD A,R0 (2)ADDC A,@R0 (3)ADD A,56H (4)ADD A,#56H

常见51单片机指令及详解

常见51单片机指令及详解 数据传递类指令 (1)以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。 下面我们通过一些例子加以说明: MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。 MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。 MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。 MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。 (2)以寄存器Rn为目的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。 (3)以直接地址为目的操作数的指令 MOV direct,A 例: MOV 20H,A MOV direct,Rn MOV 20H,R1

MOV direct1,direct2 MOV 20H,30H MOV direct,@Ri MOV 20H,@R1 MOV direct,#data MOV 20H,#34H (4)以间接地址为目的操作数的指令 MOV @Ri,A 例:MOV @R0,A MOV @Ri,direct MOV @R1,20H MOV @Ri,#data MOV @R0,#34H (5)十六位数的传递指令 MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。则就相当于执行了MOV DPTR,#3512H。 累加器A与片外RAM之间的数据传递类指令 MOVX A,@Ri MOVX @Ri,A MOVX #9; A,@DPTR MOVX @DPTR,A 说明: 1)在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM 的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。 2)要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以

51单片机指令表汇总

51单片机指令表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器内容传送到累加器 1 1 MOV A,direct 直接地址内容传送到累加器 2 1 MOV A,@Ri 间接RAM内容传送到累加器 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器内容传送到寄存器 1 1 MOV Rn,direct 直接地址内容传送到寄存器 2 2 MOV Rn,#data 立即数传送到寄存器 2 1 MOV direct,Rn 寄存器内容传送到直接地址 2 2 MOV direct,direct 直接地址传内容传送到直接地址 3 2 MOV direct,A 累加器内容传送到直接地址 2 1 MOV direct,@Ri 间接RAM内容传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 累加器内容传送到间接RAM 1 1 MOV @Ri,direct 直接地址内容传送到间接RAM 2 2 MOV @Ri,#data 立即数传送到间接RAM 2 1 MOV DPTR,#data16 16 位地址传送到数据指针 3 2 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8位地址)内容传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16位地址)内容传送到累加器 1 2 MOVX @Ri,A 累加器内容传送到外部RAM(8位地址) 1 2 MOVX @DPTR,A 累加器内容传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址内容压入堆栈 2 2 POP direct 堆栈内容弹出到直接地址 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1

MCS-51单片机指令周期表

MCS-51单片机指令周期表 mcs-51指令速查表 类别指令格式功能简述字节数周期MOV A,Rn寄存器送累加器11 MOV Rn,A累加器送寄存器11 MOV A,@Ri内部RAM单元送累加器11 MOV@Ri,A累加器送内部RAM单元11 MOV A,#data立即数送累加器21 MOV A,direct直接寻址单元送累加器21 MOV direct,A累加器送直接寻址单元21 MOV Rn,#data立即数送寄存器21 MOV direct,#data立即数送直接寻址单元32 MOV@Ri,#data立即数送内部RAM单元21 MOV direct,Rn寄存器送直接寻址单元22 数据传送类指令期 MOV Rn,direct直接寻址单元送寄存器22 MOV direct,@Ri内部RAM单元送直接寻址单元22 MOV@Ri,direct直接寻址单元送内部RAM单元22 MOV direct2,direct1直接寻址单元送直接寻址单元32 MOV DPTR,#data1616位立即数送数据指针32 MOVX A,@Ri外部RAM单元送累加器(8位地址)12 MOVX@Ri,A累加器送外部RAM单元(8位地址)12 MOVX A,@DPTR外部RAM单元送累加器(16位地址)12 MOVX@DPTR,A累加器送外部RAM单元(16位地址)12 MOVC A,@A+DPTR查表数据送累加器(DPTR为基址)12 MOVC A,@A+PC查表数据送累加器(PC为基址)12 XCH A,Rn累加器与寄存器交换11 算术运算类指令 XCH A,@Ri累加器与内部RAM单元交换11 XCHD A,direct累加器与直接寻址单元交换21 XCHD A,@Ri累加器与内部RAM单元低4位交换11 SWAP A累加器高4位与低4位交换11 POP direct栈顶弹出指令直接寻址单元22 PUSH direct直接寻址单元压入栈顶22 ADD A,Rn累加器加寄存器11 ADD A,@Ri累加器加内部RAM单元11 ADD A,direct累加器加直接寻址单元21 ADD A,#data累加器加立即数21 ADDC A,Rn累加器加寄存器和进位标志11 ADDC A,@Ri累加器加内部RAM单元和进位标志11

51单片机指令集

51单片机指令集.txt我这辈子只有两件事不会:这也不会,那也不会。人家有的是背景,而我有的是背影。肉的理想,白菜的命。肉的理想,白菜的命。白马啊你死去哪了!是不是你把王子弄丢了不敢来见我了。MCS-51单片机的指令集 1、数据传送类指令 助记符功能说明字节数振荡周期 MOV A,Rn 寄存器内容送入累加器 1 12 MOV A,direct 直接地址单元中的数据送入累加器 2 12 MOV A,@Ri 间接RAM中的数据送入累加器 1 12 MOV A,#data8 8位立即数送入累加器 2 12 MOV Rn,A 累加器内容送入寄存器 1 12 MOV Rn,direct 直接地址单元中的数据送入寄存器 2 24 MOV Rn,#data8 8位立即数送入寄存器 2 12 MOV direct,A 累加器内容送入直接地址单元 2 12 MOV direct,Rn 寄存器内容送入直接地址单元 2 24 MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24 MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24 MOV direct,#data8 8位立即数送入直接地址单元 3 24 MOV @Ri,A 累加器内容送入间接RAM单元 1 12 MOV @Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24 MOV @Ri,#data8 8位立即数送入间接RAM单元 2 12 MOV DPTR,#data16 16位立即数地址送入地址寄存器 3 24 MOV A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@Ri 外部RAM(8位地址)送入累加器 1 24 MOV A,@DPTR 外部RAM(16位地址)送入累加器 1 24 MOV @Ri,A 累加器送入外部RAM(8位地址) 1 24 MOV @DPTR,A 累加器送入外部RAM(16位地址) 1 24 PUSH direct 直接地址单元中的数据压入堆栈 2 24 POP DIRECT 堆栈中的数据弹出到直接地址单元 2 24 XCH A,Rn 寄存器与累加器交换 1 12 XCH A,direct 直接地址单元与累加器交换 2 12 XCH A,@Ri 间接RAM与累加器交换 1 12 XCHD A,@Ri 间接RAM与累加器进行低半字节交换 1 12 2、算术操作类指令 助记符功能说明字节数振荡周期 ADD A,Rn 寄存器内容加到累加器 1 12 ADD A,direct 直接地址单元加到累加器 2 12 ADD A,@Ri 间接RAM内容加到累加器 1 12 ADD A,#data8 8位立即数加到累加器 2 12 ADDC A,Rn 寄存器内容带进位加到累加器 1 12

51单片机111条指令

51单片机111条指令一览表 指令字节周期动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或(C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器 26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器 27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结

)1MCS51单片机的指令格式中操作码与操作数之间必须用.

第2章汇编语言----智能电子产品的指令系统 判断题 ()1.MCS—51单片机的指令格式中操作码与操作数之间必须用“,”分隔。 ()2.MCS—51指令:MOV A,#40H ;表示将立即数40H 传送至A 中。 ()3.MCS—51指令:MOV A,@R0 ;表示将R0指示的地址单元中的内容传送至A 中。()4.MCS—51 指令:MOVX A,@DPTR ;表示将DPTR 指示的地址单元中的内容传送至A 中。 ()5.MCS—51 的数据传送指令是把源操作数传送到目的操作数,指令执行后,源操作数改变,目的操作数修改为源操作数。 ()6.MCS—51指令中,MOVX 为片外RAM 传送指令。 ()7.MCS—51指令中,MOVC 为ROM 传送指令。 ()8.将37H 单元的内容传送至A的指令是:MOV A,#37H。 ()9.MCS—51指令中,16 位立即数传送指令是:MOV DPTR,#data16。 ()10.MCS—51 单片机,CPU 对片外RAM 的访问只能用寄存器间接寻址的方式,且仅有4 条指令。 ()11.如JC rel 发生跳转时,目标地址为当前指令地址加上偏移量。 ()12.对于8051 单片机,当CPU 对内部程序存储器寻址超过4K 时,系统会自动在外部程序存储器中寻址。 ()13.指令MUL AB 执行前(A)=F0H,(B)=05H,执行后(A)=FH5,(B)=00H。()14.已知:DPTR=11FFH 执行INC DPTR 后,结果:DPTR=1200H。 ()15.已知:A=11H B=04H,执行指令DIV AB后,其结果:A=04H,B=1 CY=OV=0。()16.已知:A=1FH,(30H)=83H,执行ANL A,30H 后,结果:A=03H (30H)=83H P=0。 ()17.无条件转移指令LJMP addr16 称长转移指令,允许转移的目标地址在128KB 空间范围内。 ()18.MCS—51 指令系统中,执行指令FGO bit F0 ,表示凡用到F0 位的指令中均可用FGO 来代替。 ()19.MCS—51指令系统中,执行指令ORG 2000H;BCD:DB “A,B,C,D”表示将A、B、C、D 的ASII 码值依次存入2000H 开始的连续单元中。

MCS-51系列单片机指令表

MCS-51系列单片机指令A表 MCS-51系列单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码: 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0), 取代PC的低11位,PC的高5位不变。 操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addr l0~0 字节数: 2 机器周期:2

使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令 指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加 操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令 指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)), i=0,1 字节数: 1 机器周期:1

5、ADD A,#data 指令名称:立即数加法指令 指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令 指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C), n=0~7 字节数: 1 机器周期:1 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令 指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1

单片机的查表程序

在单片机开发过程中.一些非线性的控制过程.最适合做一个表格来.时时改变系统的参数.达到控制的目的.最常的如产生正弦的的程.就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子.通过建一个数组来实现段码的点亮点灭.下面就是一个LED表---digits[0] #define SEG_a 0x01 #define SEG_b 0x02 #define SEG_c 0x04 #define SEG_d 0x08 #define SEG_e 0x10 #define SEG_f 0x20 #define SEG_g 0x40 #define SEG_dot 0x80 unsigned char digits[10] = { (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), // 0 (SEG_b|SEG_c), // 1 (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), // 2 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), // 3 (SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), // 4 (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), // 5 (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 6 (SEG_a|SEG_b|SEG_c), // 7 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 8 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g) // 9 }; C查表就太简单了temp2 = digits[ show_data[i] ];一句搞定,C中还有一个switch语句也是一个很好的用查表语句 C51汇编就相对麻烦一点.不过MCS-51指令系统中有专用的查表指令:MOVC A,@A+DPTR和MOV A,@A+PC. MOVC A,@A+DPTR指令,DPTR作为基址寄存器时,其值为16位而且可根据需要设计,故可用于在64KROM范围内查表。编写查表程序时,首先把表的首址送入DPTR中,再将要查找的数据序号(或下表值)送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。 MOVC A,@A+PC指令,PC作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下

第3章-MCS-51系列单片机的指令系统和汇编语言程序

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

51单片机汇编指令速查表

51 单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A,Rn 寄存器送累加器1 1 MOV Rn,A 累加器送寄存器1 1 MOV A ,@Ri 内部RAM 单元送累加器1 1 MOV @Ri ,A 累加器送内部RAM 单元1 1 MOV A ,#data 立即数送累加器2 1 MOV A ,direct 直接寻址单元送累加器2 1 MOV direct ,A 累加器送直接寻址单元2 1 MOV Rn,#data 立即数送寄存器2 1 MOV direct ,#data 立即数送直接寻址单元3 2 MOV @Ri ,#data 立即数送内部RAM 单元2 1 MOV direct ,Rn 寄存器送直接寻址单元2 2 MOV Rn ,direct 直接寻址单元送寄存器2 2 MOV direct ,@Ri 内部RAM 单元送直接寻址单元2 2 MOV @Ri ,direct 直接寻址单元送内部RAM 单元2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元3 2 MOV DPTR ,#data16 16 位立即数送数据指针3 2 MOVX A ,@Ri 外部RAM 单元送累加器(8 位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM 单元(8 位地址) 1 2 MOVX A ,@DPTR 外部RAM 单元送累加器(16 位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM 单元(16 位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR 为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC 为基址) 1 2 XCH A ,Rn 累加器与寄存器交换1 1 XCH A ,@Ri 累加器与内部RAM 单元交换1 1 XCHD A ,direct 累加器与直接寻址单元交换2 1 XCHD A ,@Ri 累加器与内部RAM 单元低4 位交换1 1 SW AP A 累加器高4 位与低4 位交换1 1 POP direct 栈顶弹出指令直接寻址单元2 2 PUSH direct 直接寻址单元压入栈顶2 2 二、算术运算类指令 ADD A,Rn 累加器加寄存器1 1 ADD A,@Ri 累加器加内部RAM 单元1 1 ADD A,direct 累加器加直接寻址单元2 1 ADD A,#data 累加器加立即数2 1 ADDC A,Rn 累加器加寄存器和进位标志1 1 ADDC A,@Ri 累加器加内部RAM 单元和进位标志1 1 ADDC A,#data 累加器加立即数和进位标志2 1

相关主题
文本预览
相关文档 最新文档