📄 memory10-23.asm
字号:
***********************
*date 07-9-20
*purpose
* 数据初始化
*auhtor xcs
**********************
.title "operation01.asm"
.global start
.mmregs
;a1=0.1 a2=0.2 a3=-0.3 a4=0.4
; x1=0.8 x2=0.6 a3=-0.4 x4=-0.2
;汇编语言程序中,不能直接写入十进制小数。要定义
; 一个系数0.707
; ,可以写成:word 32768×707/1000
.bss my ,1
.bss myx , 4
.bss myy , 1
.bss mya , 4
.bss x,5
.bss y,1
.bss z,9
.data
table:
.word 1*32768/10
.word 2*32768/10
.word -3*32768/10
.word 4*32768/10
.word 8*32768/10
.word 6*32768/10
.word 4*32768/10
.word -2*32768/10
.word 1,2,3,4,5
.text
start:
stm #0,swwsr
;----------move data
stm #myx,ar1
rpt #9
stm #6,*ar1+
;----------move data--------
;---------copy data
stm #x,ar1
stm #z,ar2
stm #7h,ar3
copys:
ld *ar1+,T ; 将ar1指向单元内容读入T寄存器,ar1的值+1
st T,*ar2+ ; 将T寄存器的值转存到ar2指向的目的地址,ar2的值+1
; stm *ar1+,*ar2+
banz copys,*ar3- ; ar3的值-1,循环计数不等于0则循环
;---------copy data
;rpt #2;
; mvdd *ar2+,*ar3+ ;mvdd *ar1+,*ar2+
;--------------------ini is over
;-------add--sub--- z= x+y -mya---3333
ld @x,a
add @y,a
sub @mya,a
stl a,@z
;-------mpy--- z = m*x+y ---------44444444-
ld @mya,t
mpy @x,a
add @y,a
stl a,@z
;------y=x1*a1+x2 *a2-- -----55555555555
ld @x,t
mpy @mya,b
ld @y,t
mac @x+1,b
;-找出y= ai*xi(i=1,2,3,4)中乘机项ai*xi的最大值----
stm #myx ,ar2
stm #myy ,ar3
*********************
* ld *ar2,t
* mpy *ar3,b
* max a;
***********************
ld #0,a
stm #3,ar4
loopmpyt: ld *ar2+,t
mpy *ar3+,b
max a
banz loopmpyt , *ar4-
;-----------6.2
ld #0,a
stm #3,ar4
loopmpy:
mpy *ar2+,*ar3+,b
max a
banz loopmpy ,*ar4-
;--------------6.2
;----------------10-------
stm #myx,ar2
stm #myy,ar3
stm #4,ar4
ld #0,a
loopmyadd: mpy *ar2+,*ar3+,b
add b,a
banz loopmyadd,*ar4-
;---10---------
ST A, *AR3
||LD *AR4, T
;------------rept block--- 3个x 都+1------
LD #1,B
STM #2,BRC
STM #x,AR4
RPTB next-1
ADD *AR4,B,A
STL A,*AR4+
next:
;-------------------
;---------y = x1+ x2+x3+x4+x5
stm #x,ar3
stm #4,ar4
ld #0,a
loopadd:
add *ar3+,a
banz loopadd,*ar4-
stl a,@y
;---编写计算 y=∑ai*xi( i=1~4) 的程序-----
;小数乘法与冗余符号位
;出现冗余符号位是两个带符号数相乘,得到的乘积带2个符号位,
;造成错误的结果。
;解决冗余符号位的方法:在程序中设定状态寄存器ST1中的FRAT
;(小数方式)位为1,在乘法器将结果送至累加器时就能自动的左移
;一位,自动地消去了两个带符号数相乘时产生的冗余符号位。
;注意:
; 小数乘法编程时,应事先设置FRCT位:
SSBX FRCT
STM #myx , AR1
RPT #7
MVPD table , *AR1+
STM #myx ,AR2
STM #mya , AR3
RPTZ A , #3
MAC *AR2+,*AR3+,A
; MAC AR2+, AR3+, A
STH A, @my
;--------
xh:
b xh ; 空循环
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -