指令:是CPU按照人的意图来完成某种操作的命令,它以英文名称或缩写形式作为助记符。掌握MCS-51汇编语言指令是51单片机汇编设计程序的基础。
按所占字节分,MCS-51指令分三种:(1)单字节指令49条:(2)双字节指令45条;(3)三字节指令17条。
按执行时间分,MCS-51指令分三种:(1)1个机器周期指令64条 ;(2)2个机器周期指令45条;(3)4个机器周期指令2条(乘除指令)。其中,1个机器周期=12个时钟振荡周期
【 标号:】 操作码 【操作数】 【;注释】
1、指令主要由两部分组成:操作码和操作数。
操作码:代表指令进行什么操作
操作数:代表指令操作对象(可能是一具体数据,也可能是指出到哪里取得数据,即地址或符号)
2、MCS-51指令格式一般有如下规定。
(1)单字节指令:操作码和操作数同在一个字节中。
(2)双字节指令:1字节为操作码,另一字节为操作数。
(3)三字节指令:操作码占一个1个字节,操作数占2个字节。
3、MCS--51指令举例
(1)单字节指令:MOV A, R2 (机器码: 11101010)
(2)双字节指令: MOV A, #0BH (机器码:74H 0BH)(操作码 + 立即数)
(3) 三字节指令: MOV 0BH,#0BH(机器码:75H 0BH 0BH) (操作码 + 直接地址 + 立即数, 操作码 75H
表明要执行的操作,第一个 0BH
是目标地址,第二个 0BH
是要传送的数据。)
1、寄存器寻址
指令中的操作数为某一寄存器的内容。
例:MOV A, Rn ; 把Rn(n=0~7)中的源操作数送入到累加器A中
本寻址方式的寻址范围:(1)4组通用工作寄存器区共32个工作寄存器。只对当前工作寄存器区的8个工作寄存器寻址,指令中的寄存器名称只能是R0~R7.
(2)部分特殊功能寄存器,如累加器A、寄存器B以及数据指针寄存器DPTR等。
2、直接寻址
指令中直接给出操作数的单元地址(MCS-51单片机内部存储器分为若干个存储单元,每个存储单元对应一个地址,存储一个字节的信息),该单元地址中的内容就是操作数。
例:MOV 48H,66H ; 把片内RAM中66H单元的内容送到48H单元中
注:直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式。
3、寄存器间接寻址
寄存器中存操作数地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数。
指令标识:在寄存器名称前面加前缀标志“@”。
例:MOV A,@Ri;MCS-51规定RO、R1为间接寻址寄存器,即i=0或1;若Ri内容为40H,即把内部RAM 40H地址单元中的内容传送给A
4.立即数寻址(立即寻址、常数寻址)
直接在指令中给出操作数。
指令标识:在操作数前加前缀标志“#”
例:MOV A,#40H
5.基址寄存器加变址寄存器间接寻址(变址寻址)
以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,两者内容相加形成的16
位地址作为目的地址进行寻址。
例:MOVC A, @A+DPTR
;若(A)=05H,(DPTR)=0400H,指令是把程序存储器0405H单元的内容传送给A
本寻址方式的指令有3条:
MOVC A, @A+DPTR
MOVC A, @A+PC
JMP @A+DPTR (间接跳转指令,把累加器 A
中的 8 位无符号数与数据指针 DPTR
中的 16 位地址相加,得出的和作为新的 16 位地址。之后,程序计数器 PC
的值会被更新为这个新地址,从而使程序跳转到该地址处继续执行。)
6.相对寻址
用于程序转移。以该转移指令的地址(PC)加上它的字节数,再加上相对偏移量(rel,带
符号8位二进制补码数,-128~+127),形成新的转移目的地址,使程序转移到该目的地址。
目的地址=转移指令的地址+转移指令字节数+rel
例:LJMP rel;目的地址=该指令的PC值+3+rel,程序要转移到该处。编写程序时,只
需在转移指令中直接写要转向的地址标号。
例:LJMP LOOP; “LOOP”为目的地址标号。汇编时,由汇编程序自动计算和填入偏移
量;手工汇编时,手工计算偏移量的值。
7.位寻址
对具有位寻址功能的某位内容进行置“1”、清“0”操作。位地址一般直接给出。
例:MOV C,40H;把位地址为40H的值送到进位C