📄 c28x寻址方式详解.txt
字号:
MOV loc16,*(0:16bit) ; [loc16] = [0:16bit]
MOV *(0:16bit),loc16 ; [loc16] = [0:16bit]
(2)
*(PA)方式,地址的高16位为0,低16位为PA中的16位二进制立即数。当该指令连续使用时,每次地址都会后加。该模式寻址时,在访问IO空间时,IO选通信号被置位。用数据地址线访问IO空间。可用指令:
OUT *(PA),loc16 ; IOspace[0:PA] = [loc16]
UOUT *(PA),loc16 ; IOspace[0:PA] = [loc16] (unprotected)
IN loc16,*(PA) ; [loc16] = IOspace[0:PA]
(3)
0:pma方式,22位的地址高6位为0,低16位为16位二进制立即数pma,当该指令连续使用时,每次地址都会后加。只能寻址低64k程序空间。可用指令:
MAC P,loc16,0:pma ; ACC = ACC + P << PM,P = [loc16] *
ProgSpace[0:pma]
(4)
*(pma)方式,22位的地址高6位为0,低16位为16位二进制立即数pma,当该指令连续使用时,每次地址都会后加。只能寻址低64k程序空间。可用指令:
XPREAD loc16,*(pma) ; [loc16] = ProgSpace[0x3F:pma]
XMAC P,loc16,*(pma) ; ACC = ACC + P << PM,P = [loc16] *
ProgSpace[0x3F:pma]
XMACD P,loc16,*(pma) ; ACC = ACC + P << PM,P = [loc16] *
ProgSpace[0x3F:pma],[loc16+1] = [loc16]
程序空间间接寻址:
(1)
*(AL)方式,22位的地址高6位为0x3F,低16位为AL,当该指令连续使用时,AL的内容被复制到一个影子寄存器中,并在每次地址后加,AL的内容不变。只能寻址低64k程序空间。可用指令:
XPREAD loc16,*AL ; [loc16] = ProgSpace[0x3F:AL]
XPWRITE *AL,loc16 ; ProgSpace[0x3F:AL] = [loc16]
(2)
*XAR7方式,22位地址为XAR7,当在指令XPREAD或XPWRITE中连续使用时,XAR7的内容被复制到一个影子寄存器中,并每次地址后加,XAR7的内容不变。其它指令则不会。可用指令:
MAC P,loc16,*XAR7 ; ACC = ACC + P << PM,P = [loc16] *
ProgSpace[*XAR7]
DMAC ACC:P,loc32,*XAR7 ; ACC = ([loc32].MSW *
ProgSpace[*XAR7].MSW) >> PM,
; P = ([loc32].LSW * ProgSpace[*XAR7].MSW)
>> PM
QMACL P,loc32,*XAR7 ; ACC = ACC + P >> PM,
; P = ([loc32] * ProgSpace[*XAR7]) >> 32
IMACL P,loc32,*XAR7 ; ACC = ACC + P,
; P = ([loc32] * ProgSpace[*XAR7]) << PM
PREAD loc16,*XAR7 ; [loc16] = ProgSpace[*XAR7]
PWRITE *XAR7,loc16 ; ProgSpace[*XAR7] = [loc16]
(2) *XAR7++方式,22位地址为XAR7,
16位操作时XAR7=XAR7+1,32位操作时XAR7=XAR7+2,指令重复时,地址后加。可用指令:
MAC P,loc16,*XAR7++ ; ACC = ACC + P << PM,P = [loc16] *
ProgSpace[*XAR7++]
DMAC ACC:P,loc32,*XAR7++ ; ACC=([loc32].MSW *
ProgSpace[*XAR7++].MSW)>>PM,
; P=([loc32].LSW *
ProgSpace[*XAR7++].MSW)>>PM
QMACL P,loc32,*XAR7++ ; ACC = ACC + P >> PM, P = ([loc32] *
ProgSpace[*XAR7++]) >> 32
IMACL P,loc32,*XAR7++ ; ACC = ACC + P, P = ([loc32] *
ProgSpace[*XAR7++]) << PM
字节寻址:
*+XARn[AR0],*+XARn[AR0],*+XARn[3位二进制立即数],32位地址为XARn+偏移量(AR0/AR1/3位二进制立即数),如果偏移量为偶数值,则访问16位存储器位置的低有效位,高有效位不变;如果为奇数,则访问16位存储器位置的高有效位,低有效位不变。其它所有寻址模式,只访问访问寻址位置的低有效位,不改变高有效位。可用指令:
MOVB AX.LSB,loc16 ; if( address mode == *+XARn[AR0/AR1/3bit] )
; if( offset == even )
; AX.LSB = [loc16].LSB;
; AX.MSB = 0x00;
; if( offset == odd )
; AX.LSB = [loc16].MSB;
; AX.MSB = 0x00;
; else
; AX.LSB = [loc16].LSB;
; AX.MSB = 0x00;
MOVB AX.MSB,loc16 ; if( address mode == *+XARn[AR0/AR1/3bit] )
; if( offset == even )
; AX.LSB = untouched;
; AX.MSB = [loc16].LSB;
; if( offset == odd )
; AX.LSB = untouched;
; AX.MSB = [loc16].MSB;
; else
; AX.LSB = untouched;
; AX.MSB = [loc16].LSB;
MOVB loc16,AX.LSB ; if( address mode == *+XARn[AR0/AR1/3bit] )
; if( offset == even )
; [loc16].LSB = AX.LSB
; [loc16].MSB = untouched;
; if( offset == odd )
; [loc16].LSB = untouched;
; [loc16].MSB = AX.LSB;
; else
; [loc16].LSB = AX.LSB;
; [loc16].MSB = untouched;
MOVB loc16,AX.MSB ; if( address mode == *+XARn[AR0/AR1/3bit] )
; if( offset == even )
; [loc16].LSB = AX.MSB
; [loc16].MSB = untouched;
; if( offset == odd )
; [loc16].LSB = untouched;
; [loc16].MSB = AX.MSB;
; else
; [loc16].LSB = AX.MSB;
; [loc16].MSB = untouched;
文章录入:admin 责任编辑:admin
上一篇文章: TMS320F240与PC机串行通讯的设计
下一篇文章: TI F2812全系列开发板简介
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -