第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) 常量:是指令在中出现的哪些固定值, 可以分为数值常数和字符串常数两类。

第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

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

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

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

;段分配
START:MOV AX,DATA MOV DS,AX MOV AL,BUF1 ADD AL,BUF2 MOV SUM,AL MOV AH,4CH INT 21H
CODE ENDS END START
;填装数据段寄存器DS ;取第一个加数 ;和第二个加数相加
代 码 段
;返回DOS状态 ;CODE段结束 ;整个源程序结束
第5章 汇编语言程序设计
5.1 汇编语言程序格式 5.2 常用伪指令 5.3 汇编语言的编写 5.4 DOS功能调用 5.5 汇编语言设计
最新课件
教学重点
本章介绍程序结构、伪指令、DOS功能调用。 重点:汇编语言程序的基本结构;
伪指令及其使用方法; DOS功能调用; 基本的汇编语言程序设计方法。 难点:DOS功能调用的应用 汇编语言程序的设计
算术运算符
运 算
逻辑运算符

及 关系运算符

达 式
分析运算符
综合运算符
+、—、*、/、MOD
与数学运算符的意义相同。
A取N模D是、取OR余、数N。OT、XOR E例运Q:算、82结NEM果、O是LD一T、1个6G常;T数、结.L果E、为G2 E 两个2表0H达M式O比D较7时; ,结表果达为式4表示 方法/性质要相同 关时SSEI系Z,GE成为、、立全OT,YF0PF结SE果ET为、全LE1;NG不T成H、立 例把T规等偏H如存定价移IS:储存于地、指单储址MP令元OT单RV地M元OB址的XV分,性B解0X质;,为3段2地EQ址4和5
作用:由编程者按照一定的规则来定义的一种较“宏 大”的指令,包括多条指令或伪指令 。
最新课件
例题1
SEGMENT
ENDS

汇编语言课程课件-第五章

汇编语言课程课件-第五章

MOV reg/mem,imm
例题5-1
MOV reg/me;m/立se即g,数re送g寄存器例或题主5-存2
MOV;r寄eg存/s器eg送,m(em段)寄存器例或题主5存-3
MOV reg/mem;,s主eg存送(段)例寄题存5器-5 ;段寄存器送寄存器或主存
交换指令XCHG(exchange)
; 字节数组访问 mov al,arrayB mov al,[arrayB+1] mov al,[arrayB+2] ; 字数组访问 mov ax,arrayW mov ax,[arrayW+2]
; AL = 10h ; AL = 20h ; AL = 30h
; AX = 100h ; AX = 200h
在保护模式下,LDS指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
寄存器。
实模式下,LES指令将主 存 中 mem 指 定 的 字 送 至 r16,并将mem的下一字 送DS寄存器。
在保护模式下,LES指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
5.2.1 加法指令
执行双字,字或字节的加法运算。
ADD ADC INC
加法指令ADD
ADD指令将源与目的操作数相加,结 果送到目的操作数 ADD指令按状态标志的定义相应设置
例题5-12
ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem
ADD mem,imm/reg ;mem←mem+imm/reg
把两个地方的数据进行互换
XCHG reg,reg/mem ;reg reg/mem

汇编语言课件第05章

汇编语言课件第05章

