小命 6.并行运算 (1)并行运算指同时利用D总线和E总线。 其中,D总线用来执行加载或算术运算,E总 特线用来存放先前的结果。 点(2)并行指令都是单字单周期指令。 (3)并行运算时所存储的是前面的运算结 果,存储之后再进行加载或算术运算。 (4)并行指令都工作在累加器的高位。 (5)大多数并行运算指令都受累加器移位 方式ASM位影响
17 (1)并行运算指同时利用D总线和E总线。 其中,D总线用来执行加载或算术运算,E总 线用来存放先前的结果。 (2)并行指令都是单字单周期指令。 (3)并行运算时所存储的是前面的运算结 果,存储之后再进行加载或算术运算。 (4)并行指令都工作在累加器的高位。 (5)大多数并行运算指令都受累加器移位 方式ASM位影响。 6.并行运算 特 点
小命 表5-1并行指令举例 指令 指令 举例 操作说明 并行加载和乘法指今LD|MC[R]LD Xmem dst dst=Xmem<<16 LD I MAS [R] MAC[R] Ymem[, dst] dst2==dst2+T*Ymem 并行加载和存储指令ST‖LD ST src, Yme Ymem=src>>( 16-ASM) ‖LD Xmem. dst dst=Xmem<<16 ST‖MAY 并行存储和乘法指令ST‖MAC[R7ST src. Mem Ymem=src>>(16-ASM) ST‖MAS[R] I MACIRI Xmem, dst dst=dst+t*Xmem 并行存储和加/减法ST‖ADD ST src, Mem Ymem=src>〉(16-ASM) 指令 ST‖SUB ADD Xmem, dst dst=dst+Xmem
18 表5-1 并行指令举例 指 令 指 令 举 例 操作说明 并行加载和乘法指令 LD‖MAC[R] LD‖MAS[R] LD Xmem,dst ‖MAC[R] Ymem[,dst] dst=Xmem<<16 dst2=dst2+T*Ymem 并行加载和存储指令 ST‖LD ST src, Yme ‖LD Xmem, dst Ymem=src>> ( 16-ASM ) dst=Xmem<<16 并行存储和乘法指令 ST‖MAY ST‖MAC[R] ST‖MAS[R] ST src, Ymem ‖MAC[R] Xmem, dst Ymem=src>> ( 16-ASM ) dst=dst+T*Xmem 并行存储和加/减法 指令 ST‖ADD ST‖SUB ST src, Ymem ‖ADD Xmem, dst Ymem=src>> ( 16-ASM ) dst=dst+Xmem
小命 例5-10编写计算z=x+和f=de的程序段。 在此程序段中用到了并行存储/加载指令,即在同一机器周期 内利用E总线存储和D总线加载。 数据存储器分配如图5-4所示。 title“cjy3.asm” 数据存储器 dregs STACK, sect“ STACK”,10H AB5→[z .bssx,3;为第一组变量 y 分配3个存储单元 bss 为第二组变量AR2 ;分配3个存储单元 def start data table:.word0123H,1027H,0,1020H,0345H,0
19 例5-10 编写计算z=x+y和f=d+e的程序段。 在此程序段中用到了并行存储/加载指令,即在同一机器周期 内利用 E 总 线 存 储 和 D 总 线 加 载 。 数据存储器分配如图5-4所示。 .title “cjy3.asm” .mmregs STACK .usect “STACK” ,10H .bss x,3 ;为第一组变量 ;分配3个存储单元 .bss d,3 ;为第二组变量 ;分配3个存储单元 .def start .data table: .word 0123H,1027H,0,1020H,0345H,0
小命 text start: STM #0. SWWSR STM #STACK+1OH SP STM #x ARl RPT #5 MVPD table,米AR1+ STM #X AR5 将第一组变量的首地址传给AR5 STM #d Ar2 将第二组变量的首地址传给AR2 LD #0. ASM 设置ASM=0 LD*AR5+,16,A;将x的值左移16位放入A的高端字 ADD米AR5+,16,A;将y值左移16位与A的高端字x相加 STA,米AR5 ;将A中的和值右移16位存入z中 LD米AR2+,B 将d的值左移16位放入B的高端字 ADD *AR2+ 16. B 将e值左移16位与B的高端字d相加 STH B *AR2 将B的高端字中的和值存入f中 end: B en end
20 .text start:STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #5 MVPD table,*AR1+ STM #x,AR5 ;将第一组变量的首地址传给AR5 STM #d,AR2 ;将第二组变量的首地址传给AR2 LD #0,ASM ;设置ASM=0 LD *AR5+,16,A ;将x的值左移16位放入A的高端字 ADD *AR5+,16,A ;将y值左移16位与A的高端字x相加 ST A,*AR5 ;将A中的和值右移16位存入z中 ‖LD *AR2+,B ;将d的值左移16位放入B的高端字 ADD *AR2+,16,B ;将e值左移16位与B的高端字d相加 STH B,*AR2 ;将B的高端字中的和值存入f中 end: B end .end
小命 7.64位加法和减法运算 例5-11编写计算Z=W4+X64-Y64的程序段。 这里的W、X、Y和结果Z都是64位数,它们都由两个32位的 长字组成。利用长字指令可以完成64位数的加/减法。 3 W 1 Wo (W W 64 2 x1xo(X4)低32位相加产生进位C y3y2Cy1yo(Y64)低32位相减产生借位C 3 0 (Zs)
21 7.64位加法和减法运算 例5-11 编写计算Z64=W64+X64-Y64的程序段。 这里的W、X、Y和结果Z都是64位数,它们都由两个32位的 长字组成。利用长字指令可以完成64位数的加/减法。 w3 w2 w1 w0 (W64) + x3 x2 C x1 x0 (X64) 低32位相加产生进位C - y3 y2 C’ y1 y0 (Y64) 低32位相减产生借位C’ __________________________________ z3 z2 z1 z0 (Z64)