第5章_汇编程序举例2
合集下载
第五章 DSP的汇编指令..
![第五章 DSP的汇编指令..](https://img.taocdn.com/s3/m/d1ee98e4bb4cf7ec4afed0f8.png)
第五章 TMS320C55x系列DSP的汇编指令
(2) 用户自定义的双指令的并行
这两条指令的并行是通过用户或C编译器定义的。两条指令 同时执行两个操作,用并行符“||”区分并行执行的两条指令。 例:
MPYM *AR1+, *CDP, AC1 ;D单元的一个MAC来完成
||XOR AR2,T1
;A单元的ALU来完成
第五章 TMS320C55x系列DSP的汇编指令
1、高速数字信号处理中常采用汇编语言编程。 2、汇编语言中的两种指令集 (1) 助记符指令集:有助于记忆的符号来表示指令。 (2) 代数指令集:类似于代数表达式,运算关系清楚明了。 注意:DSP的软件开发工具只支持单一的指令形式,不支持助记
符指令和代数指令的混合形式。 3、术语、符号和缩写见P93的表5-1 4、运算符见表5-2
令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
说明: NO:不能并行执行 3:指令的长度为3字节 1:周期为1 X:在X(执行)流水线阶段处理
D – ALU:在D单元ALU执行。 执行结果:AC0=(*AR3)+CARRY+AC1 状态位: Affected by CARRY,C54CM,M40等
第5章 指令与指令系统和汇编语言程序设计(2)
![第5章 指令与指令系统和汇编语言程序设计(2)](https://img.taocdn.com/s3/m/88ff5c112f60ddccda38a0e5.png)
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果,6个大写的英文字母 已经被修改为小写字母: 0061 0062 0063 0064 0065 0066
汇编语言程序设计
1 将寄存器R2和R3的内容相加,结果存入R0。 2 将寄存器R2和R3的内容相加,如果有进位,寄存器R0的内 容置1,否则置0 3 若R1的内容是负数则置R0为-1,否则置0(提示:用TEST) 4 检测R3的是奇数,R0的内容置为1,否则置为0。(提示: 用移位检测C的方法来测量一位) 5 将内存中1000H起始的10个单元的内容取出加2送入原地址。 6 已知内存中1000H起始的10个单元中的数是ASC码,将其取 出送显示。 7 将键盘录入的数存到内存1000H单元中。 8 将键盘录入的10个数存到内存1000H-1009H。
有寄存器寻址,寄存器间接寻址等7种。
从表5.1中可以看出, (A组) INC DR 单操作数(DR的内容加1) (B组) LDRR DR,[SR] 双操作数 (DR [SR])
(4)从指令的功能区分
有运算、读写内存类指令,输入输出指令,转移 指令,子程序调用指令,置进位标志指令等。
从表5.1中可以看出, (A组) ADD DR ,SR 加运算 (B组) LDRR DR,[SR] 读写内存
41 42 43 44 45 46
A 2080
MVRD R3, 0006 ;指定被读数据的个数
MVRD R2, 20F0 ;指定被读、写数据内存区首地址
(2084) LDRR R0, [R2]
;读内存中的一个字符到R0寄存器
CALA 2100 ;调用子程序(入口地址为2100),完成显示、
汇编语言程序设计.
![汇编语言程序设计.](https://img.taocdn.com/s3/m/fc4f38f989eb172ded63b7a1.png)
标号有三种属性:段、偏移量和类型。 ① 标号的段属性是定义标号在程序段的段地址,当程序中引 用一个标号时,该标号的段值应在CS寄存器中。 ② 标号的偏移量属性表示标号所在段的起始地址到定义该标 号的地址之间的字节数。偏移量是一个16位无符号数。 ③ 标号的类型属性有两种:NEAR和FAR。前一种标号可以 在段内被引用;后一种标号可以在其它段被引用。如果定义一 个标号时后跟冒号,则汇编程序确认其类型为NEAR。
很多情况下伪指令语句中的名字是变量名,变量名代表存储 器中一个数据区的名字,例如例5.1中的DATA1、DATA2就是变 量名。
第5章 汇编语言程序设计
变量也有三种属性:段、偏移量和类型。 ① 变量的段属性是变量所代表的数据区所在段的段地址。由
于数据区一般在存储器的数据段中,因此变量的段地址常常在 DS和ES寄存器中。
第5章 汇编语言程序设计
1) 名字 汇编语言语句的第一个组成部分是名字(Name)。在指令
语句中,这个名字是一个标号。指令语句中的标号实质上是指 令的符号地址。并非每条指令语句必须有标号,但如果一条指 令前面有一标号,则程序中其它地方就可以引用这个标号。在 例5.1中,START、LOOPER就是标号。标号后面有一个冒号。
3.数据定义伪指令 数据定义伪指令的一般格式为: [变量名] 伪操作符 操作数[,操作数…] ⑴ DB 定义变量的类型为BYTE,给变量分配字节 或字节串操作数。
第5章 汇编语言程序设计
⑵ DW 定义变量的类型为WORD,给变量分配 字操作数。
⑶ DD 定义变量的类型为DWORD,给变量分 配双字操作数。
⒈ 方式伪指令 ⑴ .8086。汇编程序将在8086/8088方式下操作。 ⑵ .386。汇编程序将在80386方式下操作。 2. 符号定义伪指令 ⑴ EQU(赋值伪指令)
很多情况下伪指令语句中的名字是变量名,变量名代表存储 器中一个数据区的名字,例如例5.1中的DATA1、DATA2就是变 量名。
第5章 汇编语言程序设计
变量也有三种属性:段、偏移量和类型。 ① 变量的段属性是变量所代表的数据区所在段的段地址。由
于数据区一般在存储器的数据段中,因此变量的段地址常常在 DS和ES寄存器中。
第5章 汇编语言程序设计
1) 名字 汇编语言语句的第一个组成部分是名字(Name)。在指令
语句中,这个名字是一个标号。指令语句中的标号实质上是指 令的符号地址。并非每条指令语句必须有标号,但如果一条指 令前面有一标号,则程序中其它地方就可以引用这个标号。在 例5.1中,START、LOOPER就是标号。标号后面有一个冒号。
3.数据定义伪指令 数据定义伪指令的一般格式为: [变量名] 伪操作符 操作数[,操作数…] ⑴ DB 定义变量的类型为BYTE,给变量分配字节 或字节串操作数。
第5章 汇编语言程序设计
⑵ DW 定义变量的类型为WORD,给变量分配 字操作数。
⑶ DD 定义变量的类型为DWORD,给变量分 配双字操作数。
⒈ 方式伪指令 ⑴ .8086。汇编程序将在8086/8088方式下操作。 ⑵ .386。汇编程序将在80386方式下操作。 2. 符号定义伪指令 ⑴ EQU(赋值伪指令)
第5章TMS320C54x的汇编语言程序设计基础资料
![第5章TMS320C54x的汇编语言程序设计基础资料](https://img.taocdn.com/s3/m/a7564bda25c52cc58bd6beda.png)
.text 段(文本段),通常包含可执行代码; .data 段(数据段),通常包含初始化数据; .bss 段(保留空间段),通常为未初始化变量保留存储空间。
2020年10月9日
DSP原理及应用
14
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.1 COFF文件的基本单元
1. 段(sections)
5.1 汇编语言程序的编辑、汇编、链接过程
3. 链接
所谓链接,就是利用’C54x的链接器LNK500 ,根据链接器命令文件(.cmd)对已汇编过的一个或 多个目标文件(.obj)进行链接,生成输出文件 (.out)和存储器映像文件(.map) 。
常用的汇编器命令:
lnk500 %1.cmd
l%n1k.5c0m0d: 调 链用 接链 命接 令器文命件令名,该文件须指明目标文件、 输入文件、输出文件、链接选项和存储器配置要求等。
2020年10月9日
DSP原理及应用
20
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.2 汇编器对段的处理
1. 未初始化段 未初始化段就是在’C54x存储器中的保留空间
,通常将它们定位在RAM区。 在目标文件中,这些段中没有确切的内容。 由这些段定义的空间仅作为临时存储空间,在
程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由
链接器的任务:即分配存储单元,将目标文件中的段重 新定位到目标系统的存储器中,这一过程称为定位或分配。
2020年10月9日
DSP原理及应用
18
第5章 TMS320C54x的汇编语言程序设计 基础
3. 段与目标存储器的对应关系
目标文件中的段与目标存储器之间的关系
2020年10月9日
DSP原理及应用
14
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.1 COFF文件的基本单元
1. 段(sections)
5.1 汇编语言程序的编辑、汇编、链接过程
3. 链接
所谓链接,就是利用’C54x的链接器LNK500 ,根据链接器命令文件(.cmd)对已汇编过的一个或 多个目标文件(.obj)进行链接,生成输出文件 (.out)和存储器映像文件(.map) 。
常用的汇编器命令:
lnk500 %1.cmd
l%n1k.5c0m0d: 调 链用 接链 命接 令器文命件令名,该文件须指明目标文件、 输入文件、输出文件、链接选项和存储器配置要求等。
2020年10月9日
DSP原理及应用
20
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.2 汇编器对段的处理
1. 未初始化段 未初始化段就是在’C54x存储器中的保留空间
,通常将它们定位在RAM区。 在目标文件中,这些段中没有确切的内容。 由这些段定义的空间仅作为临时存储空间,在
程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由
链接器的任务:即分配存储单元,将目标文件中的段重 新定位到目标系统的存储器中,这一过程称为定位或分配。
2020年10月9日
DSP原理及应用
18
第5章 TMS320C54x的汇编语言程序设计 基础
3. 段与目标存储器的对应关系
目标文件中的段与目标存储器之间的关系
第5章 汇编语言程序
![第5章 汇编语言程序](https://img.taocdn.com/s3/m/3601fd343968011ca3009132.png)
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个机器周期。
微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例
![微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例](https://img.taocdn.com/s3/m/870097d184254b35eefd340a.png)
/webnew/
第5章 运算程序设计及应用举例 章
5.1.4 除法指令 1.无符号数除法指令DIV (Unsigned Divide Instruction) 指令格式:DIV SRC (AX) (SRC) (AX)/(SRC)商、AH AH (AX) (AX)/ 功能:如果SRC是字节操作数,则把AX中的无符号数除以SRC,得到8位 的商送AL中,8位的余数送AH中,即:AL AL 8 AH AL (SRC)余数。 如果SRC是字操作数,则把DX和AX中的无符号数除以SRC,得到16位的 商送AX中,16位的余数送DX中,即:AX (DX,AX)/(SRC)余数。 指令对标志位的影响无定义。 (DX,AX)/(SRC)商、DX
IMUL指令除了运算对象是有符号数之外,其它都与MUL指令一样,但计算结果 不同。如果乘积的高半部分有符号扩展,则CF=OF=0,否则CF=OF=1。 例5.8 有符号数0B4H与11H相乘。 MOV AL,0B4H MOV BL,11H IMUL BL ;(AL)=0B4H=-76D ;(BL)=11H=17D ;AX)=(AL)×(BL)=(-76)×17=-1292D=0FAF4H ;CF=OF=1
/webnew/
第5章 运算程序设计及应用举例 章
例5.4 DATA SUB1 SUB2 SUB3 DATA 双精度数带借位减法运算。 SEGMENT DW 7788H,5566H DW 3344H,1122H DW 0,0 ENDS … MOV AX,SUB1 SUB AX,SUB2 MOV SUB3,AX MOV AX,SUB1+2 SBB AX,SUB2+2 MOV SUB3+2,AX …
/webnew/
第5章 运算程序设计及应用举例 章
微机原理第五章 程序设计-dsh
![微机原理第五章 程序设计-dsh](https://img.taocdn.com/s3/m/459fea2dccbff121dd368347.png)
INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2
王爽《汇编语言》 第5章 [BX]和LOOP指令
![王爽《汇编语言》 第5章 [BX]和LOOP指令](https://img.taocdn.com/s3/m/5899f8bdc77da26925c5b064.png)
Mov [bx],al
(21006H)=BEH
CS:CODE : SEGMENT 循环控制指令LOOP 二、循环控制指令 MOV AX,2 , 作计数器控制程序的循环。 用CX作计数器控制程序的循环。 作计数器控制程序的循环 MOV CX,11 , 格式: 格式:LOOP 标号 ;CX≠0循环 循环 S: ADD AX,AX : , 功能: )-1; 功能:当CX≠0时,( )=(CX)- ;转移到标号处 时,(CX) ( )- LOOP S 循环执行。 利用 循环执行。 利用LOOP指令编程计算 12 指令编程计算2 指令编程计算 MOV AX,4C00H , INT 21H 2:编程,用加法计算123×236,结果存在AX中 例2:编程,用加法计算123×236,结果存在AX中。 CODE ENDS END ASSUME CODE CX和LOOP指令配合实现循环功能的三个要点: 和 指令配合实现循环功能的三个要点: 指令配合实现循环功能的三个要点 1、在CX中存放循环次数 、 中存放循环次数 2、LOOP指令中的标号所标识地址要在前面 、 指令中的标号所标识地址要在前面 3、要循环执行的程序段写在标号和LOOP指令之间。 、要循环执行的程序段写在标号和 指令之间。 指令之间
七、一段安全的空间
汇编语言程序直接面向机器, 汇编语言程序直接面向机器,如果我们要向 内存空间写入数据时, 内存空间写入数据时,要保证所写入的内存中没 有重要的数据,否则会影响系统的正常运行, 有重要的数据,否则会影响系统的正常运行,在 一般的PC机中都不使用 机中都不使用0: 一般的 机中都不使用 :200—0:300这段内存 : 这段内存 空间,所以我们可以放心使用这段安全的空间。 空间,所以我们可以放心使用这段安全的空间。
一、[BX]
(21006H)=BEH
CS:CODE : SEGMENT 循环控制指令LOOP 二、循环控制指令 MOV AX,2 , 作计数器控制程序的循环。 用CX作计数器控制程序的循环。 作计数器控制程序的循环 MOV CX,11 , 格式: 格式:LOOP 标号 ;CX≠0循环 循环 S: ADD AX,AX : , 功能: )-1; 功能:当CX≠0时,( )=(CX)- ;转移到标号处 时,(CX) ( )- LOOP S 循环执行。 利用 循环执行。 利用LOOP指令编程计算 12 指令编程计算2 指令编程计算 MOV AX,4C00H , INT 21H 2:编程,用加法计算123×236,结果存在AX中 例2:编程,用加法计算123×236,结果存在AX中。 CODE ENDS END ASSUME CODE CX和LOOP指令配合实现循环功能的三个要点: 和 指令配合实现循环功能的三个要点: 指令配合实现循环功能的三个要点 1、在CX中存放循环次数 、 中存放循环次数 2、LOOP指令中的标号所标识地址要在前面 、 指令中的标号所标识地址要在前面 3、要循环执行的程序段写在标号和LOOP指令之间。 、要循环执行的程序段写在标号和 指令之间。 指令之间
七、一段安全的空间
汇编语言程序直接面向机器, 汇编语言程序直接面向机器,如果我们要向 内存空间写入数据时, 内存空间写入数据时,要保证所写入的内存中没 有重要的数据,否则会影响系统的正常运行, 有重要的数据,否则会影响系统的正常运行,在 一般的PC机中都不使用 机中都不使用0: 一般的 机中都不使用 :200—0:300这段内存 : 这段内存 空间,所以我们可以放心使用这段安全的空间。 空间,所以我们可以放心使用这段安全的空间。
一、[BX]
第五章_汇编语言程序设计基础
![第五章_汇编语言程序设计基础](https://img.taocdn.com/s3/m/b838842d4b35eefdc8d333f4.png)
3
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。
汇编语言程序设计
![汇编语言程序设计](https://img.taocdn.com/s3/m/4303d4cfccbff121dc368395.png)
●标号通常由字母数字串组成,但第一个字母必须为字母。
标号有三种属性:
1. 段属性(SEGMENT): ●表示标号所在段的段基址。
2. 偏移属性(OFFSET): ●表示标号的偏移地址,即标号地址在逻辑段中距段的起始点的字节数。
3. 距离属性(或类型属性 TYPE): ●表示标号作为段内或段间的转移属性。
变量名、标号和一些专用符号等。
●注释字段 这是一个任选字段,它必须以分号开始,和指令语句的注释功能一样。
精选课件
5.2.2 常用伪指令
1. 符号定义伪指令(赋值语句)
(1)等值伪指令 格式:符号名 EQU 表达式 功能:将表达式的值赋给符号名。
[例5-11]
ALFA COUNT
EQU EQU
100 ALFA
精选课件
; CONT =60 ; CONT =7 ; CONT =1 ; AL = 84H
逻辑运算符
●包括按位操作的与(AND)、或(OR)、异或(XOR)、和 非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。
注意: ● AND、OR、XOR和NOT也是指令助记符。
[例5-2] AND DX, PORT AND OFEH
精选课件
分析操作符(数值返回运算符)
(1)取地址的偏移量
(2)取段基址
格式: OFFSET 变量名或标号
功能:取变量名或标号所在段的 段内偏移量。
格式: SEG 变量名或标号
功能:取变量名或标号所在段 的段地址。
(3) 求变量名或标号的类型值
格式:TYPE 变量名或标号 功能: 返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量 的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距离 属性;返回的数值与性的关系表4-1。
标号有三种属性:
1. 段属性(SEGMENT): ●表示标号所在段的段基址。
2. 偏移属性(OFFSET): ●表示标号的偏移地址,即标号地址在逻辑段中距段的起始点的字节数。
3. 距离属性(或类型属性 TYPE): ●表示标号作为段内或段间的转移属性。
变量名、标号和一些专用符号等。
●注释字段 这是一个任选字段,它必须以分号开始,和指令语句的注释功能一样。
精选课件
5.2.2 常用伪指令
1. 符号定义伪指令(赋值语句)
(1)等值伪指令 格式:符号名 EQU 表达式 功能:将表达式的值赋给符号名。
[例5-11]
ALFA COUNT
EQU EQU
100 ALFA
精选课件
; CONT =60 ; CONT =7 ; CONT =1 ; AL = 84H
逻辑运算符
●包括按位操作的与(AND)、或(OR)、异或(XOR)、和 非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。
注意: ● AND、OR、XOR和NOT也是指令助记符。
[例5-2] AND DX, PORT AND OFEH
精选课件
分析操作符(数值返回运算符)
(1)取地址的偏移量
(2)取段基址
格式: OFFSET 变量名或标号
功能:取变量名或标号所在段的 段内偏移量。
格式: SEG 变量名或标号
功能:取变量名或标号所在段 的段地址。
(3) 求变量名或标号的类型值
格式:TYPE 变量名或标号 功能: 返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量 的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距离 属性;返回的数值与性的关系表4-1。
汇编语言的基本语法
![汇编语言的基本语法](https://img.taocdn.com/s3/m/f92bfbbe998fcc22bcd10d58.png)
再例如,对如下的定义,
W1 DW 1, 2, 3, 4, 5, 6, 7 B1 DB 10, 20, 30, 40, 50
N1 EQU B1-W1
N2 EQU $-W1
B2 DB 0 则N1=14,它是从W1开始到B1前为止的一组变量的字节
数; N2=19,它是从W1开始到B2($代表的地址)前为止的一组
PROC NEAR(或FAR) ____________
____________
. . . ____________ RET ENDP
(6) 偏移地址计数器$
汇编程序在对源程序进行汇编的过程中,用偏移地址计数 器$来保存当前正在汇编的指令的偏移地址或伪指令语句 中变量的偏移地址。
用户可将$用于自己编写的源程序中。
例: A DB 20H,30H ; 注释
指令语句是可执行语句,其格式为:
[名字:]指令操作助记符[操作数表达式1[,操作数表达式2]][;注释]
其中,指令操作助记符(指令名)是指令语句中不可缺少的 主体,其余部分(方括号中的内容)有时可省略。
名字只能是标号。 注释以分号开头,分号右边的内容将被汇编程序忽略。 例 L: ADD AX,BX ;注释
汇编后:
第一个$+4:$+4=(A+4)+4=(0074H+4)+4=007CH 第二个$+4:$+4=(A+10)+4=(0074H+0AH)+4=0082H
在指令中,$无论出现在指令的任何位置,都代表本条指 令第一个字节的偏移地址。例如,“JZ $+6”的转向地址 是该指令的首地址加上6,$+6还必须是另一条指令的首地 址。再如,在下述指令序列中,
《嵌入式系统基础教程》第09讲第5章ARM指令集特点寻址方式和指令
![《嵌入式系统基础教程》第09讲第5章ARM指令集特点寻址方式和指令](https://img.taocdn.com/s3/m/3d08db99d0f34693daef5ef7ba0d4a7303766c48.png)
标志
C=1,Z=0 C=0,Z=l
N=V N!=V Z=0,N=V Z=1,N!=V 任何 ARMv3之前
含义
无符号数大于 无符号数小于或等于 有符号数大于或等于 有符号数小于 有符号数大于 有符号数小于或等于 无条件执行(指令默认条件) 该指令从不执行
2008年6月28日
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
《嵌入式系统基础教程 》第09讲第5章ARM指 令集特点寻址方式和指
令
2023/5/9
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
第5章 ARM指令集和汇编语言程序
l 本章主要介绍以下内容:
l ARM指令集的基本特点 l 与Thumb指令集的区别 l 与x86处理器的区别 l ARM指令格式
l 举例:
l SUB R1,R1,R2 ;R1-R2→R1 l MOV PC,R0 ;PC←R0,程序跳转到指定地址 l LDR R0,[R1],-R2
;读取R1地址上的存储器单元内容并存入R0, ;且R1=R1-R2,后索引偏移 l AND R0,R5,R2 ;R2中存放的是第2操作数 ;该数据属于寄存器方式的第2操作数
运算指令能够访问存储器
2008年6月28日
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
ARM指令集的编码格式
l 参看ARM指令集编码格式PDF文件
2008年6月28日
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
ARM指令集的语法
l 一条典型的ARM指令语法如下所示:
寄存器寻址
l 操作数的值在寄存器中,指令中的地址码字段指 出的是寄存器编号,指令执行时直接取出寄存器 值来操作。寄存器寻址指令举例如下:
DSP第五章 DSP的汇编指令
![DSP第五章 DSP的汇编指令](https://img.taocdn.com/s3/m/bb6a5d83ec3a87c24028c468.png)
M40=0时,D单元按32位运算模式,因此累加器溢出、进位、符号扩
展和移位操作都以第31比特为准。
M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40
; Clear M40
BSET M40
; Set M40
第五章 TMS320C55x系列DSP的汇编指令
2、累加器溢出状态(ACOVx)
当AC0~AC3寄存器溢出时,目的累加器的溢出状态位ACOV0~3被置1。 以下情况会清零ACOVx位
复位; CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令; 通过BCLR指令清除; 溢出位检测受ST1_55中的M40位影响,即:
第五章 TMS320C55x系列DSP的汇编指令
(3)内置并行指令与用户自定义并行指令的混合形式 在不引起资源冲突的情况下,将隐含并行的指令按用户自定义 方式与另一条指令并行执行。例:
MPY *AR0, *CDP, AC0 ;隐含的或内置的并行指令 :: MPY *AR1, *CDP, AC1 ||MOV #5, AR1
பைடு நூலகம்
在实际编程时,只要指令满足这三条基本规则,即可写成并行
方式,然后进行编译。如果编译有错,则可参照书上详细规则进 行检测。
第五章 TMS320C55x系列DSP的汇编指令 5.4 TMS320C55x DSP的汇编指令
TMS320C55x DSP的汇编指令按操作分为以下6类 算术运算指令 比特操作指令 一条指令的属性包括: 语法(Syntax) 执行的操作 操作数 相关的状态位 是否有并行使能位 长度(Size) 执行周期(Cycles) 在流水线(Pipeline)上的执行阶段 在哪个功能单元执行(Executed) 是否可以重复执行等
展和移位操作都以第31比特为准。
M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40
; Clear M40
BSET M40
; Set M40
第五章 TMS320C55x系列DSP的汇编指令
2、累加器溢出状态(ACOVx)
当AC0~AC3寄存器溢出时,目的累加器的溢出状态位ACOV0~3被置1。 以下情况会清零ACOVx位
复位; CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令; 通过BCLR指令清除; 溢出位检测受ST1_55中的M40位影响,即:
第五章 TMS320C55x系列DSP的汇编指令
(3)内置并行指令与用户自定义并行指令的混合形式 在不引起资源冲突的情况下,将隐含并行的指令按用户自定义 方式与另一条指令并行执行。例:
MPY *AR0, *CDP, AC0 ;隐含的或内置的并行指令 :: MPY *AR1, *CDP, AC1 ||MOV #5, AR1
பைடு நூலகம்
在实际编程时,只要指令满足这三条基本规则,即可写成并行
方式,然后进行编译。如果编译有错,则可参照书上详细规则进 行检测。
第五章 TMS320C55x系列DSP的汇编指令 5.4 TMS320C55x DSP的汇编指令
TMS320C55x DSP的汇编指令按操作分为以下6类 算术运算指令 比特操作指令 一条指令的属性包括: 语法(Syntax) 执行的操作 操作数 相关的状态位 是否有并行使能位 长度(Size) 执行周期(Cycles) 在流水线(Pipeline)上的执行阶段 在哪个功能单元执行(Executed) 是否可以重复执行等
汇编语言第5章王爽版(子程序调用指令)
![汇编语言第5章王爽版(子程序调用指令)](https://img.taocdn.com/s3/m/186e73a56037ee06eff9aef8941ea76e58fa4a95.png)
二、主程序与过程的参数传递方式
例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。
DATA SEGMENT SUM DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL, 1 MOV BL, 2 CALL subprog mov ah,4cH int 21h CODE ENDS END START
5.2 子程序的定义、调用和返回(续)
子程序返回指令(RET)
RET [n] 功能:弹出CALL指令压入堆栈的返回地址 段内返回——偏移地址IP出栈 IP←SS:[SP], SP+2 段间返回——偏移地址IP和段地址CS出栈 IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
子程序的概念
子程序的现场保护与参数传递**
子程序的嵌套与递归调用
子程序的定义、调用和返回 **
子程序设计 *
宏汇编程序设计
教学基本内容
第5章 结构化程序设计
子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 过程(子程序):是指功能相对独立的一段程序。 主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。
Spr PROC PUSH BP MOV BP, SP MOV AX, [BP+6] MOV BX, [BP+4] ADD AL, BL OR AL, 30H MOV DL,AL MOV AH,2 INT 21H MOV SUM, AL POP BP RET Spr ENDP
例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。
DATA SEGMENT SUM DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL, 1 MOV BL, 2 CALL subprog mov ah,4cH int 21h CODE ENDS END START
5.2 子程序的定义、调用和返回(续)
子程序返回指令(RET)
RET [n] 功能:弹出CALL指令压入堆栈的返回地址 段内返回——偏移地址IP出栈 IP←SS:[SP], SP+2 段间返回——偏移地址IP和段地址CS出栈 IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
子程序的概念
子程序的现场保护与参数传递**
子程序的嵌套与递归调用
子程序的定义、调用和返回 **
子程序设计 *
宏汇编程序设计
教学基本内容
第5章 结构化程序设计
子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 过程(子程序):是指功能相对独立的一段程序。 主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。
Spr PROC PUSH BP MOV BP, SP MOV AX, [BP+6] MOV BX, [BP+4] ADD AL, BL OR AL, 30H MOV DL,AL MOV AH,2 INT 21H MOV SUM, AL POP BP RET Spr ENDP
第五六章 汇编语言程序
![第五六章 汇编语言程序](https://img.taocdn.com/s3/m/0c0ee11bfad6195f302ba605.png)
《微机接口技术》 13
数的表示
整数
默认为十进制,非默认基数的用字母后缀标明
B:二进制 Binary H:十六进制 Hexadecimal D:十进制 Decimal O或Q:八进制 Octal
• 示例:1011B,35D,6AH,17Q
以字母开头的十六进制数必须加0
• 示例:FEH→0FEH
《微机接口技术》
23
4. 指定段内的偏移地址
ORG说明符
格式:ORG 常数表达式 作用:指定当前可用的存储单元的偏移地址为 常数表达式的值
EVEN说明符
格式:EVEN
作用:将当前可用的存储单元的偏移地址调整 为最近的偶数值
《微机接口技术》
24
示例
ORG 1000H A DB 47H, 12H, 45H EVEN B DB 47H 说明: ① ORG指令将A的偏移地址部分指定为1000H ② 从A开始存放3个字节变量,占用地址1000H、 1001H和1002H ③ EVEN指令会将B的偏移地址部分从1003H调整为 偶数地址1004H
; 返回DOS
; 代码段结束 ; 模块结束
《微机接口技术》 11
汇编语言程序的组成
分段结构
DATA SEGMENT 按段进行组织,最多由4个 … ; 数据段语句 段组成(代码、数据、附加、 DATA ENDS
堆栈) STACK SEGMENT 每个段以“段名 SEGMENT” … ; 堆栈段语句 开始,以“段名 END”结束 STACK ENDS
《微机接口技术》 25
5. 过程定义
PROC说明符
格式:过程名 PROC 类型属性名 说明:从“过程名”代表的地址开始定义一个 过程;“类型属性名”可选择NEAR(近过程) 或FAR(远过程),默认为NEAR
数的表示
整数
默认为十进制,非默认基数的用字母后缀标明
B:二进制 Binary H:十六进制 Hexadecimal D:十进制 Decimal O或Q:八进制 Octal
• 示例:1011B,35D,6AH,17Q
以字母开头的十六进制数必须加0
• 示例:FEH→0FEH
《微机接口技术》
23
4. 指定段内的偏移地址
ORG说明符
格式:ORG 常数表达式 作用:指定当前可用的存储单元的偏移地址为 常数表达式的值
EVEN说明符
格式:EVEN
作用:将当前可用的存储单元的偏移地址调整 为最近的偶数值
《微机接口技术》
24
示例
ORG 1000H A DB 47H, 12H, 45H EVEN B DB 47H 说明: ① ORG指令将A的偏移地址部分指定为1000H ② 从A开始存放3个字节变量,占用地址1000H、 1001H和1002H ③ EVEN指令会将B的偏移地址部分从1003H调整为 偶数地址1004H
; 返回DOS
; 代码段结束 ; 模块结束
《微机接口技术》 11
汇编语言程序的组成
分段结构
DATA SEGMENT 按段进行组织,最多由4个 … ; 数据段语句 段组成(代码、数据、附加、 DATA ENDS
堆栈) STACK SEGMENT 每个段以“段名 SEGMENT” … ; 堆栈段语句 开始,以“段名 END”结束 STACK ENDS
《微机接口技术》 25
5. 过程定义
PROC说明符
格式:过程名 PROC 类型属性名 说明:从“过程名”代表的地址开始定义一个 过程;“类型属性名”可选择NEAR(近过程) 或FAR(远过程),默认为NEAR
MSP430学习PPT课件第5章MSP430汇编语言
![MSP430学习PPT课件第5章MSP430汇编语言](https://img.taocdn.com/s3/m/a03e3347960590c69fc3760b.png)
01100h 0xxxxh 0xxxxh
RESET (NON)MASKABLE TBCCR0 CCIFG
0FFE3h 0FFE2h 0FFE1h 0FFE0h
0xxxxh 0xxxxh
P2IFG0~P2IFG7
;*******************************************************************
01100h
代码段起始地址定义 ORG 01100h
code
009FFh 00200h 001FFh 00000h
RAM 堆栈和变量
Peripherals
stack 堆栈指针初始化
MOV #0A00h,SP
MSP430F149中断向量表
0FFFFh 0FFFEh 0FFFDh 0FFFCh 0FFFBh 0FFFAh
TBCCR0 CCIFG
01100h
009FFh 00200h 001FFh 00000h
RAM 堆栈和变量
Peripherals
0FFE3h 0FFE2h 0FFE1h 0FFE0h
0xxxxh 0xxxxh
P2IFG0~P2IFG7
0FFFFh 0FFE0h
中断向量表
0FFDFh
code memory (FLASH) 程序
clr R5
; Clear pointer
bis #ENC,&ADC12CTL0
; Enable conversions
bis #ADC12SC,&ADC12CTL0 ; Start conversions
bis #CPUOFF+GIE,SR
; Hold in LPM0, Enable interrupts
微型计算机原理-第5章(2)微机原理与接口技术(第三版)(王忠民)
![微型计算机原理-第5章(2)微机原理与接口技术(第三版)(王忠民)](https://img.taocdn.com/s3/m/b9c50fcc763231126edb11ca.png)
DS、
INT
ES
数2…0据H
PSP(256 字节)
附段加
CSS:SPSIP定义了代 堆段段段堆码栈栈段的用程用序户
户程序装入情况
第5章 汇编语言程序设计
DSEG SEGMENT STRING1 DB 1,2,3,4,5
DSEG ENDS ESEG SEGMENT
STRING2 DB 5 DUP(?) ESEG ENDS SSEG SEGMENT
CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备
上机过程
第5章 汇编语言程序设计
编辑程序 编辑
汇编程序 汇编
连接程序 连接
手写程序
EDIT .ASM文件
MASM .OBJ文件
LINK .EXE文件
有语法错误 无法正常连接 有算法错误
第5章 汇编语言程序设计
用户程序的装入
完成以下操作: 确定内存可用部分 以便存放要执行的 .exe 文
INC
BX
ADD AL,[BX]
MOV SUM,AL
RET
ENDP CODE END
MAIN
ENDS START
第5章 汇编语言程序设计 第二讲结束
每一种知识都需要努力, 都需要付出,感谢支持!
知识就是力量,感谢支持!
一一一一谢谢大家!!
STACK‘STACK’ DW 10 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME ES:ESEG,SS:SSEG
START: MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX
LEA SI, STRING1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
复次数可用STM指令对BRC进行设定。
第5章 TMS320C54x汇编语言程序设计
块重复操作的特点:
① 程序块的起始地址RSA是RPTB指令的下一行; ② 块结束地址REA由RPTB指令的操作数规定; ③ 对程序块进行重复操作时,不论程序块多长, 重复次数多大,所用的机器周期为0; ④ 与单指令重复操作不同,块重复操作可以响应 中断。
2). 堆栈区大小的确定
堆栈区的大小可以按照以下步骤来确定:
① 先开辟一个较大的堆栈区,用已知数充填,如: LD STM MVMM loop: STL BANZ # -9224,B # length,AR1 SP,AR4 B,*AR4loop,*AR1数据RAM ;堆栈区要充填的数0DBF8h加载B
AR4→
数据RAM
DBF8 DBF8 DBF8 … 7AB3 … DBF8 0013 DBF8 6B14 DBF8
SP→
用过的栈区
SP→
第5章 TMS320C54x汇编语言程序设计
1.2 数据传送
重复执行MVPD指令,可以实现程序存储器至数据 【例5.6.1】数组x[5]={1,2,3,4,5}初始化。
作为堆栈的栈底
在数据RAM空间开辟一个堆栈区。 设置好堆栈后,就可以使用堆栈了,如: CALL pmad ;(SP)-1→SP,(PC)+2→TOS,pmad→PC 设置堆栈指针,# stack + size→SP。 RET ;(TOS)→PC,(SP)+1→SP
第5章 TMS320C54x汇编语言程序设计
采用单操作数方法: LD #0,B STM #a,AR2 STM #x,AR3 STM #19,BRC RPTB Done-1 LD *AR2+, T MPY *AR3+, A …… ADD A, B Done: STH B, @y STL B, @y+1
采用双操作数的方法: LD #0,B STM #a,AR2 STM #x,AR3 STM #19,BRC RPTB Done-1 MPY *AR2+,*AR3+,A …… ADD A, B Done: STH B, @y STL B, @y+1
第5章 TMS320C54x汇编语言程序设计
1.2 堆栈的使用方法
1). 堆栈的设置
若程序中要使用堆栈,必须先进行设置,如:
size
stack
.set
.usect STM
120
“STACK”,size
在RAM中定义一个STACK 的保留空间,共120个单元
# stack + size,SP 保留区的高地址赋给SP,
• 思路1:使用SUB指令
data0 data1 .set 200 .set 100 .bss data2,1 .text LD #data0,A SUB #data1,A BC d1,ALT ST #data0, data2 BD loop NOP NOP ST #data1, data2 NOP .end
;子程序执行
•二、分支结构
汇编语言中程序的分支是由条件转移指令实现的, C54x CPU以累加器A、B及标志位C、TC、OVA、OVB 等状态最为条件,判断程序是否转移,这些指令见第三章。
例:比较两数data0和data1的大小。若两者相等, 将值存入data2单元。否则将大者存入data2单元。
•三、循环结构
在程序设计中,如果有一段程序需要多次重复执行时, 就可以使用循环结构,以提高效率,简化程序。 循环程序通常有4部分组成: (a)置循环初值:包括循环次数;置存储区的地址指针; 置其他变量的初值等。 (b)循环体:是程序中需要多次重复的部分。 (c)循环控制部分:每循环一次,检查结束条件是否满足 若满足,循环结束,否则继续循环。 (d)修改控制变量:每进行一次循环,将控制变量加一或 减一
第3章 TMS320C54x的指令系统
3.2 重复操作指令
程序块重复操作可以使紧随RPTB指令之后的程
序块重复执行。
块起始地址(RSA):RPTB指令的下一行。
块结束地址(REA):由RPTB指令的操作数给出。 块重复执行次数:由块重复计数器BRC的内容 来确定。
第5章 TMS320C54x汇编语言程序设计 【例5.5.2】三重循环嵌套程序。 STM 1st: 外部 STM RPTB 中间 中间 中 内 RPT 层 层 内部 中间 中间 2nd: 外部 外部 BANZ #L-1,AR7 #M-1,BRC 2nd-1 ;2T ;2T ;4T
存储器的数据传送,在系统初始化过程中十分有用。 . bss x,5 . data TBL: . word 1,2,3,4,5 . text START:STM #x,AR5 RPT #4 MVPD TBL,*AR5+ ……
第5章 TMS320C54x汇编语言程序设计
例:编写一段程序将数据存储器中的数组X[20] 复制到 数组Y[20]中。
第5章 TMS320C54x汇编语言程序设计
5.5.2 块程序重复操作
对于整个程序块需要重复操作时,可采用程序
块重复操作。 用于块程序重复操作指令为RPTB和RPTBD。程序 块的长度由块程序重复指令RPTB的操作数来确定,
而重复次数由块重复计数器BRC来决定。
通常RPTB的操作数为程序块的结束地址,而重
. bss x,20 .bss y,20 … STM #x,AR2 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+
第5章 TMS320C54x汇编语言程序设计
1.3 算术运算程序
基本算术运算包括: 加减法和乘法运算 除法运算 长字和并行运算
例:编写完成 y=aixi(i=1~20)
第5章 TMS320C54x汇编语言程序设计
【例5.5.2】对数组x[8]中的每一元素加1。
.bss begin: LD STM STM RPTB ADD STH next: LD … x, 8 #1,16,B #7,BRC #x,AR4 next-1 *AR4,16,B,A A,*AR4+ #0,B ;设置数组空间 注 意 ;立即数1送入BH ① 块结束地址REA通常取程 ;设置重复次数,BRC=7,循环8次 序块最后一条指令的下一 ;数组首地址x送入AR4 条指令地址-1; ;设置循环结束地址 ;数组数据左移16位与BH相加 ② 重复次数为7次 ;存入数组结果,并修改地址 ③ RPTB指令可以响应中断。 ;B清0
第5章 TMS320C54x汇编语言程序设计
3.1循环操作程序
在程序设计时,经常需要重复执行某一段程序。 利用BANZ(当辅助寄存器不为0时转移)指令可实现循 环计数和操作。 循环操作指令:
BANZ
转移地址,辅助寄存器
指令功能:当辅助寄存器不为0时,则转至转移地址, 否则顺序执行。
第5章 TMS320C54x汇编语言程序设计
第5章 TMS320C54x汇编语言程序设计
【例5.4.3】计算 y = a x
i 1
4
i i
程序: table: .word 1,2,3,4 .word 8,6,4,2 .text STM #0,SWWSR STM #STACK+10h,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ CALL SUM B end
【例5.3.4】 计算 y xi
.bss x,10 ;给x保留10个空间 用AR2作为循环计数器,由BANZ实现程序的循环 .bss y,1 ;给y保留1个空间 控制。
i 1
10
STM STM LD loop: ADD BANZ
#x,AR1 #9,AR2 #0,A *AR1+,A loop,*AR2-
第五章汇编程序设计
•汇编语言程序的基本结构
• 顺序结构 • 分支结构 • 循环结构
•一、顺序结构 • 1、堆栈的设置 • 2、数据传送 • 3、算术运算指令举例 •乘、加运算 •小数乘法运算 •除法运算
第5章 TMS320C54x汇编语言程序设计
1.1 堆栈的使用方法
当程序调用中断服务程序或子程序时,需要将 程序计数器PC的值和一些重要的寄存器值进行压栈 保护,以便程序返回时能从间断处继续执行。 ’C54x提供一个用16位堆栈指针SP寻址的软件 堆栈。 当向堆栈中压入数据时,堆栈是从高地址向低 地址方向填入,堆栈指针SP先减1,然后将数据压入 堆栈。 当从堆栈中弹出数据时。数据先从堆栈中弹出, 然后堆栈指针SP加1。
’C54x的重复操作是使CPU重复执行一条指令或 一段指令。可以分为单指令重复和块程序重复。 实现重复操作的指令:
RPT —— 重复下条指令;
RPTZ—— 累加器清0,并重复下条指令; RPTB—— 块重复指令。 使用RPT、RPTZ能重复下一条指令;而RPTB用 于重复代码块若干次。利用重复指令可实现比BANZ 指令更快的循环程序。
; data0-data1 ;data0<data1时转入d1 ;将data0存入data2
d1: loop:
;将data1存入data2
例:比较两数data0和data1的大小。若两者相等, 将值存入data2单元。否则将大者存入data2单元。
• 思路2:使用CMPS指令
data0 data1 .set .set .bss .text LD ADD CMPS .end 200 100 data2,1 #data0,16, A ;将data0送入A(31~16) #data1,A ;将data0送入A(15~0) A, data2 ;比较、选择、存储大者
; 变量初始化
start:
end:
; 插入0个等待状态 ; 设置堆栈指针 ; AR1指向a ; 移动8个数据 ; 从程序存储器到数据存储器 ; 调用SUM子程序