11/37
第五章 汇编语言顺序程序设计
乘法指令只影响CF和 , 乘法指令只影响 和OF,其它条件码无定义 。 1)MUL: 若乘积的高一半为 ,则CF=OF=0, ) : 若乘积的高一半为0 , 否则, 否则,CF=OF=1。 。 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 则,CF=OF=0,否则,CF=OF=1。 ,否则, 。
13/37
第五章 汇编语言顺序程序设计
一、算术指令(5类) 算术指令( 类 1. 加法指令(ADD,ADC,INC) 加法指令( , , ) 2. 减法指令(SUB,SBB,DEC,NEG ,CMP ) 减法指令( , , , 3.乘法指令 MUL,IMUL) 3.乘法指令(MUL,IMUL) 乘法指令( 4.除法指令(DIV,IDIV) 除法指令( 除法指令 , ) 5.十进制调整指令(DAA,DAS等) 十进制调整指令( 十进制调整指令 , 等
12/37
第五章 汇编语言顺序程序设计
如何区分MUL和IMUL 和 如何区分 (1111,1111B)×(1111,1111B) , ) , ) 看作无数号数,上式为: 看作无数号数,上式为:FFH×FFH=FFE01H × 看作带符号数,上式为:(-1) 看作带符号数,上式为:( )×(-1)=1 :( ) 选用MUL或IMUL应根据实际情况而定。 或 应根据实际情况而定。 选用 应根据实际情况而定
21/37
第五章 汇编语言顺序程序设计
本章内容分三节: 本章内容分三节: 5.1 算术指令 5.2 逻辑指令 5.3 顺序程序举例
22/37
第五章 汇编语言顺序程序设计
二、逻辑指令 逻辑运算指令( 1. 逻辑运算指令(5个) 移位指令( 2. 移位指令(8个)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例5.4】 定点点积的C代码内循环的线性汇编指令。 LDH .D1 *A4++,A2 ; 从存储器加载ai LDH .D1 *A3++,A5 ; 从存储器加载bi MPY .M1 A2,A5,A6 ; ai * bi ADD .L1 A6,A7,A7 ; sum += (ai * bi) SUB .S1 A1,1,A1 ; 递减循环计数器 [A1] B .S2 LOOP ; 跳转到循环
5.2.1 点积的C代码
b)浮点点积的C代码 float dotp(float a[], float b[]) { int i; float sum; sum = 0; for(i=0; i<100; i++) sum += a[i] * b[i]; return(sum); }
5. *A3++,A5 ; ai * bi ; sum += (ai * bi) ; 递减循 LOOP
; ;
;
5.2.3 画相关性图
1. 定点点积 图5-1为例5.4中定点点积汇编指令的相关性图以及相应的寄存器分配。
5.2.3 画相关性图
2. 浮点点积 图5-2给出了例5.5浮点点积的相关图以及相应的寄存器分配框图。
5.2.4 非并行汇编代码与并行汇编代码
用同一个功能单元分配两个LDH指令,这样会降低循环的性能,因此,重新安 排功能单元以使代码并行执行,其相关性图如图5-3所示,并行汇编代码见例5.7。
5.2.4 非并行汇编代码与并行汇编代码
【例5.7】定点点积的并行汇编代码。 MVK .S1 100, A1 ;建立循环计数器 || ZERO .L1 A7 ; 累加器清零 LOOP: LDH .D1 *A4++,A2 ; 从存储器加载ai || LDH .D2 *B4++,B2 ; 从存储器加载bi SUB .S1 A1,1,A1 ; 循环计数器递减 [A1] B .S2 LOOP ; 跳转到loop NOP 2 ; 为LDH延迟时隙 MPY .M1X A2,B2,A6 ; ai * bi NOP ; 为MPY延迟时隙 ADD .L1 A6,A7,A7 ; sum += (ai * bi) ; 此处发生跳转e
; ai * bi
; sum += (ai * bi)
; 循环计数器递减 ; 跳转到loop
5.2.4 非并行汇编代码与并行汇编代码
分配两个LDW指令用了同一个功能单元,从而降低了循环的性能,因此,重新 安排功能单元以使代码并行执行,其相关性图如图5-4所示,并行汇编代码如例5.9。
5.2.4 非并行汇编代码与并行汇编代码
5.2.2 C代码转换为线性汇编
【例5.5】 浮点点积的C代码内循环的线性汇编指令 LDW .D1 从存储器加载ai LDW .D2 从存储器加载bi MPYSP† .M1 A2,A5,A6 ADDSP† .L1 A6,A7,A7 SUB .S1 A1,1,A1 环计数器 [A1] B .S2 跳转到循环
【例5.9】 浮点点积的并行汇编代码 MVK .S1 100, A1 || ZERO .L1 A7 LOOP: LDW .D1 *A4++,A2 || LDW .D2 *B4++,B2 SUB .S1 A1,1,A1 NOP 2 [A1] B .S2 LOOP MPYSP .M1X A2,B2,A6 NOP 3 ADDSP .L1 A6,A7,A7 ; 建立循环计数器 ; 累加器清零 ; 从存储体中加载ai ; 从存储体中加载bi ; 循环计数器递减 ; LDW 延迟时隙 ; 跳转到loop ; ai * bi ; MPYSP延迟时隙 ; sum += (ai * bi) ; 此处发生跳转
5.2.4 非并行汇编代码与并行汇编代码
1. 定点点积 【例5.6】 定点点积的非并行汇编代码。 MVK .S1 100, A1 ; 建立循环计数器 ZERO .L1 A7 ; 累加器清零 LOOP: LDH .D1 *A4++,A2 ; 从存储器加载ai LDH .D1 *A3++,A5 ; 从存储器加载bi NOP 4 ; 为LDH延迟一个时隙 MPY .M1 A2,A5,A6 ; ai * bi NOP ; 为MPY延迟一个时隙 ADD .L1 A6,A7,A7 ; sum += (ai * bi) SUB .S1 A1,1,A1 ;循环计数器递减 [A1] B .S2 LOOP ; 跳转到LOOP处 NOP 5 ; 为LOOP延迟时隙 ; 此处发生跳转
第5章 线性汇编优化代码
5.1 汇编优化器选项与伪指令 5.2 编写并行代码 5.3 软件流水 5.4 多周期循环的模迭代 5.5 循环传递路径 5.6 循环中的IF-Then-Else语句
5.7 循环展开 5.8 生命太长问题 5.9 消除冗余取数 5.10 存储体 5.11 软件流水外循环 5.12 同内循环一起条件执行外循环 5.13 通用目标文件格式(COFF)
5.2.4 非并行汇编代码与并行汇编代码
【例5.8】 浮点点积的非并行汇编代码 MVK .S1 100, A1 ZERO .L1 A7 清零 LOOP: LDW .D1 *A4++,A2 LDW .D1 *A3++,A5 NOP 4 ; 为LDW延迟时隙 MPYSP .M1 A2,A5,A6 NOP 3 ; 为MPYSP延迟时隙 ADDSP .L1 A6,A7,A7 NOP 3 ; 为ADDSP延迟时隙 SUB .S1 A1,1,A1 [A1] B .S2 LOOP NOP 5 ; 建立循环计数器 ; 累加器 ; 从存储器加载ai ; 从存储器加载bi
5.1 汇编优化器选项与伪指令
(1)-on选项 (2) -mt选项和no_mdep伪指令 (3) .mdep伪指令 (4) .mptr伪指令
(5) .trip伪指令
5.2 编写并行代码
5.2.1 点积的C代码 a)定点点积的C代码 int dotp(short a[], short b[]) { int sum, i; sum = 0; for(i=0; i<100; i++) sum += a[i] * b[i]; return(sum); }
相关文档
最新文档