汇编语言程序设计(一)
Ram_Data
RamStart 1 RomStart
Again:
;用户FLASH的开始 ;主程序,单片机上电开始运行的地方 ;复位堆栈指针,即$00FF SP ;00H A ;00H X #$01,CONFIG1 ;禁止COP复位 Ram_Data ;初始化RAM, 00H Ram_Data #$01+1,RamData ;主循环的开始 Again ;跳到主循环的开始 RstVector Main_Pro ;定义复位向量 ;复位向量
4 汇编语言源程序的格式:操作数 操作数:是操作码操作的对象,可以是地址、标 号、数值或表达式。 操作数位于操作码之后,两者用至少一个空 格或Tab符隔开。 多个操作数之间用逗号“,”隔开。 大多数指令需要操作数,但是有些隐含寻址 的指令(针对CPU寄存器的操作)没有操作 数,如CLRA, STX,RSP等等。
4 汇编语言源程序的格式:操作码 操作码:表示某种计算或者控制,例如表示加法、 跳转等等。它可以是伪指令,也可以是助记符。 操作码位于标号之后,两者用至少一个空格 或Tab符隔开。对于没有标号的语句,操作符 不能从一行的第一列开始写,前面应该至少 有一个空格或Tab符。这和标记刚好是相反的。 操作码是必须的,在一条语句中一定存在操 作码。 例ORG,EQU,ADD,MOV,INC,LDA, STA,CLR等等。
3 机器语言 & 汇编语言 100101010000000101101110000000010 0000000这串机器码表示:1A,1$00 机器语言的缺陷: 代码长,不好记忆,不易看懂,容易写错。 汇编语言:为了解决机器语言的缺陷,人们发明 了另外一种语言——汇编语言。这种语言用符号 (助记符,标号,数值)来代替冗长的、难以记 忆的0、1代码串。 LDA #1T 表示1A MOV #1T,$00 表示1$00
4 汇编语言源程序的格式:仿真体验 在ICS08上面运行”学生练习(找错)_汇编语 言程序设计1.asm “,对照汇编语言源程序的格 式中的各个要点,找出问题并改正它们.
5 常量
常量是指那些在汇编时已经有确定数制的量。分为数值常量(也叫 常数)和符号常量。 常数:以数值的形式出现在符号指令中。常数可以是二进制、十进 制、十六进制和ASCII码,其中二进制、十进制、十六进制分别加 前缀%、!、$或者后缀Q、T、H,ASCII码用单引号‘’表示。 如10010111Q=%10010111=97H=$97=151T ‘A’ ;等同于41H 符号常量:经常使用的地址或者数值预先用伪指令EQU定义为一个 名字,然后用该名字来表示该地址或数值,这个名字就成为了符号 常量。例如 PORTA EQU $0000 ;将$0000地址单元定义为符号 ;常量PORTA Ram_Start EQU 0080H ;将数值0080H定义为符号常量 ;Ram_Start
4O
1 本单元目标
了解什么是汇编语言
掌握汇编语句格式 掌握源程序框架结构
2.1 一个典型的、完整的汇编源程序
RamStart RomStart RstVector $INCLUDE EQU $0080 EQU $EC00 EQU $FFFE ‘JL3REGS.INC‘ ORG DS ORG Main_Pro RSP CLRA CLRX MOV CLR MOV JMP ORG DW ;MC68HC08JL3的RAM起始地址 ;FLASH的起始地址 ;复位向量地址 ;寄存器头文件,包含了各寄存器的定义 ;开始变量的定义 ;$0080处定义1B的RAM空间
4 汇编语言源程序的格式:注释 注释:在一行语句中,分号“;”后面的内容为 注释部分;另外,如果“*”在一行语句的第一 列,也表示该行是注释。 它应由一个以上的空格或制表符与操作数或 操作码(无操作数时)分开。 它可包含任何可打印的ASCII字符。 注释不是必须的,但是对于初学者,建议给 每条语句写注释。
4 汇编语言源程序的格式:其他说明 语句中出现的标点符号“:”、“;”、“,”、 “_”都必须是在“英文标点模式”下输入,而 不能在“中文标点模式”下输入为“:”、 “;”、“,”、“——”。 注释中出现的标点符号则不受上面的限制。 不要把数字0和字母o混淆。 不要把数字1和字母l混淆。 不同语句的标号、操作码、操作数、注释最好对 齐,这样的程序美观且容易阅读。
2.2 典型、完整的汇编源程序流程图
开始 程序员知道会有调 用,但是不知道什 么时候、什么地方 会调用中断子程序, 而是由系统自动调 用。
程序员有意安排的, 知道在什么时候、 什么地方会调用
常量初始化
主程序 初始化 寄存器和变量
一般子程序
主循环入口
中断子程序
从事主要工作
跳到主循环入口
3 机器语言 & 汇编语言 机器语言:芯片的存储单元只有0和1两种状态, 而芯片也只会判断0和1这两种状态,因此一串代 码要让芯片“读懂” ,这串代码只能由数字0和 1组成。像这种由数字0和1按照一定的规律组成 的代码就叫机器码,也叫二进制编码。一定长度 的机器码组成了机器指令,用这些机器指令所编 写的程序就称为机器语言。 1010011000000001 表示1A 011011100000000100000000 表示1$00
4 汇编语言源程序的格式:标号
用户的汇编源程序由一条条汇编语句组成,每条最完整 的语句可包括以下4个部分:标号、操作码、操作数和注 释。不区分大小写。
例如:Again: 标号 MOV #$01,RamData ;主循环的开始
操作数 注释 操作码 标号:实际上是代表了某行语句存放的起始地址。 标号不是必须的,绝大多数语句都没有标号,它通常只用在子 函数或转移目的语句处。 标号的前面不能留有任何空格,标号后面的冒号“:”可有可 无。 标号只能以字母开头,后面可以跟数字和下划线。 标号在标号部分只能出现一次,不能重复。 判断这些标号,找出不合法的:Init_Pro, _Init_Pro, 3Init_Pro, Again1。 (不合法: _Init_Pro, 3Init_Pro)
3 机器语言 & 汇编语言 汇编:汇编语言写成的源程序,我们人类看得懂, 但是芯片看不懂,它只认得机器语言,汇编源程 序必须翻译成机器语言,才能在芯片上运行。利 用专用的汇编工具(例如ICS08)把汇编语言写 成的源程序翻译成机器语言的过程就叫汇编。 现今,人们普遍采用汇编语言和C语言来编写单 片机源程序。我们这个学期要学的就是汇编语言。