Part 5 汇编语言设计

合集下载

第5章 汇编语言程序设计20PPT课件

第5章 汇编语言程序设计20PPT课件
第5章 汇编语言程序设计
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
汇编语言是一种采用助记符表示的程序设计语言, 即用助记符来表示指令的操作码和操作数,用标 号或符号代表地址、常量或变量。
汇编语言编写的程序能够直接利用硬件系统的特 性直接对位、字节、字寄存器或存储单元、I/O端 口进行处理,同时也能直接使用CPU指令系统提供 的各种寻址方式。
(小于)、GT(大于)、LE(小于等于)、GE (大于等于) (4)分析运算符:SEG、OFFSET、TYPE、SIZE和 LENGTH (5)合成运算符:PTR、THIS、SHORT
5.3 伪指令语句
5.3.1 数据定义伪指令 5.3.2 符号定义伪指令 5.3.3 段定义伪指令 5.3.4 模块定义与连接伪指令 5.3.5 处理器选择伪指令
汇编程序时最早也是最成熟的一种系统软件。 汇编程序的功能如下:
用汇编语言编 写的源程序
汇编程序
目标程序
5.2汇编语言源程序的格式
5.2.1 分段结构 5.2.2 汇编语言语句的类型和格式
5.2.1 分段结构
汇编语言源程序的结构是分段结构形式,一个汇 编语言源程序由若干段(SEGMENT)组成,每个段 以SEGMENT语句开始,以ENDS语句结束。整个源 程序的结尾是END语句。
5.3.1 数据定义伪指令
数据定义伪指令的用途是定义一个变量的类型, 给操作数赋值,或者仅给变量分配存储单元而不 赋予特定的值
数据定义伪指令的一般格式为:
[变量名] 作数……]
伪指令定义符
操作数[,操
数据定义伪指令定义符后面的操作数可以是 常数、表达式或字符串,但每项操作数的值不能 超过由伪指令定义符所定义的数据类型限定的范 围。

微机原理与汇编语言第5章汇编语言程序设计

微机原理与汇编语言第5章汇编语言程序设计
(2) 约定段寄存器和段的关系(即物理段和逻辑 段的关系,使用一个或多个ASSUME语句实现)
(3) 装填段寄存器(只装填数据型段寄存器)
(4) 设置返回DOS的方法
例如:
MYDARA SEGMENT ……
MYDATA ENDS MYCODE SEGMENT
ASSUME CS:MYCODE,DS:MYDATA START:
无法正常连接
有算法错误
LINK .EXE文件
(1) 编辑程序
DOS 环境下用 EDIT 编辑器
WINDOWS 环境下用 记事本
(2)汇编源程序
宏汇编程序 MASM.EXE 或小汇编程序 汇编程序主要有以下功能:
① 检查源程序中语法错误,给出错误提示信息 ② 产生目标文件(.OBJ)、列表文件(.LST)及 交叉引用文件(.CRF) ③ 展开宏指令
end start
汇编后的目 标文件只有 208字节
汇编语言源程序的格式
例二 编程实现多字节加法,如 S=3B74AC60F8H+20D59E36C1H
DATA1
F8H 60H ACH 74H 3BH
……
被加数、和
DATA2
C1H 36H 9EH D5H 20H
加数
DATA SEGMENT
DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH
(3) 操作数
操作数即为操作的对象。在指令语句中,可能有 单操作数或双操作数,也可能无操作数或隐含操作数; 而在伪指令中可能有更多个操作数。当操作数不止一个 时,相互之间应该用逗号隔开。
可以作为操作数的有:常数、寄存器、标号、变量 和表达式等。
1) 常量:是指令在中出现的哪些固定值, 可以分为数值常数和字符串常数两类。

第5章 汇编语言程序的设计new共290页PPT资料

第5章 汇编语言程序的设计new共290页PPT资料
36
OFFSET运算符 利用OFFSET运算符可以得到一个标号
或变量的偏移地址。 例: … … DATA1 DB 10H, 20H, 30H …… MOV DI,OFFSET DATA1
37
TYPE运算符 用来取存储器的单元类型,各单元类型对应
关系见表5.1。
38

