【文章內(nèi)容簡介】
乘法累加指令 MAC,重復(fù)執(zhí)行下條指令 RPT 14 第 5章 匯編語言程 15 加法 /減法 . t i t l e Ex _ 543 . a s m . m m r e gss t a c k . u s e c t S T A C K , 10 H. b s s a , 4. b s s x , 4. b s s y , 1. d e f s t a r t. d a t at a b l e : . w o r d 1 , 2 , 3 , 4. w o r d 8 , 6 , 4 , 2. t e x ts t a r t : S T M 0 , S W W S RS T M s t a c k + 10 H , SPS T M a , AR 1R P T 7M V P D t a b l e , * AR 1 +C A L L S U Me n d : B e n dS U M : S T M a , AR 3S T M x , AR 4R P T Z A , 3M A C * AR 3 + , * AR 4 + , AS T L A , @ yRET. e n d指定堆??臻g 為變量預(yù)留空間 初值序列 初始化變量 設(shè)置堆棧指針 利用 MAC和 RPT求乘累加和 第 5章 匯編語言程 16 .title “ 。為匯編語言源文件取名 .mmregs 。定義存儲器映像寄存器 stack .usect STACK, 10H 。為堆??臻g分配 16個(gè)存儲單元 .bss a,4 。為 系數(shù) a分配 4個(gè)存儲單元 .bss x,4 。為變量 x分配 4個(gè)存儲單元 .bss y,1 。為變量 y分配 1個(gè)存儲單元 .def start 。定義標(biāo)號 start .data 。定義數(shù)據(jù)代碼 table: .word 1,2,3,4 。為標(biāo)號 table開始的 .word 8,6,4,2 。 8個(gè)存儲單元賦值 .text 。定義文本代碼段 start: STM 0, SWWSR 。 SWWSR置 0,不插等待周期 STM stack+10H, SP 。設(shè)置堆棧指針 STM a, AR1 。 AR1指向 a的首地址 RPT 7 。重復(fù)執(zhí)行下條指令 8次 MVPD table, *AR1+ 。從程序存儲器向數(shù)據(jù)存儲器, 重復(fù)傳 遞 共 8個(gè)數(shù)據(jù) CALL SUM 。調(diào)用子程序 SUM end: B end 。循環(huán)等待 SUM: STM a, AR3 。將系數(shù) a的首地址 賦給 AR3 STM x, AR4 。將變量 x的首地址 賦給 AR4 RPTZ A, 3 。將累加器清 0,重復(fù)執(zhí)行下條指令 4次 MAC *AR3+, *AR4+, A。執(zhí)行乘法累加運(yùn)算,結(jié)果存入累計(jì)器 A中 STL A, @y 。將結(jié)果( A的低 16位)送往變量 y存儲單元 RET 。子程序返回 .end 。源程序結(jié)束 第 5章 匯編語言程 【 例 58】在例 57的 4項(xiàng)乘積 ai xi(i=1,2,3,4)中找出最大值,并存放累加器 A中。 程序: STM a, AR1 STM x, AR2 STM 2, AR3 LD *AR1+,T MPY *AR2+,A loop1: LD *AR1+,T MPY *AR2+,B MAX A BANZ loop1,*AR3 。系數(shù) a的首地址賦給 AR1 。變量 x的首地址賦給 AR2 。設(shè)置計(jì)數(shù)器 AR3=2 。取系數(shù) T=a1,并修改 AR1 。乘法運(yùn)算 A=a1x1,并修改 AR2 。取系數(shù) T=ai,并修改 AR1 。乘法運(yùn)算 B=aixi,并修改 AR2 。求 A和 B中的最大值 ,結(jié)果存入 A 。若 AR3≠0, 則循環(huán) ,并修改 AR3 若 AR3=0, 則順序執(zhí)行 加、減法和乘法運(yùn)算 第 5章 匯編語言程 18 重復(fù)執(zhí)行一條指令或一段指令 ( 指令塊 ) , 因此可以分為單指令重復(fù)和塊重復(fù) 。對應(yīng)指令 : RP T 、 RP T Z 、 RP T B 。※ 單指令重復(fù)RP T 和 RP T Z 指令允許重復(fù)執(zhí)行緊隨其后的一條指令若干次 ; 執(zhí)行次數(shù)有指令的操作數(shù)決定 , 并且等于該操作數(shù)加 1 。優(yōu)點(diǎn) : 只需取指一次 , 重復(fù)執(zhí)行若干次 , 效率高 。 特別是對于 M A C 操作和數(shù)據(jù)傳送這樣的多周期指令 。 重復(fù)操作 例 59 對一個(gè)數(shù)組進(jìn)行初始化 X[5]={0,0,0,0,0} 第 5章 匯編語言程 【 例 59】對數(shù)組進(jìn)行初始化,使 x[5]={0,0,0,0,0}。 .bss x, 5 STM x, AR1 LD 0, A RPT 4 STL A,*AR1+ .bss x, 5 STM x, AR1 RPTZ A, 4 STL A, *AR1+ 注意: ① 對 x[5]中的 5個(gè)元素置 0,重復(fù)次數(shù)為 4,即執(zhí)行 1次 STL A, AR1+指令后,再重復(fù)執(zhí)行 4次; ② RPTZ指令設(shè)定重復(fù)次數(shù)后,再對累加器清零。 重復(fù)操作 第 5章 匯編語言程 20 ※ 塊重復(fù)操作R P T B 指令允許重復(fù)執(zhí)行代碼塊若干次 , 次數(shù)由 B R C 決定 。特點(diǎn) : 對