汇编语言程序设计
汇编语言程序设计

汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
汇编语言程序设计实验要求

汇编语言程序设计实验要求一、实验目的1.理解计算机的基本组成结构和运行原理;2.掌握汇编语言的基本语法和应用;3.学会使用汇编语言设计并实现简单的程序;4.培养分析和解决问题的能力。
二、实验内容根据实验的具体要求,设计并实现汇编语言程序,要求程序的功能和执行效果符合实验要求。
三、实验要求1.完成实验报告,并按照实验报告模板的要求编写。
2.实验过程中能提出并解答问题的,要及时记录下来。
3.实验过程中发现的问题要及时上报和解决。
4.保持实验室设备的安全性和完好性。
四、实验步骤1.紧密结合课程内容,理清实验的基本思路和需求。
2.设计程序的框架和算法,明确每个步骤的功能和实现方法。
3.编写汇编语言程序的代码,注意代码的规范性和可读性。
4.进行程序的编译和调试,确保程序能够正确运行并得到正确的结果。
5.运行程序,观察程序的执行过程和结果是否符合设计要求。
五、实验评分标准1.实验报告的撰写质量(包括格式、内容、语言表达等)占总分的30%。
2.汇编语言程序的设计和实现质量占总分的50%。
3.程序的运行效果和正确性占总分的20%。
六、实验注意事项1.在编写汇编语言程序时,要注意程序的可读性和可维护性。
2.在程序的编译和调试过程中,要保持对程序的追踪和记录。
3.注意程序的输入和输出的正确性和合法性。
4.在实验过程中,要积极与实验指导教师和同学之间进行交流和讨论。
以上就是汇编语言程序设计实验的要求。
通过这门实验课程的学习和实践,我们能够更加深入地了解计算机体系结构和汇编语言的基本原理和应用,从而为我们今后的学习和工作打下坚实的基础。
希望同学们在实验中能够认真学习和探索,通过实践提高自己的动手能力和问题解决能力。
第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。
第4章 汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)
第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
第4章 汇编 语言程序设计

DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处 NOP
HERE:SJMP
HERE
上述4个字段应该遵守的基本语法规则如下。
10
1.标号字段
语句所在地址的标志符号,才能被访问。如标号 “START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由1~8个ASCII码字符组成,第一个字符必须是
8
汇编语言语句是符合典型的汇编语言的四分段格式:
标号字段 (LABLE) 操作码字段 (OPCODE) 操作数字段 (OPRAND) 注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔;
操作数字段和注释字段之间的分界符用分号“;”。
表示的机器语言程序,才能识别和执行。
完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得 到的以“0”、“1”代码形式表示的机器语言程序称为目标 程序。
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。 2.高级语言
功能是把P1.6的位地址赋给变量QA。
4.2
汇编语言源程序的汇编
“汇编”?汇编可分为手工汇编和机器汇编两类。
22
4.2.1
手工汇编
通过查指令的机器代码表(表3-2),逐个把助记符指令 “翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出 错,只有小程序或受条件限制时才使用。实际中,多采用“ 汇 编程序”来自动完成汇编。
16
重叠。例如:
ORG …… ORG …… ORG …… 2000H 2500H 3000H
第4章 单片机汇编语言程序设计

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000
单片机第4章汇编语言程序设计

