- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十六进制 浮点数
字符常数 字符串
30.08.2019
举例
10011000B,01111010b(最多16位) 226q,1001Q,0124(多达6位) 略
0DH,123H,0X89,0x0D(多达4位) 1.786e9(浮点数仅在C语言使用)
‘a’,’b’… “example”
湖南理工学院 胡文静 博士
30.08.2019
湖南理工学院 胡文静 博士
6
汇编语言表达式
表达式—由运算符、常数、符号等组成的一个式子;取值范围为-
32767~32768;优先级和结合性。
序号 1 2 3 4 5 6 7 8 9 10 11
符号 +-~! */%
+^
<< >> < <= > >= != =
& ∧ |
运算操作 取正、取负、按位求补、逻辑负 乘法、除法、求模 加法、减法 指数 左移、右移 小于、小于等于 大于、大于等于 不等于、等于 按位与运算 按位异或运算 按位或运算
TC=1 测试/控制标志位置1
TC=0 测试/控制标志位置0 BIO低 BIO信号电平为低 BIO高 BIO信号电平为高
无 无条件操作
条件分组详见P151,表5.3.5!例题5.3.3
30.08.2019
湖南理工学院 胡文静 博士
循环操作
14
.title "Ex534.asm"
.mmregs
stack .usect "STACK", 10h
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
LD ADDRA, A ADD ADDRC, A .newblock BC $1, ALT STL A, ADDRC NOP
湖南理工学院 胡文静 博士
19
重复操作程序
重复执行一条指令或一段指令(指令块),因此可以分为单 指令重复和块重复。
.word 1
.word 2
label2 .word 3
X
.set 50h
goodsym1 .set 100h+X
goodsym2 .set $
goodsym3 .set label1
goodsym4 .set label2-label1
无效定义的表达式举例:
.global Y
badsym1 .set Y
求值顺序 从右至左 从左至右 从左至右 从左到右 从左至右 从左至右 从左至右 从左至右 从左至右 从左至右 从左至右
30.08.2019
湖南理工学院 胡文静 博士
7
有效定义表达式:
有效定义表达式—表达式中的符号或汇编时间常数在表达式之前
就已经被定义。
有效定义的表达式举例:
.data
label1 .word 0
LD
#0DBF8H, B
STM
#length, AR1 ;length为已分配堆栈长度
MVMM SP, AR4
loop: STL
B, *AR4-
BANZ
loop, *AR1-
② 运行程序;
③ 检查堆栈区的内容,从而确定程序实际使用的堆栈单元个数。
30.08.2019
湖南理工学院 胡文静 博士
10
控制程序
.text
start:
STM #0, SWWSR
STM #stack+10H, SP
STM #a, AR1
RPT #7
MVPD table, *AR1+
CALL SUM
end:
B
end
SUM:
STM #a, AR3
STM #x, AR4
RPTZ A, #3
MAC *AR3+, *AR4+, A
STL A, @y
FBACC[D] 用累加器的低23位指定的地址加载PC和XPC
【例】5.3.1 分支转移
30.08.2019
湖南理工学院 胡文静 博士
11
分支操作
2. 子程调用
分类
指令
说明
CALL[D] 无条件调用
CALA[D]
将返回的地址压入堆栈,并用该指令指定的地址加载PC 将返回的地址压入堆栈,用累加器A或B指定的地址加载PC
湖南理工学院 胡文静 博士
12
分支操作
3. 子程返回
分类
指令
说明
RET[D] 无条件返回 RETE[D]
RETF[D]
将堆栈顶部的返回地址加载到PC。 将堆栈顶部的返回地址加载到PC,并使能可屏蔽中断。 将RTN寄存器中的返回地址加载到PC,并使能可屏蔽中断。
条件返回 RC[D]
如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。
STM #num, AR1
RPT #1
MVPD table, *AR1+
LD
@den, 16, A
MPYA @num
ABS A
STH A, @den
end:
18
LD ABS RPT SUBC XC NEG STL B .end
@num, A A #15 @den, A 1, BLT A A, @quot end
条件调用 CC[D]
如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加载PC
远程调用
FCALL [D] 将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPC
FCALA [D]
将XPC和PC压入堆栈,用累加器的低23位指定的地址加载 PC和XPC
例5.3.2
30.08.2019
B0 累加器B小于等于0 NTC
A>0 累加器A大于0
BIO
B>0 累加器B大于0
NBIO
A0 累加器A大于等于0 UNC
B0 累加器B大于等于0
AOV=1 累加器A溢出 BOV=1 累加器B溢出 AOV=0 累加器A不溢出 BOV=0 累加器B不溢出
C=1 ALU进位位置1 C=0 ALU进位位置0
RET
.end
30.08.2019
16
指定堆栈空间 为变量预留空间
初值序列 设置堆栈指针 初始化变量
利用MAC和RPT求乘累加和
湖南理工学院 胡文静 博士
17
算术运算
◆ 加减和乘法 【例5.4.1】计算y=a×x+b 【例5.4.2】计算y=x1×a1+x2×a2
加法指令:ADD;乘法指令:MPY。
badsym2 .set 50h+Y
badsym3 .set 50h+Z
Z
.set 60h
可重新定位符号及合法表达式 详见表5.1.2(P146)
30.08.2019
湖南理工学院 胡文静 博士
8
有效定义表达式
举例:可重定位符号和绝对符号
.global extern_1
举例:判断下列表达式的合法性
intern_1: .word “D”
C54x具有丰富的程序控制指令,以完成分支操作、条件 操作及循环操作等。
◆ 分支操作 1. 分支转移
分类
无条件 分支转移
条件 分支转移
远程 分支转移
指令
说明
B[D] BACC[D] BC[D] BANG[D] FB[D]
用该指令指定的地址加载PC 用累加器的低16位指定的地址加载PC 若满足指令给定条件,用该指令指定的地址加载PC 若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC 用该指令指定的地址加载PC和XPC
4
【例5.4.3】计算 y ai xi i 1
此例明显属于乘法-累加运算,所需核心指令:MAC,RPT
◆ 除法 C54X没有除法硬件,也没有专门的除法指令;但可以通
过条件减法SUBC和RPT指令达到目的。
30.08.2019
湖南理工学院 胡文静 博士
stack table: start:
◆ 循环操作
.bss x, 10
.bss y,
1
当条件满足时,重复执行某一段程序ta;bl可e: 以通.w过ordBAN1Z,2指,3,4令,5实,6,7现,8。,9,10
指令格式: BANZ
转移地址, 辅助寄存.d器ef start
指令功能:当辅助寄存器不为0时,s则tar转t:至转S移 TM地址;#0否 , SW则W,S顺R 序执
行。
STM #stack+10h, SP CALL init
10
【例题】计算 y xi i1
STM STM LD
#x, AR1
#9,AR2
#0,
A
loop: ADD *AR1+, A
BANZ loop, *AR2-
STL A,y
B
$
init: STM #x, AR1
RPT #9
MVPD table, *AR1+
RET
.end
30.08.2019
湖南理工学院 胡文静 博士
15
算术运算程序
◆ 加减和乘法 【例5.4.1】计算y=a×x+b 【例5.4.2】计算y=x1×a1+x2×a2
加法指令:ADD;乘法指令:MPY。
4