例: X1 X2 X3
操作数。 (3) 标号 由于标号代表一条指令的符号地址,因
此可以作为转移(无条件转移或条件转移)、过 程调用CALL以及循环控制LOOP指令的操作 数。
30
(4) 变量 因为变量是存储器中某个数据区的名字, 所以在指令中可以作为存储器操作数。 (5) 表达式 汇编语言语句中的表达式,按其性质可 分为两种:数值表达式和地址表达式。 数值表达式产生一个数值结果,只有大小, 没有属性。
;SI加1 ;CX减1 ;若不等于0,转LOOPER
;返回DOS ;代码段结束 ;源程序结束
11
5.2.1 分段结构
一 个 汇 编 语 言 源 程 序 由 若 干 段 (SEGMENT) 组 成,每个段以SEGMENT语句开始,以ENDS语句结 束。整个源程序的结尾是END语句。
12
DATA SEGMENT ;定义数据
;(AX)←0FFFFH
34
* * * ④ 分的属性,如段值、偏移 量和类型等,或取得它所定义的存储空间的 大小。
分析运算符有SEG、OFFSET、TYPE、 SIZE和LENGTH等。
35
SEG运算符 利用SEG运算符可以得到一个标号或
变量所在段的段地址。 例: … … ARRAY DB 12H, 34H, 56H …… MOV AX,SEG ARRAY MOV DS,AX

汇编语言第5章

汇编语言第5章

说明:本指令还可继续划分成以下四种情况: (1) 检测某一标志位的条件转移指令如表5-1所示。 表5-1 检测某一标志位的条件转移指令
指令格式 JZ/JE LABEL JNZ/JNE LABEL JC LABEL JNC LABEL JO LABEL JNO LABEL
JS LABEL JNS LABEL JP/JPE LABEL JNP/JPO LABEL
1*,2,3,4*,5,6*,7,8*,9,10*,… 这样划去的都是合数,而右边剩下的就可能是素数。
从2起,往数串右边看,首先遇到的是素数3。 (4) 再从当前素数3起,划去数串右边所有3的倍数的数
(3本身除外),即 1*,2,3,4*,5,6*,7,8*,9*,10*,11,… 这样划去的都是合数。再从3起往右边看,首先遇到的
复习提问
1、请说出六个状态标志位的名称 2、DB、DW、DD的功能是什么 3、结束程序返回DOS的有哪些方法 4、ASSUME语句的功能 5、分析操作符有哪些? 6、各段寄存器的值如何装入?
第5章 基本结构程序设计
5.1 程序设计的一般过程 5.2 顺序结构程序设计 5.3 分支程序设计 5.4 循环程序设计 5.5 字符处理
基本结构程序设计51程序设计的一般过程52顺序结构程序设计53分支程序设计54循环程序设计55字符处理51程序设计的一般过程511程序与程序设计的概念要用计算机解决问题必须事先对所要解决的问题拟定一个便于计算机工作的明确步骤并且用计算机所能理解的语言把它表示出来输入计算机经过调试正确并最后运行取得结果后才算完成了任务我们称这一过程为程序设计
8.运行/维护 已交付的软件投入正式使用,便进入运行阶段,这一阶段
可能持续若干年甚至几十年。软件在运行中可能由于多方面的 原因,需要对它进行修改。其原因可能有:运行中发现了软件 中的错误需要修正;为了适应变化了的软件工作环境,需做适 当变更;为了增强软件的功能需做变更等。

第05章汇编语言及程序设计ppt课件

第05章汇编语言及程序设计ppt课件

