ST #v2,y1
LD x1,A ;x1 A ADD y1,A ;A+Y1 A STL A,z1 ;保存AL z1 LD x1,A SUB y1,A STL A,z2
RSBX FRCT ;准备整数乘法,FRCT=0 LD X1,T
MPY Y1,A ; x1*y1 A
STH A,z3_h ;乘法结果高16位在z3_h 单元 STL A,z3_l ;乘法结果低16位在z3_l单元 ST #v3,x2 ST #v4,y2
SSBX FRCT ;准备小数乘法,FRCT=1 LD x2,16,A ; 将x2加载到AH
MPYA y2 ;x2*y2 B,and y2 T
STH B,z4 ;结果放到z4单元 11、对数组x[8]={0,1,2,3,4,5,6,7}进行初始化 .bss x,8
.data
Table: .word 0,1,2,3,4,5,6,7 .text
Start: STM #x,AR5 RPT #7
MVPD table,*AR5+ ?
●将数组x[5] 初始化为{1,2,3,4,5}。 .data;定义初始化数据段起始地址 TBL:.word 1,2,3,4,5 ;为标号地址TBL ;开始的5个单元赋初值
.sect “.vectors” ;定义自定义段,并获得该段起始地址 B START ;无条件转移到标号为START的地址 .bss x,5 ;为数组x分配5个存储单元 .text ;定义代码段起始地址
START:STM #x,AR5 ;将x的首地址存入AR5 RPT #4 ;设置重复执行5次下条指令 MVPD TBL,*AR5+ end: B end .end
●实现对数组X[5]={1,2,3,4,5}的初始化,然后将数据存储器中的数组X[5]复制到数组Y[5]。最后实现数组X和数组Y中对应元素相乘并累加,即z=1*1+2*2+3*3+4*4+5*5 .mmregs
.bss x, 5
.bss y, 5 .bss z, 1 .def start
table: .word 1,2,3,4,5 .text
start: STM #x, AR1 RPT 4
MVPD table,*AR1+ ;从程序存储器传送到数据存储器数组X[5]
STM # x, AR2
STM # y, AR3
RPT 4
MVDD *AR1,*AR3 ;从数据存储器数组X[5]传送到Y[5]
SSBX FRCT ;准备整数乘法
STM # x, AR2
STM # y, AR3
STM # z, AR4 RPTZ 4
MAC *AR2+,*AR3+,A STL A,*AR4
End: B end .end
12、对数据x[8]中的每个元素加1 .bss x,8
Begin: LD #1,16,B
STM #7,BRC STM #x,AR4 RPTB next-1
ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B ?
12、求解 .其中数据均为小数,且a1=0.3 a2=0.2 a3= -0.4 a4=0.1 x1=0.6 x2=0.5 x3=-0.1 x4=-0.2 .bss a,4
.bss x,4 .data
table: .word 3*32768/10
.word 2*32768/10 .word -4*32768/10 .word 1*32768/10 .word 6*32768/10
.word 5*32768/10 .word -1*32768/10 .word -2*32768/10 .text
Start: SSBX FRCT
STM #a,AR4 RPT #7
MVPD table,*AR4+ STM #x,AR5 STM #a,AR6 RPTZ A,#3
MAC *AR5+,*AR6+,A 13、计算 y = .bss x, 4, 1
a0 .word 012h a1 .word 3211h a2 .word fe11h a3 .word ff03h .sect “program” LD #X, AR1 LD #0, A,AR1 LD #a0, T MAC *+,A LD #a1,T MAC *+,A LD #a2,T MAC *+,A LD #a3,T MAC *,A
14、在堆栈操作中,PC当前地址为4020H,SP当前地址为1013H,运行PSHM AR7后,PC和SP的值分别是多少?解:SP=1012H; PC=4021H 16、试编写0.25×(-0.1)的程序代码。 .title \ .mmregs .global _c_int00 .bss x,1 .bss y,1 .bss z,1 .data AmpCoef: .word 25*32768/100 .word -1*32768/10 .text _c_int00: ssbx FRCT stm #x,ar1
rpt #0x1 mvpd #AmpCoef,*ar1+ stm #x,ar2 stm #y,ar3 mpy *ar2,*ar3,A sth A,*ar1 Wait: b Wait .end
17、将定点数0.00125用浮点数表示。解:A=28H;T=19H 18、试写出以下两条指令的运行结果: ①EXP A
A=FFFD876624 T=0000
则以上指令执行后,B、T的值各是多少?解: A=0xFFFD876624;T=5 ②NORM B
B=420D0D0D0D, T=FFF9
则以上指令执行后,B、T的值各是多少?解:B=0x841A1A1A, T=FFF9
19a[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19},x[20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]的初始化,并将数据存储器中的数组x[20]复制到数组y[20],将数据存储器中的a[20]写入到程序存储器PROM(2000H-2013H),再将程序存储器PROM中的20个数据存入数据存储器DATA(0200H-0213H) .mmregs
.data TBL: .word
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 PROM : .usect “PROM”,20 .bss a,20 .bss x,20 .bss y,20
DATA .usect “DATA”,20 .text
Start: STM #a,AR1 RPT #39
MVPD TBL,*AR1+ STM #x,AR2 STM #y,AR3 RPT #19
MVDD *AR2+,*AR3+ STM #a,AR1 LD #PROM,A STM #19,AR3 LOOP: WRITA *AR1+ ADD #1,A,A
BANZ LOOP,*AR3-
LD #PROM-1,A STM #DATA,AR1 ST #19,BRC RPTB LOOP1 ADD #1,A,A LOOP1: READA *AR1+ WAIT: NOP
B WAIT 20、建立链接命令文件 _o mymove.out _m mymove.map MEMORY
{PAGE 0:
RAM: origin=1000h,length=800h RAM1:origin=2000h,length=300h PAGE 1:
DARAM1: origin=0100h,length=100h DARAM2: origin=0200h,length=100h }
SECTIONS {
.data :>RAM PAGE 0 .text :>RAM PAGE 0 PROM:>RAM1 PAGE 0
.bss :>DARAM1 PAGE1 DATA :>DARAM2 PAGE1 }
21、●设计一存储空间为100个单元的堆栈。将栈底地址指针送SP,对其初始化。 Size .set 100;设置堆栈空间的大小为100
Stack .usect \设置堆栈段的首地址和堆栈空间 STM #stack+size,SP
●利用SUBC完成整除法,41H/7H=9H,余数是2H。 LD #0041H, B STM #0100H, AR2 STM #0110H, AR3 ST #0007H, *AR2 RPT #15
SUBC *AR2,B STL B,*AR3+ STH B,*AR3
●编写求解加、减法的程序,计算z=x+y-w。 .title \.mmregs
STACK .usect “STACK”,10H