第4章MCS51汇编语言程序设计 汇编语言是面向机器硬件的语言,要求程序设计者对 McS-51单片机具有很好的“软、硬结合”的功底。 介绍程序设计的基本知识及如何使用汇编语言来进行 基本的程序设计。 4.1汇编语言程序设计概述 4.1.1机澋语言、汇编语言和高级语言 用于程序设计的语言基本上分为3种:机器语言、汇编 语言和高级语言。 1.机器语言 二进制代码表示的指令、数字和符号简称为机器语言 不易懂,难记忆,易出错
第4章 MCS-51汇编语言程序设计 汇编语言是面向机器硬件的语言,要求程序设计者对 MCS-51单片机具有很好的“软、硬结合”的功底。 介绍程序设计的基本知识及如何使用汇编语言来进行 基本的程序设计。 4.1 汇编语言程序设计概述 4.1.1 机器语言、汇编语言和高级语言 用于程序设计的语言基本上分为3种:机器语言、汇编 语言和高级语言。 1.机器语言 二进制代码表示的指令、数字和符号简称为机器语言 不易懂,难记忆,易出错
2.汇编语言 英文助记符表示的指令称为符号语言或汇编语言 将汇编语言程序转换成为二进制代码表示的机器语言 程序称为汇编程序 经汇编程序“汇编(翻译)”得到的机器语言程序称 为目标程序,原来的汇编语言程序称为源程序。 汇编语言特点: (1)面向机器的语言,程序设计员须对McS-51的硬件 有相当深入的了解。 (2)助记符指令和机器指令一一对应,用汇编语言编 写的程序效率高,占用存储空间小,运行速度快, 用汇编语言能编写出最优化的程序
2.汇编语言 英文助记符表示的指令称为符号语言或汇编语言 将汇编语言程序转换成为二进制代码表示的机器语言 程序称为汇编程序 经汇编程序“汇编(翻译)”得到的机器语言程序称 为目标程序,原来的汇编语言程序称为源程序。 汇编语言特点: (1) 面向机器的语言,程序设计员须对MCS-51的硬件 有相当深入的了解。 (2) 助记符指令和机器指令一一对应,用汇编语言编 写的程序效率高,占用存储空间小,运行速度快, 用汇编语言能编写出最优化的程序
能直接管理和控制硬件设备(功能部件),它能处理 中断,也能直接访问存储器及1/0接口电路。 汇编语言和机器语言都脱离不开具体机器的硬件,均 是面向“机器”的语言,缺乏通用性 3.高级语言 不受具体机器的限制,使用了许多数学公式和数学计算 上的习惯用语,非常擅长于科学计算。常用的如 BAS|G、 FORTRAN以及C语言等。 高级语言优点:通用性强,直观、易懂、易学,可读 性好。 使用C语言(51)、PL/M语言来进行McS-51的应用程 序设计。 对于程序的空间和时间要求很高的场合,汇编语言仍 是必不可缺的
能直接管理和控制硬件设备(功能部件),它能处理 中断,也能直接访问存储器及I/O接口电路。 汇编语言和机器语言都脱离不开具体机器的硬件,均 是面向“机器”的语言,缺乏通用性。 3.高级语言 不受具体机器的限制,使用了许多数学公式和数学计算 上的习惯用语,非常擅长于科学计算。常用的如 BASIC、FORTRAN以及C语言等。 高级语言优点:通用性强,直观、易懂、易学,可读 性好。 使用C语言(C51)、PL/M语言来进行MCS-51的应用程 序设计。 对于程序的空间和时间要求很高的场合,汇编语言仍 是必不可缺的
C语言和汇编语言混合编程 在很多需要直接控制硬件的应用场合,则更是非用汇 编语言不可 使用汇编语言编程,是单片机程序设计的基本功之 4.1.2汇编语言语句的种类和格式 两种基本类型:指令语句和伪指令语句 (1)指令语句 已在第3章介绍 每一条指令语句在汇编时都产生一个指令代码机 器代码 (2)伪指令语句 是为汇编服务的。在汇编时没有机器代码与之对应
C语言和汇编语言混合编程 在很多需要直接控制硬件的应用场合,则更是非用汇 编语言不可 使用汇编语言编程,是单片机程序设计的基本功之一 4.1.2 汇编语言语句的种类和格式 两种基本类型:指令语句和伪指令语句 (1)指令语句 已在第3章介绍 每一条指令语句在汇编时都产生一个指令代码——机 器代码 (2)伪指令语句 是为汇编服务的。在汇编时没有机器代码与之对应
McS-51的汇编语言的四分段格式如下 标号字段操作码字段操作数字段注释字段 规则: (1)标号字段和操作字码段之间要有冒号“:”相隔 (2〕操作码字段和操作数字段间的分界符是空格; (3)双操作数之间用逗号相隔; (4)操作数字段和注释字段之间的分界符用分号“;” 相隔。 操作码字段为必选项,其余各段为任选项。 例4-1下面是一段汇编语言程序的四分段书写格式
MCS-51的汇编语言的四分段格式如下: 标号字段 操作码字段 操作数字段 注释字段 规则: (1)标号字段和操作字码段之间要有冒号“ : ”相隔; (2)操作码字段和操作数字段间的分界符是空格; (3)双操作数之间用逗号相隔; (4)操作数字段和注释字段之间的分界符用分号“ ; ” 相隔。 操作码字段为必选项,其余各段为任选项。 例4-1 下面是一段汇编语言程序的四分段书写格式
标号字段操作码字段揉作数字段注释字段 START: MOV A,#00H:0-A MOⅤR1,#10;10-R1 MOvR2,#00000011B;3-R2 LOOP: ADD A, R2 (A)+(R2)A DNZ R1,LOOP;R1内容减1不 为零,则循环 NOP HERE: SJMP HERE 基本语法规则: 1.标号字段 是语句所在地址的标志符号
标号字段 操作码字段 操作数字段 注释字段 START: MOV A,#00H ;0→A MOV R1,#10 ;10→R1 MOV R2,#00000011B ;3→R2 LOOP:ADD A,R2 ;(A)+(R2)→A DJNZ R1,LOOP;R1内容减1不 为零,则循环 NOP HERE: SJMP HERE 基本语法规则: 1.标号字段 是语句所在地址的标志符号
(1)标号后边必须跟以冒号“:” (2)由18个ASC|字符组成 (3)同一标号在一个程序中只能定义一次 (4)不能使用汇编语言已经定义的符号作为标号 2.操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就 是根据这一字段来生成机器代码的。 3.操作数字段 通常有单操作数、双操作数和无操作数三种情况。如 果是双操作数,则操作数之间,要以逗号隔开。 (1)十六进制、二进制和十进制形式的操作数表示
(1)标号后边必须跟以冒号“ : ” (2)由1~8个ASCII字符组成 (3)同一标号在一个程序中只能定义一次 (4)不能使用汇编语言已经定义的符号作为标号 2.操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就 是根据这一字段来生成机器代码的。 3.操作数字段 通常有单操作数、双操作数和无操作数三种情况。如 果是双操作数,则操作数之间,要以逗号隔开。 (1)十六进制、二进制和十进制形式的操作数表示
采用十六进制形式来表示,某些特殊场合才采用二 进制或十进制的表示形式。 十六进制,后缀“H”。 二进制,后缀“B” 十进制,后缀“D”,也可省略。 若十六进制的操作数以字符A~F中的某个开头时,则 需在它前面加一个“0”,以便在汇编时把它和字 符AF区别开来。 (2)工作寄存器和特殊功能寄存器的表示 采用工作寄存器和特殊功能寄存器的代号来表示,也 可用其地址来表示。 例如,累加器可用A(或Acc)表示。也可用0E0H来表 示,0EOH为累加器A的地址
采用十六进制形式来表示 ,某些特殊场合才采用二 进制或十进制的表示形式 。 十六进制,后缀“H” 。 二进制,后缀“B” 。 十进制,后缀“D” ,也可省略。 若十六进制的操作数以字符A~F中的某个开头时,则 需在它前面加一个 “0”,以便在汇编时把它和字 符A~F区别开来。 (2)工作寄存器和特殊功能寄存器的表示 采用工作寄存器和特殊功能寄存器的代号来表示,也 可用其地址来表示。 例如,累加器可用A(或Acc)表示。也可用0E0H来表 示,0E0H为累加器A的地址
(3)美元符号$的使用 用于表示该转移指令操作码所在的地址。例如,如下 指令: JNB FO. S 与如下指令是等价的: HERE: JNB FO. HERE 再如: HERE: SJMP HERE 可写为: SJMP S 4.注释字段
(3)美元符号$的使用 用于表示该转移指令操作码所在的地址。例如,如下 指令: JNB F0, $ 与如下指令是等价的: HERE:JNB F0,HERE 再如: HERE:SJMP HERE 可写为: SJMP $ 4.注释字段
必须以分号“;”开头,换行书写,但必须注意也要 以分号“;”开头。 汇编时,注释字段不会产生机器代码 4.1.3伪指令 在MCS-51汇编语言源程序中应有向汇编程序发出的指 示信息,告诉它如何完成汇编工作,这是通过使用 伪指令来实现的。 也称为汇编程序控制命令。只有在汇编前的源程序中 才有伪指令。经过汇编得到目标程序(机器代码) 后,伪指令已无存在的必要,所以“伪”体现在汇 编时,伪指令没有相应的机器代码产生 常用的伪指令: 1.0RG(0 RiGin)汇编起始地址命令
必须以分号“ ; ”开头,换行书写,但必须注意也要 以分号“ ; ”开头。 汇编时,注释字段不会产生机器代码。 4.1.3 伪指令 在MCS-51 汇编语言源程序中应有向汇编程序发出的指 示信息,告诉它如何完成汇编工作,这是通过使用 伪指令来实现的。 也称为汇编程序控制命令。只有在汇编前的源程序中 才有伪指令。经过汇编得到目标程序(机器代码) 后,伪指令已无存在的必要,所以“伪”体现在汇 编时,伪指令没有相应的机器代码产生。 常用的伪指令: 1.ORG(ORiGin)汇编起始地址命令