MCS-51汇编语言指令字节数
MCS-51指令系统

4、控制转移类指令(二)
无条件转移:(LJMP,AJMP,SJMP,JMP—4条) LJMP addr16 长跳转指令
——可在64K范围内跳转 AJMP addr11 绝对跳转指令
——可在指令所在的2K范围内跳转 SJMP rel 相对跳转指令
——可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令
1
累加器清零/取反操作 (CLR,CPL—2条)
CLR A —对累加器清零
1 Byte 1 Tm
CPL A ——对累加器按位取非 1 Byte 1 Tm 15
3、逻辑运算及移位类指令(三)
逻辑运算指令在程序中的应用(下面的例子认为Acc 的内容为9AH)
逻辑与ANL运算用于对某些位进行清0或者保留: 例: ANL A, #0FH; 则(A) = 0AH
位清零/置位指令(4条): CLR bit(或C) —— (bit或 C)“0” SETB bit(或C) —— (bit或 C)“1”
位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注: “/bit”表示对bit位先取反然后再参加运算
带借位减法(SUBB):(A) ← (A)- (Cy)- (第二操作数)
10
2、算术运算类指令(三)
加1/减1操作: (INC,DEC—9条) INC, DEC与用加/减法指令做加1/减1 操作不 同之处在于INC、DEC不影响标志位。
单字节乘/除运算: (MUL,DIV—2条) 两个单字节数的乘/除法运算只在A与B之间 进行。 MUL AB: (A)与(B)相乘, 积为16位数,
MCS51单片机指令系统

