第四章 编译连接工具的使用
第四章 编译连接工具的使用
C54X汇编工具的使用 C54X的源程序可以使用汇编或C语言 编写。使用汇编语言是可以使用助记 符指令集( Mnemonic instruction set)或代数指令集( Algebraic Instruction set),但两种不能混用
一. C54X汇编工具的使用 C54X的源程序可以使用汇编或C语言 编写。使用汇编语言是可以使用助记 符指令集(Mnemonic Instruction Set)或代数指令集(Algebraic Instruction Set),但两种不能混用
两种指令的汇编语言比较 low_pass mac push(stl) 9 pshm St push(sto) pshm sto push(arO s pshm arO push(bk) pshm bk ar2= data(#t ar2) mvdm #t ar2ar2 ar3= data(#t ar3) mvdm #t ar3. ar3 ar0=#1 stm #l.arO bk=#N stm fn. bk ar3+ stl a *ar3+0 repeat(#(N-1), a=0 rptz a, #(N-1) a+=ar2+0%*ar3+0% mac ar2+0%,ar3+0%,a
两种指令的汇编语言比较 low_pass_mac: push(st1) ; pshm st1 push(st0) ; pshm st0 push(ar0) ; pshm ar0 push(bk) ; pshm bk ar2 = data(#t_ar2) ; mvdm #t_ar2,ar2 ar3= data(#t_ar3) ; mvdm #t_ar3,ar3 ar0 = #1 ; stm #1,ar0 bk = #N ; stm #N,bk *ar3+% = a ; stl a,*ar3+% repeat(#(N-1)),a=0 ; rptz a,#(N-1) a+= *ar2+0% * *ar3+0% ; mac *ar2+0%,*ar3+0%,a
●ASM500命令格式如下: asm500 input file object file listing file]] [-options o input file:汇编源文件名,缺省后缀为.aSm ● object file:编译输出的OBJ文件名,缺省后 为obj o listing file:产生的列表文件名缺省后缀为st ● options:编译器使用的各种选择。常用选项有: ●-C:若使用该选项,编译器忽略字母的大小写。例如 abc与ABC是一样的。系统缺省为区分大小写
⚫ ASM500命令格式如下: ⚫ asm500 [ input file [ object file [ listing file] ] ] [ -options] ⚫ input file: 汇编源文件名,缺省后缀为.asm ⚫ object file: 编译输出的OBJ文件名,缺省后缀 为.obj ⚫ listing file: 产生的列表文件名,缺省后缀为.lst ⚫ options: 编译器使用的各种选择。常用选项有: ⚫ -c:若使用该选项,编译器忽略字母的大小写。例如 abc与ABC是一样的。系统缺省为区分大小写
●-i:设置搜索路径。通知编译器在指定的搜索 路径中去查找copy, include中的文件。用法举 例:-ic:lc54x。 ●-:(小写的L)在编译时产生列表文件,缺省 后缀为Jst mg:汇编源程序使用代数指令集或在源代码 中使用 Algebraic ●-s:将所有的符号都放入符号表。若不使用该 选项,编译器仅将全局变量放入符号表。 ●v:指定版本。特别是需要使用 BOOTLOADER时,应加v548开关
⚫ -i:设置搜索路径。通知编译器在指定的搜索 路径中去查找.copy,.include中的文件。用法举 例:-ic:\c54x。 ⚫ -l: (小写的L)在编译时产生列表文件,缺省 后缀为.lst ⚫ -mg: 汇编源程序使用代数指令集或在源代码 中使用 . Algebraic ⚫ -s:将所有的符号都放入符号表。若不使用该 选项,编译器仅将全局变量放入符号表。 ⚫ -v: 指定版本。特别是需要使用 BOOTLOADER时,应加-v548开关
●先看两个汇编源程序: file 1. asm global test loop: call test bc loop, ageq end file2.asm file 3. asm global test glob al test test test mar大a3+ mar(为ar3+)
⚫ 先看两个汇编源程序: file1.asm .global test loop: call test bc loop,ageq .end file2.asm file3.asm .global test .glob al test test : test: mar *ar3+ mar(*ar3+) add #1,a
汇编工具ASM500的使用举例 o asm500 filel asm o asm500 file3 -mg-l
汇编工具ASM500的使用举例 ⚫ asm500 file1.asm ⚫ asm500 file2 -l ⚫ asm500 file3 -mg -l
TMS320C54x COFF Assembler Version 1.20 Sun jul 3012:11:252000 Copyright (c)1997 Texas Instruments Incorporated file2. asm PAGE global test 3000000test 40000006D93mar*ar3+ 5000001F000add#1a 0000020001 6000003FC00ret er No Errors, No Warnings
TMS320C54x COFF Assembler Version 1.20 Sun Jul 30 12:11:25 2000 Copyright (c) 1997 Texas Instruments Incorporated file2.asm PAGE 1 1 .global test 2 3 000000 test: 4 000000 6D93 mar *ar3+ 5 000001 F000 add #1,a 000002 0001 6 000003 FC00 ret 7 8 .end No Errors, No Warnings
TMS320C54x COFF Assembler Version 1.20 Sun Jul 30 12: 2 Copyright(c)1997 Texas Instruments Incorporated file3. asm PAGE global test 3000000test: 40000006D93mar(*ar3+) 5000001F000a=a+#1 0000020001 6000003 FC00 return end lo Errors, No Warnings
TMS320C54x COFF Assembler Version 1.20 Sun Jul 30 12:21:26 2000 Copyright (c) 1997 Texas Instruments Incorporated file3.asm PAGE 1 1 .global test 2 3 000000 test: 4 000000 6D93 mar(*ar3+) 5 000001 F000 a=a+#1 000002 0001 6 000003 FC00 return 7 8 .end No Errors, No Warnings
c54X汇编语言书写规范 ●语法:labl:指令操作数[;注释 #前缀表示立即数或直接地址 ●后缀B或b表示二进制常数 例如:LD#1000B,A ●后缀Q或q表示八进制常数,或以0开始的常数 例如:LD#10Q,A(010,A) 十二进制常数 例如:LD#1000,A
C54X汇编语言书写规范 ⚫ 语法: [label][:] 指令 [操作数] [;注释] ⚫ #前缀表示立即数或直接地址 ⚫ 后缀B或b表示二进制常数 例如: LD #1000B,A ⚫ 后缀Q或q表示八进制常数,或以0开始的常数 例如: LD #10Q,A (010,A) ⚫ 十二进制常数 例如: LD #1000,A