当前位置:
文档之家› [工学]第5章 汇编语言程序设计
[工学]第5章 汇编语言程序设计
226q,1001Q,0124(多达6位) (整数) 0DH,123H,0X89,0x0D(多达4位) 1.786e9(浮点数仅在C语言使用)
3
二进制
八进制 十进制 十六进制 浮点数
字符常数
字符串
‘a’,’b’…
“example”
01:52:24
标号
类型 标号 局部标号 符号常数
预定义符号常数
4
含义
替代符号
例如:将常数值18赋给符号bei_hua。
bei_hua
LD
.set .set ARl
AuxRl,SP
18
# bei_hua,A
AuxRl
01:52:24
MVMM
举例
例:符号常数定义 例:局部标号 N .set 512 Label1: buffer .set 4*N nzg1 .set 1 nzg2 .set 2 nzg3 .set 3 item .struct .int nzg1 $1 .int nzg2 $2 .int nzg3 tang .endstruct array .tag item .bss array, tang*N $1 LD SUB BC LD B ADDRA, A ADDRB, A $1, ALT ADDRB, A $2
5.3 控制程序
’C54x具有丰富的程序控制指令,利用这些指令 可以执行分支转移、子程序调用、子程序返回,条 件执行以及循环等控制操作。
5.3.1 分支操作程序
分支转移程序 子程序调用 子程序返回 条件操作程序
01:52:24
11
第5章 TMS320C54x汇编语言程序设计
5.3.1 分支操作程序
1. 分支转移程序 通过传送控制到程序存储器的其他位置,分支转 分 类 指 令 说 明 移会中断连续的指令流。
B[D] 用该指令指定的地址加载PC 无条件 分支转移指令可以改写PC值,使程序改变流向。 分支转移 BACC[D] 用累加器的低16位指定的地址加载PC
601:52:24来自有效定义表达式:有效定义表达式—表达式中的符号或汇编时间常数在表达式之前
就已经被定义。
有效定义的表达式举例: .data label1 .word 0 .word 1 .word 2 label2 .word 3 X .set 50h goodsym1 .set 100h+X goodsym2 .set $ goodsym3 .set label1 goodsym4 .set label2-label1
作为堆栈的栈底
在数据RAM空间开辟一个堆栈区。 设置好堆栈后,就可以使用堆栈了,如: CALL pmad ;(SP)-1 →SP,(PC)+ 2→TOS,pmad→PC 设置堆栈指针, # stack + size→SP。 RET ;(TOS)→PC,(SP)+1→SP
01:52:24
10
第5章 TMS320C54x汇编语言程序设计
符号地址(可作为.global,.ref,.def的操作数)
$n, name? (临时性的标 号,.newblock,.sect,.text,.data,.include,.copy取消)
.set, .struct/.tag/.endstruct (提高可读性) $, 寄存器符号, 其他… 符号替代变量, .asg “high”, AR2(可重新定义)
7
无效定义的表达式举例: .global Y badsym1 .set Y badsym2 .set 50h+Y badsym3 .set 50h+Z Z .set 60h
01:52:24
8
第5章 TMS320C54x汇编语言程序设计
5.2 堆栈的使用方法
当程序调用中断服务程序或子程序时,需要将 程序计数器PC的值和一些重要的寄存器值进行压栈 保护,以便程序返回时能从间断处继续执行。 ’C54x提供一个用16位堆栈指针SP寻址的软件 堆栈。 当向堆栈中压入数据时,堆栈是从高地址向低 地址方向填入,堆栈指针SP先减1,然后将数据压入 堆栈。 当从堆栈中弹出数据时。数据先从堆栈中弹出, 然后堆栈指针SP加1。
01:52:24
9
第5章 TMS320C54x汇编语言程序设计
5.2 堆栈的使用方法
1. 堆栈的设置
若程序中要使用堆栈,必须先进行设置,如:
size
stack
.set
.usect STM
120
“STACK”,size
在RAM中定义一个STACK 的保留空间,共120个单元
# stack + size,SP 保留区的高地址赋给SP,
第五章 汇编语言程序设计
概述
汇编语言源程序格式: 助记符指令一般包含4个部分,其一般组成形式为: [标号][:] 助记符 [操作数] [;注释]
2
书写格式规则详见P138,①②③④⑤⑥!
◆ 标号—所有汇编指令和大多数汇编伪指令前面都可以带有标号;必须从第
一列开始书写;最多32个字符;由字母、数字、下划线和$组成,且不能以数字 开头;分大小写;冒号不属于标号名;没有标号的源语句第一列必须为空格、星 号或分号。
◆ 助记符— 不能从第一列开始,否则被认为是标号;指令助记符一般用大
写;汇编伪指令一般为小写,且以“.”开头。
◆ 操作数—操作数列表,可以是常数、符号或常数与符号构成的表达式。操
作数间需用“,”号隔开;三种前缀形式:#, *, @。
01:52:24
常数与字符串
数据类型 举例
10011000B,01111010b(最多16位)
5
LD ADDRA, A ADD ADDRC, A .newblock BC $1, ALT STL A, ADDRC NOP
01:52:24
汇编语言表达式
表达式—由运算符、常数、符号等组成的一个式子;取值范围为
-32768~32767;优先级和结合性。
序号 1 2 3 4 5 6 7 8 9 10 11 符 号 +-~! */% + ^ << >> < <= > >= != = & ∧ | 运算操作 取正、取负、按位求补、逻辑负 乘法、除法、求模 加法、减法 指数 左移、右移 小于、小于等于 大于、大于等于 不等于、等于 按位与运算 按位异或运算 按位或运算 求值顺序 从右至左 从左至右 从左至右 从左到右 从左至右 从左至右 从左至右 从左至右 从左至右 从左至右 从左至右