第一条指令为远查表指令,可以在64K的程序存储器空间寻 址。基地址寄存器为DPTR,其意思为,DPTR里面存放的是 程序存储器中数据表格的首地址,A为数据地址的偏移量。
这条指令执行以后,以 (A)+(DPTR)的数值为地址数 据就送进A里面来了,也就是从表格首地址开始以后的第(A) 个数据被送进A了。(举例子说明)
编写好的程序都放在程序存储器中,由于一个存储地址所 指示的存储单元只能存放一字节的数据。所以,在存放指令时, 必须将指令拆分成一个一个字节进行连续存放。
比如: 实现“累加器加10H”这条指令,其机器语言为 0111010000010000, 占用了两个字节,就必须拆成两个字节 进行连续存储。
但是,用二进制来表示比较麻烦,因此,也常用十六进制来 表示如:74H 10H来表示以上这条机器语言。可见,用十六进 制表示指令比较简单,但是,指令系统有上百条指令,不易记 住。所以,一般采用容易记住的一些缩写符号来表示机器语言,
2. 在指令中直接给出操作数的地址, 这种寻址方式就属
于直接寻址方式。在这种方式中, 指令的操作数部分直接 是操作数的地址。
比如:MOV A,30H;将30H里面的数送到A里面 MOV 21H,30H;将30H里面的数存放到21H里面 在MCS -51 单片机指令系统中, 直接寻址方式中可
以访问 3 种存储器空间: (1) 内部数据存储器的低 128 个字节单元(00H~
7. 位寻址 指按照位进行的寻址操作,(前面讲的都是按字节进
行的寻址操作)。该种寻址方式中, 操作数是内部RAM单元 中20H到2FH的128个位地址以及SFR中的11个可进行 位寻址的寄存器中的位地址寻址。
比如:MOV C,20H;就是将RAM中位寻址区中20H位地 址中的内容送给C。区别与MOV A,20H;这个是将内部 RAM中20H单元的内容送给A。
单片机常用指令

计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。
MCS-51单片机汇编语言指令格式:操作符目的操作数,源操作数指令中的常用符号Rn: n=(0~7),表示当前工作寄存器R0~R7中的一个Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器dir : 8 位直接字节地址(片内RAM 和SFR )#data: 8位立即数,即8位常数。
可以为2进制(B)、10进制、16进制(H)、字符(‘ ’)#data16: 表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFHaddr16 : 表示16位地址addr11 : 表示11位地址rel : 相对偏移量(为一字节补码)用于相对转移指令中bit :位地址,在位地址空间中。
$: 表示当前指令的地址。
寻址方式1、立即寻址指令中直接给出操作数的寻址方式。
在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。
立即寻址中的数,称为立即数。
例如指令:MOV A,#30H2、直接寻址操作数的地址直接出现在指令中。
寻址对象:①内部数据存贮器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。
3、寄存器寻址操作数存放在寄存器中。
寻址对象:A,B,DPTR,R0~R7 。
B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。
A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC例如:MOV A,R0 ;R0→A,A、R0均为寄存器寻址,机器码E8MUL AB ;A*B→BA,A、B为寄存器寻址,机器码A4MOV B,R0 ;R0→B,R0为寄存器寻址,B为直接寻址机器码88F0,其中F0为B的字节地址(见表1-2)PUSH ACC ;A的内容压入堆栈机器码C0E04、寄存器间址操作数存放在以寄存器内容为地址的单元中。
MCS-51单片机指令系统与汇编语言程序设计

docin/sundae_meng
P73 例2.58
ORG 0100H
MOV DPTR,#DATA LOOP2: MOV R1,A
MOV R0,#30H
INC R1
MOV R1,#40H LOOP: MOVX A,DPTR
START:
ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A
docin/sundae_meng
TABLE:
MOV A,20H ANL A,#0F0H
SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $ DB 30H,31H,32H,33H,34H
docin/sundae_meng
ORG 1000H
START: MOV A, 40H
; 将X送入A中
JZ COMP
; 若A为0,转至COMP处
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOV A, #0FFH ; 将1(补码)送入A中
docin/sundae_meng
2.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编 语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确 各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化
MCS-51指令及编码表

机器周期数 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2
指令助记符 NOP AJMP LJMP RR INC INC INC INC INC INC INC INC INC INC INC INC JBC ACALL LCALL RRC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC EDC EDC JB
机器周期数 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 4 2 1 1 1 1 1 1 1 1 1 1 2 2 2
指令助记符 XRL XRL XRL JNZ ACALL ORL JMP MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV SJMP AJMP ANL MOVC DIV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV ACALL MOV
操作数 A,@R1 A,R0 A,R1 A,R2 A,R3 A,R4 A,R5 A,R6 A,R7 bit,rel code addr11 direct,A direct,#data A,#data A,direct A,@R0 A,@R1 A,R0 A,R1 A,R2 A,R3 A,R4 A,R5 A,R6 A,R7 bit,rel code addr11 direct,A direct,#data A,#data A,direct A,@R0 A,@R1 A,R0 A,R1 A,R2 A,R3 A,R4
6
续表 机器码 [H] DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
8051指令

附录3:MCS—51系列单片机的指令介绍MCS—51汇编语言共有111条指令,其中49条是单字节指令,45条是双字节指令。
在111条指令中,单周期指令64条,双周期指令45条,占用4个周期的指令2条。
关于MCS—51汇编语言指令,有大量书籍详细介绍,在此,以表格形式列出,注释简短而精练,便于读者查阅。
一些特殊符号的意义:在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。
●Rd:当前选中的寄存器区的8个工作寄存器R0~R7(d=0~7)。
●Ri:当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)。
●@:间接寄存器寻址或基址寄存器的前缀。
●M:内部数据存储单元的8位地址。
包含0~127(255)内部存储单元地址和特殊功能寄存地址。
●#n:指令中的8位常数。
●#n(16):指令中的16位常数。
●a(16):用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。
●a(11):用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。
●r:8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128~+127范围内。
●b:内部RAM和特殊功能寄存器的直接寻址位。
1.数据传送指令数据传送指令共28条,可分为8位传送指令、16位传送指令和字节交换指令3类。
数据传送指令要点见表3。
表3 数据传送指令2.算术运算指令算术运算指令共24条,有加、减、乘、除、十进制调整5种操作,由7种操作助记符来描述,算术运算指令要点见表4。
表4 算术运算指令3.逻辑运算指令逻辑运算指令共25条,有逻辑与、或、异或、清零、取反、环移和半字节交换7种操作,由10种操作码助记符来描述。
逻辑运算指令要点见表5。
表5 逻辑运算指令4.位操作指令位操作指令共12条,有位传送、位变量更改、位变量逻辑与和位变量逻辑或4种操作,由6种操作码助记符来描述。
MCS-51单片机指令系统