4.2 伪指令
伪指令是在机器汇编中告诉汇编程序 如何汇编、对汇编过程进行控制的命令。 伪指令与汇编语言指令不同,只在源程序 中出现,不产生任何机器代码,在程序的 运行过程中不起作用,故称为“伪指令”。
处理 判断 连接
2.绘制程序流程图 简单的问题可由文字说明, 当问题复杂时,将文字说明的步骤以图形符号表示, 称流程图。
3.编写源程序 用汇编语言把流程图所表明的 步骤描述出来,实现流程图中每一框内的要求,从 而编制出一个有序的指令流,即汇编语言源程序。
4.汇编、调试 汇编语言是用指令助记符代替机 器码的编程语言,所编写的程序是不能在计算机上 直接执行的,因此利用它所编写的汇编语言程序必 须转换为单片机能执行的机器码形式的目标程序才 能运行,我们把这一过程称为汇编,进行汇编的程 序称为汇编程序。
4. 定义字伪指令DW
[标号:] DW 16位字数据表
该指令的功能与DB相似, 区别仅在于从指定地
址开始存放的是指令中的16位数据, 而不是字节串。
每个16位数据要占两个存储单元, 高8 位先存(低位
地址), 低 8 位后存(高位地址)。
1403H 3CH
ORG 1400H DATA1:DW 324AH,3CH
散转程序是分支程序的一种, 它可根据运算结果或输入数 据将程序转入不同的分支。MCS - 51 指令系统中有一条跳转指 令JMP@A+DPTR,用它可以很容易地实现散转功能。该指令 把累加器的8位无符号数与16位数据指针的内容相加, 并把相加 的结果装入程序计数器PC,控制程序转向目标地址去执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
INC R0
SETB 00H
;置交换标志
NOEX:DJNZ R2,ST1
JB
00H,ST
SJMP $
22
a-b
a=b ;a-b=0 a>b ;Cy=0 a<b ;Cy=1
12
汇编语言程序设计-求极值
带符号数a、b大小关系的判断
a-b
a-b=0则a=b ov=0则ab
a-b0且 ov=1则ab ov=0则ab
a-b0且 ov=1则ab
13
汇编语言程序设计-求极值 【例】从片内存RAM的BLOCK单元开始有一组无
4 常用汇编语言程序设计
1
汇编语言程序设计
汇编语言程序设计的步骤 熟悉与分析工作任务,明确其要求和要达到的 工作目的、技术指标等; 确定解决问题的计算方法和工作步骤; 画工作流程图; 分配内存工作单元,确定程序与数据区存放地 址; 按流程图编写源程序; 上机调试、修改及最后确定源程序。
HTA:MOV A,@R0;取数
CLR C
SUBB A,#0AH ;判断数值范围在0~9或A~F
JC H09
;Cy=1,数值在0~9转H09
MOV A,@R0
ADD A,#37H ;A~F,加37H得ASCII码
MOV @R0,A
RET
H09:MOV A,@R0
ADD A,#30H ;0~9,加30H得ASCII码
;ASCII 码表
9
汇编语言程序设计-代码转换
【例】编程将ASCII码(十六进制数码)转换为十六进 制数。设ASCII码存放在A中,转换结果放到B中。
方法1:
ASH1:CJNE A,#3AH,NX;判断数码范围
NX: JC SS
;在30H~39H转SS
SUBB A,#07H
SS: CLR C
SUBB A,#30H
C
A,@R1 ;比较
NEXT ;若A中的数较大,则继续跟下一数比较
A,@R1 ;取大数
NEXT1
A,@R1 ;恢复A值
R1
;指向下一个单元
R2,LOOP
MAX,A
$
15
汇编语言程序设计-搜索、统计
搜索(在一组数据中查找是否有指定的关键字) 统计(统计一组数据中符合某个指定条件的关键 字的个数)
2
汇编语言程序设计-代码转换
代码转换 由于计算机内部的运算都是用二进制,而在计 算机与外设的数据传送中常采用BCD码、 ASCII码和其他代码,因此存在代码转换问题。
代码转换的方法 算法处理 根据待转换的两种代码的某种数学上的运算关 系,通过一定的算法进行转换。
查表法 将两种待转换的代码对应列表,然后用查表指 令进行转换。
MOV @R0,A
RET
8
汇编语言程序设计-代码转换
方法二:查表法 HAC: MOV A,@R0 ;取数
MOV DPTR,#TAB ;ASCII码表首地址 MOVC A,@A+DPTR ;查表 MOV @R0,A RET TAB: DB 30H,31H,32H,. . . ,39H DB 41H,42H,. . . ,46H;0~F的
JB ACC.7,NX ;数值为负,判断下一个
INC 30H ;正数个数加1
NX:INC R0
;指向下一个单元
DJNZ R5,LP
SJMP $
17
汇编语言程序设计-排序
排序(对一组数据按升序或降序排列) 【例】设有N个无符号数,连续存放在BUF开始的片内
RAM,编程将它们按升序(从小到大)排列。 冒泡法排序:(假设有5个数据:5,19,7,25,1 )
第一轮排序:
5不 5
5
交
19 换 19 交 7
5
5
7
7
7
7 换 19 不 19
19
25
25
25
交 换
25 交
1
1
1
1
1 换 25
18
汇编语言程序设计-排序
第二轮排序:
55 5 5 5 77 7 7 7 19 19 19 1 1 1 1 1 19 19 25 25 25 25 25
...
最多应进行N-1轮排序。为 减少比较次数,设置一个 标志位反映一轮排序过程 中是否发生数据交换,如 果没有发生数据交换,就 表示数据已按顺序排列。
字符
ASCII码
0~9
30H~39H
A~Z
41H~5AH
a~z
61H~7AH
6
汇编语言程序设计-代码转换
ห้องสมุดไป่ตู้
【例】将R0所指单元中的十六进制数转换成ASCII码, 并把结果存于原单元中。
方法一:算法处理方法
十六进制数码
0
¦
+30H
9
A
¦
+37H
F
ASCII码 30H ¦ 39H 41H ¦ 46H
7
汇编语言程序设计-代码转换
CLR 00H
;交换标志清0
ST1:MOV A,@R0
;取Xi
MOV B,A
INC R0
;指向Xi+1
CLR C
SUBB A,@R0 ;比较
JC NOEX ;Cy=1,即Xi Xi+1,不交换
21
汇编语言程序设计-排序
MOV A,B
XCH A,@R0
DEC R0
MOV @R0,A ;两数交换存储位置
符号数据,个数为N,试求出其最大数,并存入 MAX单元。
14
汇编语言程序设计-求极值
MOV MOV MOV LOOP:CLR SUBB JNC MOV SJMP NEXT:ADD NEXT1:INC DJNZ MOV SJMP
R1,#BLOCK ;设置指针,指向第一个数
R2, #N ;比较次数
A,#0 ;第一次比较的参照数
;十位数移到高半字节
ORL A,B ;合并形成十位和个位的压缩BCD码
MOV @R0,A
RET
5
汇编语言程序设计-代码转换
ASCII码(美国标准信息交换码,American Standard Code for Information Interchange)
用7位二进制数表示一个字母或字符的编码方法, 可表示128个字符,其中包括数码0~9以及英文字 母等可打印的字符。常见的如:
MOV B,A
RET
10
汇编语言程序设计-代码转换
方法2:
ASH2:CLR C
SUBB A,#30H ;先减去30H
CJNE A,#0AH,SS ;再判断数码范围
SS: JC SS1
;在0~9转SS1
SUBB A,#07H
SS1: MOV B,A
RET
11
汇编语言程序设计-求极值
求极值(在一组数据中求最大值或最小值) 基于比较的操作 无符号数a、b大小关系的判断
3
汇编语言程序设计-代码转换
【例】将累加器A中0~FFH范围内的二进制数 转换为BCD数(0~255)。
说明:
BCD码有两种存放形式
一个字节存放一位BCD码,高半字节取0, 常用于显示和输出;
一个字节存放两位BCD码,即压缩BCD码, 有利于节省存储空间。
编程思路
将A中的二进制数除以100,所得商即为百位
【例】设有50个有符号数,连续存放在以31H为首地 址的片内数据存储器中,编程统计其中正数的个数, 并将个数存入片内RAM 30H单元。
16
汇编语言程序设计-搜索、统计
MOV R0,#31H ;设置指针
MOV R5,#50 ;循环次数
MOV 30H,#0
LP:MOV A,@R0 ;取数
JZ NX
;数值为0,判断下一个
19
流程图:
开始
设置地址指针,循环次数,有 序标志位(00H)=0
取相邻两数Xi Xi+1比较
YY
Xi<Xi+1N N
交换位置
置无序标志位(00H)=1
本轮比较结束
NN
YY NN
有序
? YYY
结束
20
汇编语言程序设计-排序
ST: MOV R2,#(N-1) ;置每轮比较次数
MOV R0,#BUF ;置数据首单元地址
数,将余数再除以10,所得商即为十位数,余
数即为个位数。
4
汇编语言程序设计-代码转换
BTB:MOV B,#100
DIV AB
;A中为百位数,B中为余数
MOV @R0,A ;存百位数
INC R0
;指向存放十位和个位的单元
MOV A,#10
XCH A,B
DIV AB
; A中为十位数,B中为个位数
SWAP A