天津大学微机原理第4章汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.4 HCS08 CPU与HC08 CPU的比较
(2)操作码(Opcodes)
操作码包括指令码以及后面即将介绍的08编译器可以识别的伪指令 码。对于有标号的行,必须用至少一个空格或制表符(TAB)将标号与 操作码隔开。对于没有标号的行,不能从第一列开始写指令码,应以空 格或制表符(TAB)开头。08编译器不区分操作码中字母的大小写。
(3)操作数(Operands)
操作数可以是地址、标号或指令码定义的常数,也可以是由伪运算 符构成的表达式。08编译器识别下列伪运算符:加(+)、减(-)、 乘(*)、除(/)、特殊除(\,允许被除数为0,此时认为结果也为0 )、左移(<)、右移(>)、取余数(%)、与(&)、或(|)、异 或(^)。如果超过一种运算或中间有插入空格应使用{}把它们包含在 内。
ORG LDA BLT LDX CLRH DIV BRA ABS: NEGA DONE: STA BRA END
$E000 $70 ABS #3
;为负转绝对值处理BMI行吗?BLO呢? ;正数,除以3
DONE ;数值取反(按位取反后+1),不同于COM(按位取反) $71 $
例2:按下式计算函数的值,结果存入FUN 单元
的机器指令,因此这些指令被称为伪指令(Pseudo Instruction)
。
汇编语言源程序以行为单位进行设计,每一行最多可以包含以下
四个部分:
标号 操作码 操作数 注释
5.4 HCS08 CPU与HC08 CPU的比较
(1)标号(Labels)
对于标号有下列要求及说明:
① 如果一个语句有标号,则标号必须从第一列开始书写。 ② 可以组成标号的字符有:字母A~Z、数字0~9、下划线“_”、美元
以下为HCS08汇编程序中定义的一些常用伪指令。 ㈠. 汇编起始命令:
格式: ORG 16位地址 功能:定义此指令后面源程序的汇编地址(目标程序存放的首地址) 例: ORG 2000H START:LDA #64H
…… 则规定 LDA #64H从2000H单元开始存放,同时将标号START定义为 2000H。
椭圆(或桶型):程序的开始 、结束。 矩形框:要进行的工作。 菱形框:判断,框内为判断内容。 圆圈:程序连接点。 指向线:程序流向。 子程框:框内为子程名。 画流程图时,按程序处理的顺序,由上至下逐步绘制。对于复杂的系统, 可先画总体流程图(主程序框图),再画各模块的局部框图。 四 . 编制程序
为便于理解程序,可以在程序中添加注释。在一行语句中,分 号“;”后面的内容为注释。注释部分经汇编后不会生成任何 机器指令码。若“*”在一行语句的第一列,则表示该行 为注释。
MUL
ADD #9
DONE:STA FUN
BRA $
END
习题一
1.若($70)=$24,将其传送到$80单元,否则传送到$81 单元。 讲评:1. $24是立即数2. 注意第一步结束要用BRA指令跳转 .3.不
符号“$”,但开头的第一个符号不能为数字和$。
③ 08编译器不区分标号中字母的大小写。 ④ 标号应小于16个字符。 ⑤ 标号后可以带冒号“:”,也可以不带冒号。 ⑥ 一个标号在一个程序中只能定义一次。 ⑦ 若一行中第一个字符是星号“*”,这是标号,表明该行为注释。 ⑧ 一行语句若只有标号,编译器将把当前程序计数器的值赋给该标号。 ⑨ 若希望更多的编译器能够识别,建议标号长度小于8个字符。 ⑩ “#”表示立即数。 ⑪ 操作码不能从第一列开始,否则会被当成标号.
注意:汇编指令中的冒号(:)、逗号(,)、分号(;)、星 号(*)等标点符号要在英文状态下输入才合法,如果在中文 状态下输入,编译器会认作非法字符,在编写汇编代码时应该 注意把输入法的状态切换到英文输入状态。
4.2 ຫໍສະໝຸດ Baidu8汇编语言基础
4.2.1 08汇编源程序格式
把汇编语言写成的源程序“翻译”成机器语言的工具叫汇编程
第四章 汇编语言程序设计 4.1 编程的步骤
汇编语言程序设计,要求设计者对计算机的硬件结构(包括微机CPU、 存贮器结构、接口电路、外部设备特性等)有详细了解,此外应熟悉CPU的 指令系统和编程的基本技巧。 一. 分析问题:任务是什么?工作过程(顺序)?现有条件(硬件结构)、已知数据、 运算精度、处理速度等。 二. 确定算法:将实际问题转化为程序处理模块。 三 . 画程序流程图:
(4)注释(Comments)
注释即是说明文字,若是处于指令之后,则用空格和分号“;”与 指令分开,若整行为注释文字,则在第一列写上“;”或“*”。
HCS08伪指令
4.2.2 伪指令(Pseudo):
在汇编程序中定义的各种汇编命令。用以指定程序的实际存放地址、 定义各种文字符号的数值等。这些命令并不产生机器码,仅起到汇编时 的辅助作用。
FUN= X1-3
(若X1≧10)
= X1×8+9 (若X1﹤10) ;X1为8位2进制无符号数。
X1: EQU $70
FUN: EQU $80
ORG $E000
LDA X1
CMP #10
BLO LESS ;BCS LESS if c=1; BMI if N=1
SUB #3
BRA DONE
LESS: LDX #8
* ORG指令可多次使用。
㈡.汇编结束命令: 格式:END 功能:通知汇编程序结束汇编。
* END指令仅用于整个源程序的结束。
4.3 汇编语言程序的基本结构
一. 顺序程序:无分支、循环,程序按顺序逐条执行 用CODEWARRIOR编1+1; 二. 分支程序:按不同的条件执行不同的程序分枝。
程序实例:(注意条件转移语句在分支产生中的作用。) 例1:若$70单元中的8位2进制有符号数为正(或0),则将其除以3, 为 负则求其绝对值,结果存人$71单元。
序或编译器(Assembler),以下统一称作编译器。
汇编语言源程序可以用通用的文本编辑软件书写编辑,以ASCII 码形式存盘。具体的编译器对汇编语言源程序的格式有一定的要求, 同时,编译器除了识别单片机的指令系统外,为了能够正确地产生目 标代码以及方便汇编语言的编写,编译器还提供了一些在汇编时使用 的命令、操作符号,在编写汇编程序时,也必须正确使用它们。由于 编译器提供的指令仅是为了更好地做好“翻译”工作,并不产生具体
(2)操作码(Opcodes)
操作码包括指令码以及后面即将介绍的08编译器可以识别的伪指令 码。对于有标号的行,必须用至少一个空格或制表符(TAB)将标号与 操作码隔开。对于没有标号的行,不能从第一列开始写指令码,应以空 格或制表符(TAB)开头。08编译器不区分操作码中字母的大小写。
(3)操作数(Operands)
操作数可以是地址、标号或指令码定义的常数,也可以是由伪运算 符构成的表达式。08编译器识别下列伪运算符:加(+)、减(-)、 乘(*)、除(/)、特殊除(\,允许被除数为0,此时认为结果也为0 )、左移(<)、右移(>)、取余数(%)、与(&)、或(|)、异 或(^)。如果超过一种运算或中间有插入空格应使用{}把它们包含在 内。
ORG LDA BLT LDX CLRH DIV BRA ABS: NEGA DONE: STA BRA END
$E000 $70 ABS #3
;为负转绝对值处理BMI行吗?BLO呢? ;正数,除以3
DONE ;数值取反(按位取反后+1),不同于COM(按位取反) $71 $
例2:按下式计算函数的值,结果存入FUN 单元
的机器指令,因此这些指令被称为伪指令(Pseudo Instruction)
。
汇编语言源程序以行为单位进行设计,每一行最多可以包含以下
四个部分:
标号 操作码 操作数 注释
5.4 HCS08 CPU与HC08 CPU的比较
(1)标号(Labels)
对于标号有下列要求及说明:
① 如果一个语句有标号,则标号必须从第一列开始书写。 ② 可以组成标号的字符有:字母A~Z、数字0~9、下划线“_”、美元
以下为HCS08汇编程序中定义的一些常用伪指令。 ㈠. 汇编起始命令:
格式: ORG 16位地址 功能:定义此指令后面源程序的汇编地址(目标程序存放的首地址) 例: ORG 2000H START:LDA #64H
…… 则规定 LDA #64H从2000H单元开始存放,同时将标号START定义为 2000H。
椭圆(或桶型):程序的开始 、结束。 矩形框:要进行的工作。 菱形框:判断,框内为判断内容。 圆圈:程序连接点。 指向线:程序流向。 子程框:框内为子程名。 画流程图时,按程序处理的顺序,由上至下逐步绘制。对于复杂的系统, 可先画总体流程图(主程序框图),再画各模块的局部框图。 四 . 编制程序
为便于理解程序,可以在程序中添加注释。在一行语句中,分 号“;”后面的内容为注释。注释部分经汇编后不会生成任何 机器指令码。若“*”在一行语句的第一列,则表示该行 为注释。
MUL
ADD #9
DONE:STA FUN
BRA $
END
习题一
1.若($70)=$24,将其传送到$80单元,否则传送到$81 单元。 讲评:1. $24是立即数2. 注意第一步结束要用BRA指令跳转 .3.不
符号“$”,但开头的第一个符号不能为数字和$。
③ 08编译器不区分标号中字母的大小写。 ④ 标号应小于16个字符。 ⑤ 标号后可以带冒号“:”,也可以不带冒号。 ⑥ 一个标号在一个程序中只能定义一次。 ⑦ 若一行中第一个字符是星号“*”,这是标号,表明该行为注释。 ⑧ 一行语句若只有标号,编译器将把当前程序计数器的值赋给该标号。 ⑨ 若希望更多的编译器能够识别,建议标号长度小于8个字符。 ⑩ “#”表示立即数。 ⑪ 操作码不能从第一列开始,否则会被当成标号.
注意:汇编指令中的冒号(:)、逗号(,)、分号(;)、星 号(*)等标点符号要在英文状态下输入才合法,如果在中文 状态下输入,编译器会认作非法字符,在编写汇编代码时应该 注意把输入法的状态切换到英文输入状态。
4.2 ຫໍສະໝຸດ Baidu8汇编语言基础
4.2.1 08汇编源程序格式
把汇编语言写成的源程序“翻译”成机器语言的工具叫汇编程
第四章 汇编语言程序设计 4.1 编程的步骤
汇编语言程序设计,要求设计者对计算机的硬件结构(包括微机CPU、 存贮器结构、接口电路、外部设备特性等)有详细了解,此外应熟悉CPU的 指令系统和编程的基本技巧。 一. 分析问题:任务是什么?工作过程(顺序)?现有条件(硬件结构)、已知数据、 运算精度、处理速度等。 二. 确定算法:将实际问题转化为程序处理模块。 三 . 画程序流程图:
(4)注释(Comments)
注释即是说明文字,若是处于指令之后,则用空格和分号“;”与 指令分开,若整行为注释文字,则在第一列写上“;”或“*”。
HCS08伪指令
4.2.2 伪指令(Pseudo):
在汇编程序中定义的各种汇编命令。用以指定程序的实际存放地址、 定义各种文字符号的数值等。这些命令并不产生机器码,仅起到汇编时 的辅助作用。
FUN= X1-3
(若X1≧10)
= X1×8+9 (若X1﹤10) ;X1为8位2进制无符号数。
X1: EQU $70
FUN: EQU $80
ORG $E000
LDA X1
CMP #10
BLO LESS ;BCS LESS if c=1; BMI if N=1
SUB #3
BRA DONE
LESS: LDX #8
* ORG指令可多次使用。
㈡.汇编结束命令: 格式:END 功能:通知汇编程序结束汇编。
* END指令仅用于整个源程序的结束。
4.3 汇编语言程序的基本结构
一. 顺序程序:无分支、循环,程序按顺序逐条执行 用CODEWARRIOR编1+1; 二. 分支程序:按不同的条件执行不同的程序分枝。
程序实例:(注意条件转移语句在分支产生中的作用。) 例1:若$70单元中的8位2进制有符号数为正(或0),则将其除以3, 为 负则求其绝对值,结果存人$71单元。
序或编译器(Assembler),以下统一称作编译器。
汇编语言源程序可以用通用的文本编辑软件书写编辑,以ASCII 码形式存盘。具体的编译器对汇编语言源程序的格式有一定的要求, 同时,编译器除了识别单片机的指令系统外,为了能够正确地产生目 标代码以及方便汇编语言的编写,编译器还提供了一些在汇编时使用 的命令、操作符号,在编写汇编程序时,也必须正确使用它们。由于 编译器提供的指令仅是为了更好地做好“翻译”工作,并不产生具体