MOV DPTR,#2000H
6、栈操作指令
PUSH direct; (SP)<-SP+1, ((SP))<(direct)
进栈指令的功能是先将SP的指针加1,然 后把直接地址指出的内容传送到栈指针SP寻 址的内部RAM单元中。
POP direct; (direct)<-((SP)), (SP)<-SP-1
@DPTR, A; ((DPTR))<-(A)
A, @R1
@DPTR,A
8、查表指令
MOVC A,@A+DPTR; (A)<-((A))+((DPTR)) MOVC A,@A+PC ; (A)<-((A))+((PC))
9、字节交换指令
XCH A, Rn; XCH A,direct; XCH A,@Ri;
XRL A, direct ; A与direct中的值 ;按位'异或',结果送入A中
XRL A, @Ri; A与间址寻址单元@Ri中 ;的值按位'异或',结果送入A中
4、逻辑异或指令
XRL A, #data ;A与立即数data按位 ;‘异或’,结果送入A中
XRL direct, A ; direct中值与A中的值 ;按位‘异或’, ;结果送入direct中
(A)<->(Rn) (A)<->(direct) (A)<->((Ri))
10、半字节交换指令
XCHD A,@Ri; (A)0-3<->((Ri))0-3
2、算术指令
1、不带进位位的加法
ADD
A, #data;
(A)<-(A)+#data
MCS-51单片机的汇编语言

绝对地址段选择伪指令
CSEG
[AT
address]
DSEG
[AT
address]
ISEG
[AT
address]
BSEG
[AT
address]
XSEG
[AT
address]
分别为程序存储器、内部数据存储器、间接寻址的内部数据存 储器、位寻址区和外部数据存储器的使用指定绝对地址
1.5 通用的转移和调用语句
MCS-51汇编器允许程序员使用通用的转移和调用助记符JMP 与CALL
用来代替SJMP、AJMP、LJMP和ACALL、LCALL
汇编产生的未必是最优化的结果
1.6 条件汇编
将一个软件的多个版本保存在同一组源程序文件中 使用IF、ELSEIF、ELSE、ENDIF IF或ELSEIF后的表达式通常为关系表达式 当IF或ELSEIF后的数值表达式的值非零时,汇编其后的语句组;
1.4 伪指令语句
ORG伪指令
ORG
பைடு நூலகம்
expression
设置汇编计数器的值,指定其后语句的起始地址
伪指令语句
END伪指令
应当是源程序的最后一条语句 通知汇编程序汇编过程应在此结束 汇编器不理会END后面的文件内容
每个程序文件都应以END结束
伪指令语句
EQU和SET伪指令
symbol
单片机原理与应用
MCS-51单片机的汇编语言
INTS SET
IF ELSE ENDIF
INTS = 1 MAIN_START
MAIN_START
NUM1 DATA NUM2 DATA
DSEG AT
STACK: DS
20H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCS-51单片机的指令字节数
汇编语言的语句的格式为:
标号段:操作码段第一操作数,第二操作数;注释段(如 START: MOV A,#00H ;把0赋给A)
其中操作码段是必段的,其他的段是根据不同的指令而不同,操作数段可以只有一个操作数,也可以有两个操作数,有时还会有三个操作数的情况。
在51单片机中,有单字节指令、双字节指令和三字节指令。
只要理解了指令占用的这些字节都是用来存放哪些量的,那自然就会判断不同的指令是多少字节指令了。
1、操作码段占用一个字节。
2、8位立即数占用一个字节,16位立即数占用两个字节。
3、8位操作数地址占用一个字节,16位操作数地址占用两个字节。
4、CPU内部的各种寄存器不占用指令字节,如A, B, R0, R1, DPTR等。
现在就可以判断51的指令占用的字节数了:
MOV A, R0 ;这是单字节指令,其中MOV占用一个字节,A和R0是CPU内部寄存器,不占用指令字节。
MOV A, #07H ;这是双字节指令,其中MOV占用一个字节,8位立即数#07H占用一个字节。
MOV DPTR, #0106H ;这是三字节指令, MOV占用一个字节,16位立即数#0106H
占用两个字节。
MOV 07H, #07H ;这是三字节指令,MOV占用一个字节,8位地址07H占用一个字节,8位立即数#07H占用一个字节。