M40=1 以下指令可在单周期内完成3位加法运算: MO40 dbl(lmem,ACx1可进行单独3位或 ADD dbl(lmem),ACx 64位的低32位加 64位的高32位加法要考虑低32位加法产生的进位,高 32位使用以下指令: ADD uns(smem, CARRY,ACx 48~63 ADD(Smem-1)<<#16, ACx ●以下指令可在单周期内完成32位减法运算: MOv40 dbl(Lmem), ACX 可进行单独32位或 SUB dbl(Lmem), ACX 64位的低32位加 64位的高32位减法要考虑低32位减法产生的借位,使 用以下指令: SUB uns(Smem), BORROW,ACx SUB (Smem-1)<<#16, ACx
⚫ 以下指令可在单周期内完成32位加法运算: MOV40 dbl(Lmem),ACx ADD dbl(Lmem),ACx ⚫ 64位的高32位加法要考虑低32位加法产生的进位,高 32位使用以下指令: ADD uns(Smem), CARRY, ACx ⚫ 以下指令可在单周期内完成32位减法运算: MOV40 dbl(Lmem), ACx SUB dbl(Lmem), ACx ⚫ 64位的高32位减法要考虑低32位减法产生的借位,使 用以下指令: SUB uns(Smem), BORROW,ACx 可进行单独32位或 64位的低32位加 可进行单独32位或 64位的低32位加 25 M40=1 ADD (Smem-1)<< #16, ACx 32~47位 48~63位 SUB (Smem-1)<< #16, ACx
例7-1,64位加法运算。文件名为:add64asm。 mmregs为存储器映射寄存器定义符号名.与对所有存储器映射寄 mmregs存器执行set功能一样。C54x汇编器(手册)支持 mmregs指令。 model call=c55std函数调用时参量与备存器(①0个)的排列关系接GL执行(默 认:c55std)。c55 compat只能传递3个参数到寄存器。 model mem=large 指针分配 AR1->X3(偶地址)100h n水米米水米水米水米米米水米米米米水 X2 64位加法 X1 地 XO 址 X3X2Ⅺ10AR2->Y3(偶地址)值 1004h Y2 +y322Y1 y0 Y1 YO 依次 WBW2W1W0AR3>W3(偶地址)增100h W2 WO
例7-1,64位加法运算。文件名为:add64.asm。 .mmregs .model call=c55_std .model mem=large ;***************** ; 64位加法 ; ; X3 X2 X1 X0 ; + Y3 Y2 Y1 Y0 ; --------------------- ; W3 W2 W1 W0 26 指针分配 AR1 -> X3(偶地址) X2 X1 X0 AR2 -> Y3(偶地址) Y2 Y1 Y0 AR3 -> W3(偶地址) W2 W1 W0 1000h 地 址 值 依 次 增 加 1004h 1008h .mmregs为存储器映射寄存器定义符号名. 与对所有存储器映射寄 存器执行.set功能一样。C54x 汇编器(手册)支持.mmregs指令。 C函数调用时参量与寄存器(10个)的排列关系按表6-11执行(默 认: c55_std) 。 c55_compat只能传递3个参数到寄存器
sm- COFF Symbolic Debugging Directives已废弃 sect", text align 4 The sym directive defines a global variable, a local variable, or a function Several parameters global start allow you to associate various debugging i sym start start 36 2, 0 information with the variable or function start:标号地址,表示函数外部不占存储格式用数表示对应C变量类型占存储单元位数 MOV #0100h AR1 sym name, valuel type, storage dass, size, tag, dims MOV#0104h AR2 参考文献:TMS320C28X系列DSP指令和编程指南 MO∨#0108h,AR3 附录B符号调试伪指令,sym(需看附录A:难懂) 茶苑老吴的博客关于TMS320C55×的汇编语言 中的sym伪指令(此文献非常详细明了) MOV40 dbl( ARl(#2), aco Aco=X1 XO AdD dbl(*AR2(#2),AC0;AC0=×1×0+Y1Y0 MOV ACO, dbl(AR3 (#2) 保存W1W0. MOV40 dbl( AR1), ACO :Aco=X3 X2 ADD uns( AR2(#1), CARRY ACO; AC0=3X2+00 Y2+ CARRy ADD *AR2<<#16, AcO AC0=X3X2+33Y2+CARRY MOV ACO, abl( AR3) 保存W3W2 BL1 28
.sect ".text" .align 4 .global start ;.sym start,start, 36, 2, 0 start: MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 dbl(*AR1(#2)), AC0 ;AC0 = X1 X0 ADD dbl(*AR2(#2)), AC0 ;AC0 = X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2)) ;保存W1 W0. MOV40 dbl(*AR1), AC0 ;AC0 = X3 X2 ADD uns(*AR2(#1)),CARRY,AC0;AC0=X3 X2 + 00 Y2 + CARRY ADD *AR2<< #16, AC0 ;AC0= X3 X2 +Y3 Y2 + CARRY MOV AC0, dbl(*AR3) ;保存 W3 W2. B L1 28 .sym-- COFF Symbolic Debugging Directives已废弃 The .sym directive defines a global variable, a local variable, or a function. Several parameters allow you to associate various debugging information with the variable or function. 格式: .sym name, value[, type, storage class, size, tag, dims] 参考文献: TMS320C28X系列DSP指令和编程指南 -附录B 符号调试伪指令.sym(需看附录A:难懂) 茶苑老吴的博客:”关于TMS320C55x的汇编语言 中的.sym伪指令 “(此文献非常详细明了) 标号,地址,表示函数,外部,不占存储 用数表示对应C变量类型,占存储单元位数
sect text 指AR1->X3(偶地址)100h X2 align 4 地 分 址 1002h global start sym start, start, 36, 2,0 AR2->(偶地址)100 1005h start 1006h MOV #0100h AR1 MOV#0104h AR2 AR3->W3(偶地址)1008h W MO∨#0108h,AR3 100Ah L:该指令执行后AR1的值不变该指令寻址:AR+2W0 MOV40 dbl(*AR1(#2), ACO ACO=X1 XO ADD dbl( AR2(2), ACo ACO X1 X0+ Y1 YO MOV ACO, dbl(AR3(#2) 保存W1W0. 进位的 MOV40 dbl( AR1), ACO ;AC0=X3X232位茄指令 ADD uns(*AR2(#1), CARRY ACO ;AC0=X3X2+00Y2 +CARRY ADD*AR2<<#16,ACQ:行完成A=X32+Y32+ CARRY MOV ACO,,d(米AR3):保存WW2加法A0=AO0+Y300 BL1此指令不是带进位加,也不需要,因X加Y2的进位就在A(16)中
.sect ".text" .align 4 .global start ;.sym start,start, 36, 2, 0 start: MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 dbl(*AR1(#2)), AC0 ;AC0 = X1 X0 ADD dbl(*AR2(#2)), AC0 ;AC0 = X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2)) ;保存W1 W0. MOV40 dbl(*AR1), AC0 ;AC0 = X3 X2 ADD uns(*AR2(#1)),CARRY,AC0 ;AC0=X3X2+00Y2 +CARRY ADD *AR2<< #16, AC0 ;两行完成AC0=X3X2+Y3Y2+CARRY MOV AC0, dbl(*AR3) ;保存W3 W2. B L1 29 AR1 -> X3(偶地址) X2 X1 X0 AR2 -> Y3(偶地址) Y2 Y1 Y0 AR3 -> W3(偶地址) W2 W1 W0 1000h 地 址 值 依 次 增 加 1004h 1008h 指 针 分 配 无带进位的 32位加指令 此指令不是带进位加, 也不需要, 因X2加Y2的进位就在AC0(16)中. 1002h 1006h 100Ah 1005h 加法AC0=AC0+Y300 该指令执行后AR1的值不变,该指令寻址:(AR1)+2
sect text align 4 global start 存储单元0100h~0107h中的数据 例题中没有给出,可添加数据测试 sym start start, 36, 2.0 RPT #57 start MOV 8888H * AR1+ MOV #0100h AR1 MOV#0104h AR2 MOV#1288H*(#0100h) MOV#1288H*(#0104h) MO∨#0108h,AR3 MOV # t0100h, AR1 MO∨40db(AR1(#2)AC0;AC0=×1x0 AdD dbl(*AR2(#2),AC0;AC0=×1×0+Y1Y0 MOV ACO, dbl(AR3 (#2) 保存W1W0 进位的 MOV40 dbl( AR1), ACO :Aco=X3 X2 位加指令 ADD uns(*AR2(#1), CARRY, ACO AC0=X3X2-+00Y2 +CARRY ADD*AR2<<#16,AC0;两行完成AC0=X3XQ+Y3Y2+ CARRY MOV ACO, dbl(AR3) ;保存W3W2 BL1
.sect ".text" .align 4 .global start ;.sym start,start,36,2,0 start: MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 dbl(*AR1(#2)), AC0 ;AC0 = X1 X0 ADD dbl(*AR2(#2)), AC0 ;AC0 = X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2)) ;保存W1 W0. MOV40 dbl(*AR1), AC0 ;AC0 = X3 X2 ADD uns(*AR2(#1)),CARRY,AC0 ;AC0=X3X2+00Y2 +CARRY ADD *AR2<< #16, AC0 ;两行完成AC0=X3X2+Y3Y2+CARRY MOV AC0, dbl(*AR3) ;保存 W3 W2. B L1 30 无带进位的 32位加指令 存储单元0100h~0107h中的数据, 例题中没有给出,可添加数据测试: RPT #7 MOV #8888H,*AR1+ MOV #1288H,*(#0100h) MOV #1288H,*(#0104h) MOV #0100h,AR1