汇编语言 源程序
汇编
目标程序
汇编程序
一一对应
汇编语言的指令
机器语言的指令
汇编语言程序设计的特点:
➢ 汇编语言是面向机器的语言,CPU不同的机器有不同 的汇编语言
➢ 可以充分利用机器的硬件功能和结构特点
➢ 可有效地加快程序的执行速度,减少目标程序所占用 的存储空间
➢ 可以对输入/输出端口进行控制,实时性能好 ➢ 汇编语言程序移植性、通用性、可读性差
第 5 章 程序设计及汇编语言
内容安排
一. 程序设计步骤 二. 程序设计 三. 汇编语言及汇编程序 四. 汇编语言源程序格式及实例 五. 上机操作
§5.1 程序设计步骤
(1〕分析问题 (2〕建立数学模型 (3〕确定算法 (4〕绘制程序流程图 (5〕内存空间分配 (6〕编制程序与静态检查 (7〕程序调试〔实验)
[名字] DW <表达式或数据项表> 功能:表达式或项表中的每一项是一个/两个字
节数,他们从符号名地址开始按字节连续存放, 如:直D到1 表中DB数据12H项, 结12H束 12H
D1 DB 3 DUP (12H) MOV AX, D1
注意:① 表达式或数据项表多于一项时,项与项之间用 逗号“,”或空格分隔
MOV BL,0FFH ;将FFH送入BL寄存器
LOut: MOV AL,BL
OUT 73H,AL ;将结果的标志数据输出到 73H端口
HLT
;暂停
Lw10: MOV BL,00H
JMP LOut
L10to20: MOV BL,88H
JMP LOut
3. 循环程序
强制CPU重复执行某一指令系列〔程序段〕的一种程序 结构形式
组成:

汇编语言程序设计(第二版)第五章PPT课件

汇编语言程序设计(第二版)第五章PPT课件

MACRO retnum mov al,retnum mov ah,4ch int 21h ENDM
;;带有形参retnum ;;宏定义中使用参数
宏调用
宏名 [实参表]
start: mainbegin dispmsg string mainend 0 end start
;宏调用,建立DS内容 ;宏调用,显示字符串 ;宏调用,返回DOS
过程名 ENDP
➢要 调 用 带➢参过数程声过明程伪定指义令:的用过于程事,先声不明应过采程用的结构 CALL指令过,程因名为比较PR烦O琐TO 调用距离 语言类型, 参数:类型 ➢应该采用过程调用伪指令INVOKE ➢使 用 INV➢O过K程E调伪用伪指指令令的 前 提 是 需 要 用 PROTO伪指令对过程IN进VO行K声E 明过程名,参数,...
mov al,_a
imul _c
mov cx,4
imul cx
例5.1-1/2
;bx中为b2 ;ax中为4ac
例5.1-2/2
.if sword ptr bx >= ax ;比较二者大小 mov tag,1
;第一分支体:条件满足,tag←1 .else
mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0
mov bx,ax mov ax,0 .ELSE * jmp @C0003 *@C0001: dec ax .ENDIF *@C0003:
.data
_a
sbyte ?
_b
sbyte ?
_c
sbyte ?
tag byte ?
.code
.startup
mov al,_b
imul al

第五章 汇编语言程序设计(作业)

第五章  汇编语言程序设计(作业)

第20题-Leabharlann 3MOV AH,4CH INT 21H START ENDP CODE ENDS END BEGIN 上述程序运行结束后,BUF中各字节单元 内容是什么?
P.43 第21题
已知程序如下,执行该程序后,回答下述问题: DATA SEGEMNT BLOCK DW 2,$+2,5,7,$+6,0DH COUNT EQU $-BLOCK-2; COUNT←10 AREA1 DB COUNT DUP(?) AREA EQU AREA1+COUNT-1 ; 地址表达式,AREA←0015H DATA ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 100 DUP(?) STACK ENDS
第24题-续1
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX
第24题-续2
LEA DI,AA; 建立指针 LEA SI,BB AND AX,AX; CF←0 MOV BX,OFFSET CC+4; BX←000CH MOV CX,COUNT; CX←4 MOV AL,[DI+03H] ADC AL,[SI+03H] MOV [BX],AL DEC BX DEC DI DEC SI LOOP MU1 MOV AL,00H; AL←00H RCL AL,1 MOV [BX],AL
第30题-续2
MAIN CODE RET ENDP ENDS END MAIN
第30题-续3
回答以下问题: 1)该程序的功能是 统计NUM中1的个数 。 2)程序运行结束时,RESULT单元的内容 是 3 。 3)指令AND AX,AX在程序中的作用是 判 断AX的内容是否为0 。

汇编语言程序设计ppt课件

汇编语言程序设计ppt课件

3.用注释行说明程序,便于阅读和修改调试和修改。
1
9
常用程序结构: 顺序程序、循环程序、分支程序、查表程序、子程
2. 顺序与循环程序设计
❖5.2.1 顺序程序设计(又称简单程序) 既无分支,又无循环,按照顺序执行 可完成一定的基本功能,是编写复杂程序的 基础
10
例1:将一个字节内的两个BCD码拆开并变成ASCII码, 存入两个RAM单元。BCD码放在内RAM的20H, 转换后高半字节放到21H,低字节放22H。
ROM
20H BCDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21H 0011 BCDH ;完成转换 @R0 22H 000101 B0C0D0L0
;存数
END
12
回目录 上页 下页
5.2.2 循环程序
包含多次重复执行的程序段,循环结构使程序紧凑。
11
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B0C0D01H01 B0BCC0DD0LH0
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
表示程序结构和程序功能
美国国家标准化协会ANSI(American National
Standard Institute)设定了一些常用的流程图符号如图所示:
开始
起止框

流程线
输入输出框 判断框
处理框
连接点 图:常用流程图符号
Y
?
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Part 5 汇编语言程序设计 2.未初始化段 是为变量在数据存储器中保留空间的。它们在目标文件中 没有实际内容,只是保留出空间,在运行程序时再利用这 些空间去建立和存储变量。未初始化段一般应建立在片内 或片外RAM 数据空间中。 • • 由这些段定义的空间仅作为临时存储空间,在程序运 行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由汇编器伪 指令.bss和.usect产生。.
Part 5 汇编语言程序设计
本章结合C54x的软件开发过程,介绍DSP所 采用的COFF目标文件格式、结构和规范。介 绍汇编语言指令的重要组成部分:伪指令和 宏指令。讨论建立汇编语言程序并产生可执 行文件的设计要求。指出汇编程序设计中的 一些关键问题,并通过实例介绍设计的方法 和技巧。
Part 5 汇编语言程序设计
Part 5 汇编语言程序设计 • 定义未初始化段的伪指令
(2) .usect伪指令
用于为指定的命名段保留若干个空间。 格式: 标号 .usect “段名”,字数[,[块标记][,定位标记]] 建立一个自定义段但是没有初始化的段,在自定义的 段中保留空间。 每调用一次.usect伪指令,汇编器在指定的命名段保留 更多的空间。
Part 5 汇编语言程序设计 • 定义已初始化段的伪指令 .text .data .sect [段起点] [段起点] “段名”[,段起点]
段起点——是任选项。 若选用,它为段程序计数器SPC定义一个起始值。
若默认,则SPC从0开始。
Part 5 汇编语言程序设计 • 定义未初始化段的伪指令 (1) .bss伪指令 用于在bss段中保留若干个空间。 格式:.bss 符号,字数[,[块标记][,定位标记]] 符号——对应于保留的存储空间第一个字的变量名称。 字数——表示在bss段或标有名字的段中保留若干个存 储单元。 每调用一次.bss伪指令,汇编器在相应的段保留更多的 空间。
目录:
• 5.1 C54x的软件开发过程
• 5.2 公共目标文件格式COFF
• 5.3 汇编器的伪指令 • 5.4 汇编指令系统 • 5.5 C54x汇编语言的有关知识 • 5.6 汇编语言程序设计
Part 5 汇编语言程序设计
• 5.1 C54x的软件开发过程
提供2种编程语言:汇编语言
C/C++语言 对于完成一般功能的代码,这两种语言都可使用,但 对于一些运算量很大的关键代码,最好采用汇编语言来完 成,以提高程序的运算效率。 C54x的软件开发过程可以分为文本编辑、编译、汇编 和连接这样四个基本步骤,如图5-1所示。
Part 5 汇编语言程序设计
2. 连接器的两个主要伪指令
MEMORY伪指令——用来定义目标系统的存储器配 置空间,包括对存储器各部分命名,以及规定它们的起始 地址和长度。 SECTIONS伪指令——用来指定链接器将输入段组 合成输出段方式,以及输出段在存储器中的位置,也可用 于指定子段。 若未使用伪指令,则连接器将使用目标处理器默认的 方法将段放入存储空间。
Part 5 汇编语言程序设计 目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss .data .text
Data RAM Program RAM
Program RAM
Part 5 汇编语言程序设计 3. 段定义伪指令 汇编器对段的处理是通过段伪指令来区别各个段的,并将 段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分: ● .bss ● .usect ● .text ● .data ● .sect ——定义未初始化段 ——定义未初始化段 ——定义已初始化段 ——定义已初始化段 ——定义已初始化段
Part 5 汇编语言程序设计
定位: 连接器将.text、.data、.bss等段存放 到硬件系统的存储空间中去,这就是定位。 连接器有两种定位的方法:


缺省定位,是指连接器对各段的定位是固定不变 的方式;
存储器映像定位,在连接前,使用连接器的伪指 令MEMORY和SECTIONS等编写一个命令文件,定义出 存储区域,然后,由连接器去进行存储区的映像定 位。
Part 5 汇编语言程序设计
宏源文件
C源文件
存档器
汇编 源文件
C编译器
宏库
汇编器
汇编 源文件
存档器
COFF 目标文件
建库工具
目标 文件库
链接器
运行时 支持库 调试工具
可执行的 COFF文件 HEX代码 转换工具 EPROM 编程器 绝对地址 列表器 交叉引用 列表器
TMS320C54x
Part 5 汇编语言程序设计
5.2 公共目标文件格式COFF
汇编器和链接器生成的目标文件,是一个可以由 C54x器件执行的文件。这些目标文件的格式称之 为公共目标文件格式(COFF)。
采用这种文件格式的优点是: 将指令和数据按照段的概念进行组织和存储,这使得 程序的可读性大大增强,更容易编写程序,更便于进行程 序的移植,更利于进行模块化的程序设计,为管理代码段 及系统存储器提供了灵活的方法和手段。
Part 5 汇编语言程序设计
5.2.3 连接器对段的处理 链接器是开发’C55x器件必不可少的开发工具之 一,连接器对段的处理主要完成两个功能:


把1个或多个目标文件(文件名.obj)连接起来, 产生可执行的COFF输出文件(文件名.out)。
按照目标系统的需要配置存储器,并将符号和 段重新定位,确定输出文件的存储器地址。

Part 5 汇编语言程序设计
2. 连接器的两个主要伪指令
1)MEMORY命令 MEMORY用来定义目标系统的存储器。它的一般语法 如下: MEMORY { PAGE 0 : name 1 [(attr)] : origin = constant , length = constant; PAGE n : name n [(attr)] : origin = constant , length = constant; }
Part 5 汇编语言程序设计
COFF文件有3种类型:COFF0、COFF1、COFF2 每种类型的COFF文件,其标题格式都有所不同, 但数据部分是相同的。 链接器能够读/写所有类型的COFF文件,默认时链 接器生成的是COFF2文件,采用-vn链接选项可以选 择不同类型的COFF文件。
Part 5 汇编语言程序设计
u_vars1
u_vars1 u_vars2
File2.obj
.text2 .data2 .bss2 table_2 (初始化的命名段) u_vars2 (未初始化的命名段) FFT (初始化的命名段)
没有使用
没有使用
没有配置
Part 5 汇编语言程序设计
5.3 汇编器的伪指令
• 汇编器的伪指令仅在汇编的过程中起作用,它们为汇编器 提供一些控制和管理的信息及功能,但并不产生目标代码。 汇编器伪指令可完成以下工作:
Part 5 汇编语言程序设计
• 例5-1:段定义程序举例。
.text .word 1,2,3,4,5,6,7,8 .data .word 9,10,11,12 .word 13,14 .word 15,16 .sect “var1” .word 17,18 .bss x1,19 y1 .usect “var2”,40
5.2.1分段结构
所谓“段”就是在存储器映像中占据连续空间的一段独立 的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
COFF目标文件的段又可分为两大基本类型:已初始化段和 未初始化段。
Part 5 汇编语言程序设计
3. 缺省定位(默认定位)
链接器可对多个目标文件进行链接。若链接文件 中不使用MEMORY和SECTIONS命令,则为默认方式。 若采用默认链接,链接器将对多个目标文件中的 各个段进行组合,形成各自的对应段,并将各个段配 置到所指定的存储器中,形成可执行的目标模块。 在默认的方式下,链接器将从存储器的0080h开 始,对组合后的各段进行存储器配置。
Part 5 汇编语言程序设计
2. 连接器的两个主要伪指令
2)SECTIONS命令 SECTIONS用来告诉连接器怎样组合输入段以及在存 储器的何处存放输出段。在MEMORY指定了一种存储模 式后,就应使用SECTIONS去定位。 SECTIONS的一般语法如下: SECTIONS { name : [property, property, property,...] name : [property, property, property,...] name : [property, property, property,...] }
;为.bss段保留19个字单元空间。 ;为var2段保留40个单元空间。
Part 5 汇编语言程序设计
• 例5-1:段定义程序举例。 上列程序建立了5个段,情况如下: .text段:8个16位字1~8。 .data段:8个16位字9~16。


Var1段:2个16位字17,18。
.bss段:保留19个字的连续空间,第一个单 元的标号是x1。 Var2段:保留40个字的连续空间,第一个单 元的标号是y1。
Part 5 汇编语言程序设计 1.已初始化段
包含程序代码、常数表格和数据。每个段都可以独立的 进行重定位,且可访问在其它段中定义的符号。已初始化 段的值是不可修改的,因而一般将它们建立在程序存储器 中。
主要有: .text段——已初始化段;
.data段——已初始化段;
.sect段——已初始化段,由汇编器伪指令建立的自定 义段。
相关文档
最新文档