例7-2,64位减法运算程序。文件名为:sub64.asm .mmregs .model call=c55 std model mem=large 指针分配 AR1-> X3(偶地址) 1000h 米米米米米米米米米米米米米米米米米 X2 ◆ 64位减法 站 地 I AR2-> Y3(偶地址) 址值 1004h 1 X3 X2 X1 XO -Y3 Y2 Y1 YO 1 ◆ Y品 依次 ◆ W3 W2 W1 WO AR3-> W3(偶地址) 增 1008h W2 加 W1 WO 31
例7-2 , 64位减法运算程序。文件名为: sub64.asm .mmregs .model call=c55_std .model mem=large 31 ;***************** ; 64位减法 ; ; X3 X2 X1 X0 ; − Y3 Y2 Y1 Y0 ; --------------------- ; W3 W2 W1 W0 指针分配 AR1 -> X3(偶地址) X2 X1 X0 AR2 -> Y3(偶地址) Y2 Y1 Y0 AR3 -> W3(偶地址) W2 W1 W0 1000h 地 址 值 依 次 增 加 1004h 1008h
.sect ".text" AR1->X3(偶地址) 1000h .align 4 指针分配 2X 地 .global start AR2 -> (保 值依次增 1004h ;.sym start,start,36,2,0 start: MOV #0100h,AR1 AR3-> 3(偶地址) 1008h MOV #0104h,AR2 MOV #0108h,AR3 O L1: MOV40 dbl(*AR1(#2)),ACO ;ACO=X1X0 SUB dbl(*AR2(#2)),ACO ;ACO=X1X0-Y1Y0 MOV ACO,dbl(*AR3(#2)) :保存W1W0 MOV40 dbl(*AR1),ACO ;ACO=X3X2 SUB uns(*AR2(#1)),BORROW,ACO ;ACO=X3X2-00Y2-BORROW SUB *AR2<<#16,ACO :ACO=X3X2-Y3Y2-BORROW MOV ACO,dbl(*AR3) ;保存W3W2. BL1 除加法换成减法,CARRY换成BORROW外,步骤相同. 32
.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=X1X0 SUB dbl(*AR2(#2)),AC0 ;AC0=X1X0-Y1Y0 MOV AC0,dbl(*AR3(#2)) ;保存W1W0. MOV40 dbl(*AR1),AC0 ;AC0=X3X2 SUB uns(*AR2(#1)),BORROW,AC0 ;AC0=X3X2-00Y2-BORROW SUB *AR2<<#16,AC0 ;AC0=X3X2-Y3Y2-BORROW MOV AC0,dbl(*AR3) ;保存 W3W2. B L1 32 AR1 -> X3(偶地址) X2 X1 X0 AR2 -> Y3(偶地址) Y2 Y1 Y0 AR3 -> W3(偶地址) W2 W1 W0 1000h 地 址 值 依 次 增 加 1004h 1008h 指 针 分 配 除加法换成减法, CARRY换成BORROW外, 步骤相同
7.2基础算术运算 ·7.2.1加减运算 ■7.2.2乘法运算 ·7.2.3除法运算 ■7.2.4小数乘法 33
7.2 基础算术运算 ◼ 7.2.1 加减运算 ◼ 7.2.2 乘法运算 ◼ 7.2.3 除法运算 ◼ 7.2.4 小数乘法 33
7.2.2 ,乘法运算 C55x提供了硬件乘法器,16位乘法可在一个 指令周期内完成。 ·高于16位的乘法运算可以采用下述方法实现 (以32位乘法为例)。 34
7.2.2 乘法运算 ⚫ C55x提供了硬件乘法器,16位乘法可在一个 指令周期内完成。 ⚫ 高于16位的乘法运算可以采用下述方法实现 (以32位乘法为例)。 34
例7-3,32位整数乘法运算。文件名mpy32.asm .mmregs .model call=c55 std model mem=large ,米米米米*米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米*米米米米米米米 ;本子程序是两个32位整数乘法,得到一个64位结果 。 操作数取自数据存储器,运算结果送回数据存储器。 11 数据存储: 指针分配: X1 XO 32位操作数 AR0-> Y1 YO 32位操作数 W3 W2 W1 Wo 64位结果 AR1-> ◆ Y阳 入口条件: AR2-> Wo SXMD :1 (允许符号扩展) W1 SATD = 0 (不做饱和处理) W2 FRCT= 0 (关小数模式) W3 :限制条件:延迟链和输入序列必须指定为长字类型 米米米*米米*米米米米***米米米**米*米米*米米米**米米*米***米*米米米*米米米米*米米*米米米 35
例7-3, 32位整数乘法运算。文件名:mpy32.asm .mmregs .model call=c55_std .model mem=large 35 ;************************************************** ; 本子程序是两个32位整数乘法, 得到一个64位结果。 ; 操作数取自数据存储器, 运算结果送回数据存储器。 ;; 数据存储: 指针分配: ; X1 X0 32位操作数 AR0 -> X1 ; × Y1 Y0 32位操作数 X0 ; W3 W2 W1 W0 64位结果 AR1 -> Y1 ; Y0 ; 入口条件: AR2 -> W0 ; SXMD = 1 (允许符号扩展) W1 ; SATD = 0 (不做饱和处理) W2 ; FRCT = 0 (关小数模式) W3 ;;限制条件: 延迟链和输入序列必须指定为长字类型。 ;*************************************************************