第三章:MCS-51单片机汇编程序设计 教学目的和要求 本章主要介绍MCS-51单片机的寻址方式、指令系统和汇编语言 程序设计。要求掌握MCS-51的7种寻址方式,掌握5类指令,了解 伪指令,进一步理解单片机的内部结构,为进一步学习C51程序设计 打好基础。 重点:寻址方式、指令系统、伪指令 难点:指令系统 学时:3 指令:能完成特定功能的命令。 指令系统:CPU所能执行的各种指令的集合。 汇编语言程序设计:利用汇编语言设计程序。 3.1、MCS-51指令系统的概述 一、指令格式 指令格式:即指令的结构形式一操作码操十操作数或操作数地 址 例:MOVA,0FFH 由操作码和操作数(或操作数地址)构成指令的结构 二、指令的三种表示形式: 1、二进制的表示形式: 例:00100100B是加法ADD的二进制形式 特点:能被CPU直接识别、运行的形式。也称机器码、汇编语 言的目标代码
缺点:不便于阅读、记忆和调试修改。 2、十六进制表示方式—它是对二进制形式的一种简化。 ADD00100100B 24H 二进制表示的形式十六进制表示的形式 在实验室等少数环境下,可以将这种形式作为输入程序的一种辅 助手段。但是,这种形式的指令格式必须由对应的监控程序把它们翻 译成二进制的“机器码”后存入程序存储器并运行。 指令的“助记符”方式(也称“汇编格式”): 00100100B24HADD (1)是一种由英文单词或字母、数字来表征指令功能的形 式。是一种便于阅读、书写和交流的表示形式。 (2)这种“汇编”格式的指令必须把它“翻译”为二进制形式 “机器码”后才能为CPU所识别和执行。 (3)三种不同的表示方法适用于不同的场合。 三、指令的字节数 在MCS-51单片机的指令系统中,因指令操作码和操作数的不 同,指令(在存储器中)长度也各不相同。分为单字节、双字节和三 字节。(共计111条) 单字节指令(49条):指令的操作码和操作数在存储器中总共 占一字节(bit)。 双字节指令(46条):指令的操作码和操作数在存储器中各占 个字节。 三字节指令(16条):指令中的操作数为双字节
说明:指令的字节数与指令周期不是对等的关系 MUL AB1(字节) 4(周期) 乘法指令 MOVA,0FFH2(字节)1(周期)立即数FFH送A 四、指令的书写格式(P31) 标号:操作码操作数或操作数地址1,操作数或操作数地址2: 注释 例:LOOP:MOVA,#40H;取参数 1、标号:是根据编程需要给指令设定的符号地址,可有可无: 标号由18个字符组成,第一个字符必须是英文字,不能是数字或其 它符号:标号后必须用冒号 2操作码:指明指令功能。 例:MOV move传送 XCH exchange交换 ANL_and logic与逻辑运算 XRL_exclusive or异或运算 MUL Multiply乘法 RR rotate right右循环 SJMPshort jump短跳转 RETreturn子程序返回 3、操作数或操作数地址表示参加运算的数据或数据的有效地址。 操作数一般有以下几种形式: (1)没有操作数项,操作数隐含在操作码中,如RET指令: (2)只有一个操作数,如CPLA指令: (3)有两个操作数,如MOVA,#00H指令,操作数之间以逗 号相隔:有三个操作数,如CJNE A,#OOH,NEXT指令,操作数之间 也以逗号相隔,操作码与操作数之间用空格。 4、注释是对指令的解释说明,用以提高程序的可读性:注释前
必须加分号(:)。 5、换行表示一条指令结束 说明: 1、MCS一51单片机是8位机,可识别2=256种操作代码,实际 中有255种操作码O0H至FFH,A5H无对应操作)。 2、256种操作有111条指令,用汇编语言表达操作代码时,只要 熟记42种助记符。同一种指令所对应的操作码可以多至八种(如指 令中Rn对应寄存器R0-R7)。 3、MCS-51的指令系统按指令功能分为五大类: ①数据传送类②算术运算类③逻辑运算类④控制转移类⑤ 位操作类 3.2、指令寻址方式 操作数指出了参与操作的数据或数据的地址。CPU寻找操作数 或操作数地址的方法称为寻址方式。而操作数类型有: 位(b)一位寻址区中的一位二进制数据 字节(B)一8位二进制数据 字(W)一16位双字节数据 MCS-51指令系统共使用了7种寻址方式,包括立即数寻址、寄 存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址和位寻 址等。 一、直接寻址 指令直接给出了操作数的地址,即:指令本身含有操作数的(8 位或16位)地址。可以直接寻址的存储器有内部RAM区和特殊功
能寄存器SFR。 例:MOVA,30H;将RAM30H单元内容送累加器 这里30H是操作数在RAM中的地址,如下图。 累加器 30H操作数x 说明: 1、很明显,直接寻址的指令长度是两个或三个字节,(操作数占 1或2字节)。 2、当访问内部RAM低128单元时,直接给出单元地址。 3、当访问SFR时可以直接给出地址,也可以给出寄存器符号, (直接寻址是访问SFR的唯一方法)例:MOVA,8OH可 以写成MOVA,P0 后者用SFR中寄存器的名字取代它的物理地址8OH。我们提倡 使用SFR中寄存器名称来代替直接地址 如:MOVA,SBUF:串口数据缓冲器数据送A 二、立即寻址方式 指令中直接给出(8位或16位)操作数(叫立即数)。一般用于 为寄存器或存储器赋常数初值。 MOVA,#30H;将(8位)立即数30H送累加器A MOV DPTR,#200OH:16位立即数2000H送DPTR寄存器