第四章 汇编语言程序设计

合集下载

汇编语言程序设计

汇编语言程序设计

汇编语⾔程序设计第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。

第四章 汇编语言程序设计

第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。

第4章 汇编语言程序设计

第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章 汇编 语言程序设计

第4章  汇编 语言程序设计
14
汇编时,遇到“ 就停止“翻译” 因此, 汇编时,遇到“;” 就停止“翻译”。因此,注释字 段不会产生机器代码。 段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息, 在汇编语言源程序中应有向汇编程序发出的指示信息, 向汇编程序发出的指示信息 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令来实现 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员 伪指令不属于指令系统中的汇编语言指令, 发给汇编程序的命令,也称为汇编程序控制命令。 发给汇编程序的命令,也称为汇编程序控制命令。 命令 汇编程序控制命令 只有在汇编前的源程序中才有伪指令。 “伪”体现在 只有在汇编前的源程序中才有伪指令。 汇编后,伪指令没有相应的机器代码产生。 汇编后,伪指令没有相应的机器代码产生。 没有相应的机器代码产生 伪指令具有控制汇编程序的输入/输出、 伪指令具有控制汇编程序的输入/输出、定义数据和符 号、条件汇编、分配存储空间等功能。 条件汇编、分配存储空间等功能。
6
经过十几年努力,C51已成为单片机的实用高级编程语言。 经过十几年努力,C51已成为单片机的实用高级编程语言。 已成为单片机的实用高级编程语言 尽管目前已有不少设计人员使用C51来进行程序开发, 尽管目前已有不少设计人员使用C51来进行程序开发,但在 C51来进行程序开发 对程序的空间和时间要求较高的场合,汇编语言仍必不可少 程序的空间和时间要求较高的场合, 空间 要求较高的场合 。 在这种场合下,可使用C语言和汇编语言混合编程。 在这种场合下,可使用C语言和汇编语言混合编程。在很多 需要直接控制硬件且对实时性要求较高的场合,则更是非用 需要直接控制硬件且对实时性要求较高的场合, 汇编语言不可。 汇编语言不可。 掌握汇编语言并能进行程序设计, 掌握汇编语言并能进行程序设计,是学习和掌握单片机程 序设计的基本功之一。 序设计的基本功之一。 基本功之一 4.1.2 汇编语言语句和格式

四章汇编语言程序设计ppt课件

四章汇编语言程序设计ppt课件
指令助记符:MOV,ADD,…. 指示性(伪指令)操作符:DB,DW,SEGMENT,
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

第4章-汇编语言程序设计

第4章-汇编语言程序设计
第4章 汇编语言程序设计
*
目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss
.data
.text
RAM
E2PROM
ROM
第4章 汇编语言程序设计
*
3. 段定义伪指令
汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分:
;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;0123h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令
;初始化数据段 ;3组数据放入.data段
第4章 汇编语言程序设计
*
汇编语言源程序:
链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。
第4章 汇编语言程序设计
*
4.2.1分段结构 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
第4章 汇编语言程序设计
*
C源文件
C编译器
汇编 源文件
汇编器
汇编 源文件
COFF 目标文件
链接器
可执行的 COFF文件
宏源文件
存档器
宏库
存档器
目标 文件库
建库工具
运行时 支持库
EPROM 编程器
交叉引用 列表器
调试工具
绝对地址 列表器

04_汇编语言程序设计完整

04_汇编语言程序设计完整
量位置之间的字节数。对于16位的段,则是16位的无符号数; 对于32位的段,则是32位的无符号数。
第4章 汇编语言程序设计 类型属性(TYPE):指变量占用存储单元的字节数。若占 用一个字节,称为字节变量,其类型为BYTE:若占用两个字 节,称为字变量,其类型为WORD;若占用4个字节,称为双 字变量,其类型为DWORD。
第4章 汇编语言程序设计
2) 伪指令语句
伪指令语句也叫指示性语句,它只是为汇编程序在翻译汇 编语言源程序时提供有关信息,并不翻译成机器代码,所以也 不占用执行时间。 伪指令的格式为:
【符号名】 伪指令定义符 【参数表】 【;注释】
实际上,汇编语言源程序中还可出现宏指令语句。宏指令
语句就是由若干条指令语句形成的语句体。一条宏指令语句的
果程序中有堆栈段,也需要把段地址装入SS中。但是,代码段
CS不需要这样做,这一操作是在程序初始化时完成的。
第4章 汇编语言程序设计 为了对段定义作进一步地控制,SEGMENT伪操作添加有类 型及属性的说明,其格式如下:
<段名> SEGMENT [定位类型][组合类型][使用类型]
[类别] … <段名> ENDS 在一般情况下,这些说明可以不用。但是,如果需要用连 接程序把本程序与其他程序模块相连接时,就需要使用这些说 明。
ASSEMBLER)两种。我们采用QASM2.7版来说明汇编程序所提供的
伪操作和操作符,操作流程如图所示。
第4章 汇编语言程序设计
出错 编辑程序 EDLINE WPS WORD EDIT 文件 EXMP.ASM 汇编程序 ASM MASM TASM
文件 EXMP.OBJ (EXMP.LST) (EXMP.CRF)
串、?、用逗号隔开的上述各项或DUP(表达式)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例2:将一个十六进制数输出 算法分析: ①将十六进制数转换 成对应的字符。如果是数 字,加48H,如果是A~F, 加55。 ②利用功能调用输出。 ; 数据段
DATA
SEGMENT X DB 05H DATA ENDS
第四章
汇编语言程序格式
编写程序,将从键盘上输入一个小写英文字母, 例 3 : 编写程序 , 将从键盘上输入一个小写英文字母 , 输出 其对应的大写字母。 其对应的大写字母。
②算法分析: 使用XLAT指令查表 ③调试方法: 使用DEBUG的G命令
第四章
汇编语言程序格式
实验三: 实验三:顺序结构程序设计
1、实验目的: ① 熟练掌握汇编语言源程序的结构 ② 掌握顺序结构程序设计方法 2、实验内容: ① 使用算术运算类指令编写程序 ② 使用调整指令编写程序 ③ 使用逻辑运算指令编写程序
2
第四章
汇编语言程序格式
三、顺序结构程序设计示例
例1:编写程序完成将两个字节数据相加,并且将结果存入 编写程序完成将两个字节数据相加, 另一个单元中。 另一个单元中。 1、分析: 程序共分三个部分: ② 代码段 ① 数据段 2、设计: ① 设计数据段 DATA SEGMENT X DB 4CH Y DB 52H Z DB ? DATA ENDS
第四章
汇编语言程序格式
实验四: 实验四:分支结构程序设计
1、实验目的: 掌握分支结构程序设计方法 2、实验内容: ① 使用无符号转移指令编写程序 ② 使用有符号转移指令编写程序 ③ 使用特殊标志条件指令编写程序
12
第四章
汇编语段中有三个无符号数,分别存放在DAT,DAT+1, DAT+2字节单元中,编写一完整的源程序,找出三个数中数 值大小居中的一个,并将其存入BUF字节单元中。 DAT DB XX,XX,XX BUF DB ?
②代码段
20
第四章
汇编语言程序格式
②代码段
15
第四章
汇编语言程序格式
例3:设变量VAR 中有如下数据,计算其中的最大数。 设变量VAR 中有如下数据,计算其中的最大数。 12,0,-5,8,0,40,-77,2,0,61,92 , , , , , , , , , ,
DATA SEGMENT TAB DB 12, 0, -5, 8, 0, 40, -77, 2, 0, 61, 92 COUNT EQU $-TAB MAX DB ? AGAIN: INC BX DATA ENDS CMP AL , [BX] JG LAB CODE SEGMENT MOV AL , [BX] ASSUME CS:CODE ,DS:DATA LAB: LOOP AGAIN START: MOV AX , DATA MOV MAX , AL MOV DS , AX MOV AH , 4CH MOV BX , OFFSET TAB INT 21H MOV AL , [BX] CODE ENDS MOV CX , COUNT-1 END START 16
第四章
汇编语言程序格式
; 代码段 CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX , DATA MOV DS , AX MOV DL , X CMP DL , 9 JA LAB1 ADD DL , 48 JMP LAB2 LAB1: ADD DL , 55 LAB2: MOV AH , 2 INT 21H MOV AH , 4CH INT 21H CODE ENDS END START 10
ADD AL,7 NEXT2:MOV DL,AL MOV AH,02 INT 21H DEC CH JNZ NEXT1 MOV AH,4CH INT 21H
END CODE START ENDS
17
第四章
汇编语言程序格式
刚才的例子中我们讲述了16进制形式的输出 下面我们讨论 刚才的例子中我们讲述了 进制形式的输出,下面我们讨论 进制形式的输出 一下十六进制的输入,十进制的输入输出 二进制的输入输出. 一下十六进制的输入 十进制的输入输出,二进制的输入输出 十进制的输入输出 二进制的输入输出 (不考虑溢出 不考虑溢出) 不考虑溢出 十六进制数的输入:假设最终输入的数据存放在 假设最终输入的数据存放在BX中 十六进制数的输入 假设最终输入的数据存放在 中. 应满足下列算式: 应满足下列算式 BX=0 BX=BX*10H+AL (乘法可以用移位来实现 乘法可以用移位来实现) 乘法可以用移位来实现
19
第四章
汇编语言程序格式 code segment assume cs:code, ds:data start: mov ax, data mov ds, ax mov es,ax cld push di mov cx,es:[di] add di,2 repne scasw cmp tab[di], 0 loopz again je delete pop di jmp short exit
③ 程序结束语句
3
第四章
汇编语言程序格式
②设计代码段 CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX , DATA MOV DS , AX MOV AL , X ADD AL , Y MOV Z , AL MOV AH , 4CH INT 21H CODE ENDS ③ 程序结束语句 END START
DATA SEGMENT MSG DB 0DH, 0AH DB ' Input error!' DB 0DH, 0AH, '$' DATA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX , DATA MOV DS , AX MOV AH , 1 INT 21H CMP AL , 'a' JB ERR CMP AL , 'z' JA ERR SUB AL , 20H MOV DL , AL MOV AH , 2 INT 21H JMP EXIT1 ERR: MOV DX , 0 MOV AH , 9 INT 21H EXIT1: MOV AH , 4CH INT 21H CODE ENDS END START 11
第四章
汇编语言程序格式
例5:编写程序,将BX寄存器中的数用16进制数的形式输出.。 编写程序, BX寄存器中的数用16进制数的形式输出. 寄存器中的数用16进制数的形式输出
1)分离每个 进制数位 分离每个16进制数位 分离每个 2)转换成 转换成ASCII码 转换成 码 3)输出 或者存入字符串中一次输出 输出,或者存入字符串中一次输出 输出 或者存入字符串中一次输出. CODE SEGMENT ASSUME CS:CODE START: MOV CH,4 MOV CL,4 NEXT1:ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,39H JA NEXT2
4
第四章
汇编语言程序格式
例7:输入一位十进制数,使用查表法计算它的平方。 输入一位十进制数,使用查表法计算它的平方。 ①数据段如下:
DATA SEGMENT TAB DB 0,1,4,9,16,25 DB 36,49,64,81 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX , DATA MOV DS , AX LEA BX , TAB MOV AH , 1 INT 21H SUB AL ,30H XLAT MOV RESULT , AL MOV AH , 4CH INT 21H CODE ENDS END START 5
1
第四章
汇编语言程序格式
二、汇编源程序的结构2 汇编源程序的结构
数 据 段
代 码 段
data segment first db 'This is a ASM program ! $‘ data ends code segment main proc far assume cs:code,ds:data begin: push ds sub ax,ax 启动 push ax 位置 mov ax,data mov ds,ax mov dx,offset first mov ah,9H int 21h ret Main endp
Assembly Language Programming
第四章 汇编语言程序设计
第四章
汇编语言程序格式
一、汇编源程序的结构1 汇编源程序的结构
数 据 段
代 码 段
data segment first db 'This is a ASM program ! $‘ data ends code segment assume cs:code,ds:data begin: mov ax,data 作用:是给段寄存器DS赋值 mov ds,ax mov dx,offset first 启动 mov ah,9H 作用:显示DX对应的字符串 位置 int 21h mov ah,4ch 作用:返回到DOS提示符下 int 21h code ends end begin 程序结束
8
第四章
汇编语言程序格式
四、分支结构程序设计示例
例1:编写程序,A字节单元中存放一个有符号数,求它的绝 对值并存入到B字节单元中。
DATA SEGMENT A DB -55 B DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX , DATA MOV DS , AX MOV AL , A CMP AL , 0 JGE NEXT NEG AL NEXT: MOV B, AL MOV AH , 4CH INT 21H CODE ENDS END START 9
相关文档
最新文档