第四章指令系統及汇编语言程序设计 本章学习目标 ◇了解助记符、指令格式 ◇掌握单片机寻址方式 ◇掌握单片机指令系统 ◇掌握单片机汇编语言程序设计及开发环境 ◇参考资料:keiμ Visionz件的帮助文件
7:59:36 第四章 指令系统及汇编语言程序设计 本章学习目标 了解助记符、指令格式 掌握单片机寻址方式 掌握单片机指令系统 掌握单片机汇编语言程序设计及开发环境 参考资料: keil μVision软件的帮助文件 3 04:34:02
第四拿指令系统及汇编语言程序设计语合( 4.1编程语言 42指令格式及其分类 43寻址方式 44数据传送类指令 45逻辑操作类指令 46算术运算类指令 47位操作指令 48控制类转移指令 49汇编语言程序设计 410汇编语言程序调试 411利用SP工具将程序下载到单片机中验证程序
7:59:36 第四章 指令系统及汇编语言程序设计语言 4.1 编程语言 4.2 指令格式及其分类 4.3 寻址方式 4.4 数据传送类指令 4.5 逻辑操作类指令 4.6 算术运算类指令 4.7 位操作指令 4.8 控制类转移指令 4.9 汇编语言程序设计 4.10 汇编语言程序调试 4.11利用ISP工具将程序下载到单片机中验证程序 4 04:34:02
§49汇编语言程序设计 49.1伪指令( Pseudo- Instruction) ◇用户将编辑好的汇编语言源程序通过专门的软件(称为 汇编程序)汇编成相应的机器语言程序时,需要有一些 专门的说明性语句。 ◇例如,指定目标程序或数据存放的起始地址、给一些指 定的标号赋值、在内存中予留工作单元、表示源程序结 束等指令。 ◇指令并不产生对应CPU操作的机器码,故称伪指令,也叫 指示性语句 Directives);相对应的,可产生实质性操作的 指令叫指令性语句( (Instructions,指令性语句表示CPU 要进行的某种操作。 ◇例,MOVA,#30H,表示将立即数30送到寄存器A中
7:59:36 §4.9 汇编语言程序设计 4.9.1 伪指令(Pseudo- Instruction) 用户将编辑好的汇编语言源程序通过专门的软件(称为 汇编程序)汇编成相应的机器语言程序时,需要有一些 专门的说明性语句。 例如,指定目标程序或数据存放的起始地址、给一些指 定的标号赋值、在内存中予留工作单元、表示源程序结 束等指令。 指令并不产生对应CPU操作的机器码, 故称伪指令, 也叫 指示性语句(Directives); 相对应的,可产生实质性操作的 指令叫指令性语句(Instructions), 指令性语句表示CPU 要进行的某种操作。 例, MOV A, #30H, 表示将立即数30H送到寄存器A中。 5 04:34:02
49.1伪指令 1、起始地址设置伪指令ORG(ORIGⅠN) 格式为: ORG XXXXH ORG是起始地址设置伪指令的操作码,xxx是四位 十六进制地址。该指令表明其后紧跟的指令性语句 的机器码放在以xXx为起始地址的单元中。 例: ORG 0100H DELAY: MOV RO.#30H
7:59:36 4.9.1 伪指令 1、起始地址设置伪指令ORG(ORIGIN) 格式为: ORG xxxxH ORG是起始地址设置伪指令的操作码,xxxx是四位 十六进制地址。该指令表明其后紧跟的指令性语句 的机器码放在以xxxxH为起始地址的单元中。 例: ORG 0100H DELAY: MOV R0,#30H 6 04:34:02
起始地址设置伪指令ORG 一般,在整个程序的起始处放置一条“ORG0000H”伪 指令,表明下面开始的指令性语句从000H开始存放 后面有一定独立性的程序段也可以用这条指令指定程 序段存放的起始地址。 例如: 0000H0000010 ORG OOOOH 0001 H addr15-8 START: LUMP MAIN 0002H|addr7~0 - MOV A#oOH 0003H外部中断0中服入口地址 ORG 0100H DELAY: MOV RO.#30H 0100H01111000 0101H00110000
7:59:36 1、起始地址设置伪指令ORG ➢一般,在整个程序的起始处放置一条“ORG 0000H”伪 指令,表明下面开始的指令性语句从0000H开始存放。 后面有一定独立性的程序段也可以用这条指令指定程 序段存放的起始地址。 例如: ORG 0000H START: LJMP MAIN MOV A,#00H …… ORG 0100H DELAY: MOV R0,#30H …… 7 04:34:02 0000H 0000 0010 0001H addr15~8 0002H addr7~0 0100H 0111 1000 0101H 0011 0000 …… …… 0003H外部中断0中服入口地址
49.1伪指令 2、数据定义伪指令 ◇功能:定义一个数据存储区,其类型由数据定义伪指 令指定,可以给存储区赋初值,也可以仅仅给变量分 配存储单元,而不赋予特定的值 般格式 标号:数据定义伪指令操作数[操作数…注释 方括号中的内容为可选项。伪指令后面的操作数可以 不止一个。如有多个操作数,互相之间用逗号隔开 例如:SEG:DB23H;定义一个字节 标号SEG可以如下方式引用:标号SEG不能以变量 MOV RO. #SEG 方式被引用: MOV A,@RO MOV A. SEG
7:59:36 4.9.1 伪指令 2、数据定义伪指令 功能:定义一个数据存储区,其类型由数据定义伪指 令指定,可以给存储区赋初值,也可以仅仅给变量分 配存储单元,而不赋予特定的值。 一般格式: [标号:] 数据定义伪指令 操作数 [,操作数…] [;注释] 方括号中的内容为可选项。伪指令后面的操作数可以 不止一个。如有多个操作数,互相之间用逗号隔开。 9 04:34:02 例如: SEG: DB 23H ;定义一个字节 标号SEG 可以如下方式引用: MOV R0, #SEG MOV A, @R0 标号SEG 不能以变量 方式被引用: MOV A, SEG
2、数据定义伪指令 ◇常用的数据定义伪指令有DB和DW: (1)定义字节DB( Define byte) 标号:]DB〈项或项表 其中项或项表:指一个字节、数或数字串,或以引号 括起来的ASCI码字符串(一个字符用ASCI码表示, 相当于一个字节) MSG: DB Press A Key To continue, 0 TAB:DB2.3,5,7,11,13,17,19,";
7:59:36 2、数据定义伪指令 常用的数据定义伪指令有DB和DW: (1)定义字节DB(Define Byte) [标号:] DB 〈项或项表〉 其中项或项表:指一个字节、数或数字串,或以引号 括起来的ASCII码字符串(一个字符用ASCII码表示, 相当于一个字节)。 MSG: DB 'Press A Key To Continue', 0 TAB: DB 2, 3, 5, 7, 11, 13, 17, 19, ';' 11 04:34:02
2、数据定义伪指令 (2)定义字DW( Define word) ◇DW伪指令格式:[标号]DW ◇功能:用于定义字变量。项或项表指所定义的一个字 「两个字节)或用逗号分开的字串。可用来定义地址。 ◇每个字变量占2字节存储单元两个字节存储单元相邻 低高)位字节在低地址中,高低位字节在高地址中。 ◇多个操作数时按排列顺序从 TABLE: 0100H O1H 0101H00H 低地址开始存放。 0102H O1H 0103H[A田 TABLE: DW TABLE TABLE+10. HERE 0104H OIH HERE: DW 0 0105H|06H DW S HERE:0106H[00 0107H[00H 0108H|0IH
7:59:36 2、数据定义伪指令 (2)定义字DW(Define Word) DW伪指令格式:[标号:] DW 功能: 用于定义字变量。项或项表指所定义的一个字 (两个字节)或用逗号分开的字串。可用来定义地址。 每个字变量占2字节存储单元,两个字节存储单元相邻, 低(高)位字节在低地址中, 高(低)位字节在高地址中。 12 04:34:02 TABLE: DW TABLE, TABLE+10, HERE HERE: DW 0 DW $ 0100H 01H 0101H 00H 0102H 01H 0103H 1AH 0104H 01H 0105H 06H 0106H 00H 0107H 00H 0108H 01H 0109H 08H 多个操作数时,按排列顺序从 低地址开始存放。 TABLE: HERE:
2、数据定义伪指令(DS在“§5.3单片机C语言程序调试用到) (3)预留存储空间DS(补充) ◇格式:[标号]DS表达式 ◇功能:从标号地址开始保留若千个字节的内存空间以 备存放数据。保留字节单元数由表达式值决定 ◇例如 仅DS伪指令需在数据段中定义 DSEG AT0x30;数据段起始地址30H VARIBLE:DS5H;该指令不能出现在代码段 ◇汇编后从30H开始,预留5个字节的内存单元 数据段中的标号SEG可以变量方式被引用: MOV VARIBLE. A MOV RI VARIBLE ◇ CSEG AT0080h;代码段可用此指令定义起始地址, 或省略则默认为都是代码段。(仅作了解)
7:59:36 2、数据定义伪指令 (3)预留存储空间 DS (补充) 格式:[标号:] DS 表达式 功能:从标号地址开始, 保留若干个字节的内存空间以 备存放数据。保留字节单元数由表达式值决定。 例如: DSEG AT 0x30 ; 数据段起始地址30H VARIBLE: DS 5H ;该指令不能出现在代码段 汇编后从30H开始,预留5个字节的内存单元。 13 04:34:02 (DS在“§5.3 单片机C语言程序调试”用到) 数据段中的标号SEG 可以变量方式被引用: MOV VARIBLE, A; MOV R1, VARIBLE; CSEG AT 0080h; 代码段可用此指令定义起始地址, 或省略则默认为都是代码段。(仅作了解) 仅DS伪指令需在数据段中定义
2、数据定义伪指令 例如: ORG 1000H SEG: DB 23H ;定义一个字节 DW 1000H ;定义一个字 DB MCS-51 ;定义一个字符串 END 则:(1000H)=23H SEG的地址为1000H (1001H)=9H10H (1002H)=4H00H (1003H)=4DH M的ASCI码 (1004H)=43H C的ASCI码 (1005H)=53H S的ASCI码 (1006H)=2DH -3的ASCI码 (1007H)=35H 数字5的ASCI码 (1008H)=31I 数字1的ASCI码
7:59:36 2、数据定义伪指令 例如: ORG 1000H SEG: DB 23H ;定义一个字节 DW 1000H ;定义一个字 DB ‘MCS-51’ ;定义一个字符串 END 则: (1000H)=23H SEG的地址为1000H (1001H)=00H 10H (1002H)=10H 00H (1003H)=4DH ‘M‘的ASCII码 (1004H)=43H ‘C’ 的ASCII码 (1005H)=53H ‘S’ 的ASCII码 (1006H)=2DH ‘-’的ASCII码 (1007H)=35H 数字5的ASCII码 (1008H)=31H 数字1的ASCII码 14 04:34:02