单操作数间接寻址方框图 ARO BK lk ARP(3) ARADO ARO(16)index AR1(16) +-%0B AR2(16 DAB(16) AR3(16) ARO BK AR4(16) AR5(16 ARAU1 AR7(16) BK(16) (write)or CAB(16) (32-bit read Data bus DB(16) Data bus EB(16)
单操作数间接寻址方框图
单操作数间接寻址类型: ArX: ARx包含了数据存储器地址 x ARx-/*ARx+ 访问后,ARx中的地址减1加1 ●x+ARx: 在寻址之前,ARx中的地址加1 ARx0B/ARx+0B:访问后,从ARx中以位倒序进位的 方式减去/加上ARO ●*ARx-0/*ARx+0:访问后,从ARx中减去/加上AR0 *ARx-%/*ARx+%:访问后,ARx中的地址以循环寻址 的方式减1加1 ARx0%/ARx+0%:访问后,从ARx中以循环寻址的方 式减去/加上ARO ●xARx(Ik): ARx和16-bit的长偏移(k)的和用来 作为数据存储器地址。ARx本身不 被修改
单操作数间接寻址类型: ⚫ *Arx: ARx包含了数据存储器地址 ⚫ *ARx-/ *ARx+ : 访问后, ARx中的地址减1/加1 ⚫ *+ARx: 在寻址之前,ARx中的地址加1 ⚫ *ARx-0B/ *ARx+0B :访问后,从ARx中以位倒序进位的 方式减去/加上AR0 ⚫ *ARx-0/ *ARx+0 : 访问后,从ARx中减去/加上AR0 ⚫ *ARx-%/ *ARx+% : 访问后,ARx中的地址以循环寻址 的方式减1/加1 ⚫ *ARx-0%/ *ARx+0% :访问后,从ARx中以循环寻址的方 式减去/加上AR0 ⚫ *ARx(lk): ARx和16-bit的长偏移(lk) 的和用来 作为数据存储器地址。ARx本身不 被修改
●*+ARx(Ik):在寻址之前,把一个带符号的16-bit的长偏移 (lk)加到ARx中,然后用新的ARx的值作为 数据存储器的地址 *十ARx(I)%:在寻址之前,把一个带符号的16-bit的长偏移 以循环寻址的方式加到ARx中,然后再用新 的ARx的值作为数据存储器的地址
⚫ *+ARx(lk): 在寻址之前,把一个带符号的16-bit的长偏移 (lk)加到ARx中,然后用新的ARx的值作为 数据存储器的地址 ⚫ *+ARx(lk)%:在寻址之前,把一个带符号的16-bit的长偏移 以循环寻址的方式加到ARx中,然后再用新 的ARx的值作为数据存储器的地址
编程举例: Iumr egs .global x, y, Entry bss x,128,1 ;put "x" on single page sect program STM 2,AR0 set index value to 2 ARo = index register STM #x+126,AR1 i start near end of page ADD #1,A,B STI B, *AR1+ store at x+126 ADD #1,B,A STL A,*AR1+0 :store at AR1+2*(AR1+2)=A ADD 1,A,B STL B,*(#x+140) store at x+140 :(absolute address plus index)
编程举例:
编程举例:y=∑ ax:=loco +aIr+ac +ax 间接寻址编程: mmregs bss x 4.1 MAC AR2+, A a word1,2,3,4 LD MARI+, T sect“ program” MAC *AR2+, a STM #a. ARI STM #X. AR2 LD¨AR1,T LD #O. A MAC *ar2, a LD *aRI+, t MAC *AR2+, a LD arl+, t
编程举例: 0 0 1 1 2 2 3 3 3 0 y0 a x a x a x a x a x i = i i = + + + = 间接寻址编程: .mmregs .bss x, 4, 1 a .word 1, 2, 3, 4 .sect “program” STM #a, AR1 STM #x, AR2 LD #0, A LD *AR1+,T MAC *AR2+,A LD *AR1+,T MAC *AR2+,A LD *AR1+,T MAC *AR2+,A LD *AR1,T MAC *AR2,A …