DP直接寻址方式和SP直接寻址方式相互排 斥,在程序的任一位置只能有一种方式存在。 通过设置ST155的CPL位选择。 CPL 寻址模式的选择 BCLR CPL;清零CPL DP直接寻址模式 CPL off;告知汇编器CPL=O BSET CPL:置位CPL 1 SP直接寻址模式 CPL on;告知汇编器CPL=1 寄存器位直接寻址方式和PDP直接寻址方式 不受CPL位的影响。 19
⚫DP直接寻址方式和SP直接寻址方式相互排 斥, 在程序的任一位置只能有一种方式存在。 ⚫通过设置ST1_55的CPL位选择。 ⚫寄存器位直接寻址方式和PDP直接寻址方式 不受CPL位的影响。 CPL 寻址模式的选择 0 DP直接寻址模式 1 SP直接寻址模式 19 BCLR CPL ;清零CPL .CPL_off ;告知汇编器CPL=0 BSET CPL ;置位CPL .CPL_on ;告知汇编器CPL=1
.DP直接寻址方式 例:MOV@05h,T2 。23位地址的形成: DPH:(DP+Doffset) 高7位由DPH寄存器提供DPH是主数据页地址,每页64k字 ◆ ◆低16位由下面两个值的和组成: >(1)16位数据页寄存器(DP):标识一个主数据页 内128字的局部数据页的首地址; >(2)7位偏移地址(Doffset)(0w127):给出寻址 单元距离首地址的偏移量(正数)。访问数据空间尽量 用@Doffset的形式给出(如:@7Fh)。访问存储器映 射寄存器用限定符mmap()表示,如:mmap(@ACOL). mmap(O相当于使DPH=DP=O,CPL=0。 20
访问存储器映 射寄存器用限定符mmap()表示,如:mmap(@AC0L)。 mmap()相当于使DPH=DP=0, CPL=0。 1. DP直接寻址方式 ⚫ 23位地址的形成: ◆ 高7位由DPH寄存器提供; ◆ 低16位由下面两个值的和组成: ➢(1) 16位数据页寄存器(DP): 标识一个主数据页 内128字的局部数据页的首地址; ➢(2) 7位偏移地址(Doffset) (0~127) : 给出寻址 单元距离首地址的偏移量(正数)。 20 DPH是主数据页地址,每页64k字 访问数据空间尽量 用@Doffset的形式给出(如:@7Fh)。 DPH:(DP+Doffset) 例: MOV @05h,T2
DPH:(DP+Doffset)中的和不能超出主数据页,若超出则 回到主数据页的起始地垭(尽量避免),即不能跨页寻址。 DPH DP+Doffset 数据空间 0000000 0000000000000000 主数据页0: 0000000 11111111 000000h~00 FFFFh 0000001 0000000000000000 主数据页1: 0000001 111111111111111 010000h~01 FFFFh 0000010 0000000000000000 主数据页2: 0000010 1111111111111111 020000h~02 FFFFh : 1111111 0000000000000000 主数据页127: 1111111 1111111111111111 7F0000h~≈7 F FFFFh 图4-4DP直接寻址方式 21
DPH:(DP+Doffset)中的和不能超出主数据页, 若超出则 回到主数据页的起始地址(尽量避免), 即不能跨页寻址。 图4-4 DP直接寻址方式 DPH DP+Doffset 数据空间 000 0000 000 0000 0000 0000 0000 0000 1111 1111 1111 1111 主数据页0: 00 0000h~00 FFFFh 000 0001 000 0001 0000 0000 0000 0000 1111 1111 1111 1111 主数据页1: 01 0000h~01 FFFFh 000 0010 000 0010 0000 0000 0000 0000 1111 1111 1111 1111 主数据页2: 02 0000h~02 FFFFh 111 1111 111 1111 0000 0000 0000 0000 1111 1111 1111 1111 主数据页127: 7F 0000h~7F FFFFh 21
。CPU连接DPH和DP成为一个扩展数据页指针XDP: 存储单元寻址:DPH:(DP+Doffset) 例:MoV@05h,T2 ●汇编器计算偏移地址的方法:因访问数据空间还是存储器 映射寄存器而计算方法有所不同: 访问空间 偏移地址Doffset)的计算 描述 Daddr是一16位的局部地址, 数据空间Doffset=-(Daddr-.dp)&7Fh,dp伪指令声明采用的DP值, “&”表示与操作 存储器映 Daddrz是一个16位的局部地 射寄存器 Doffset=Daddr 7Fh 址,“&”表示与操作,需要使 用mmap0指令 @12F4h,@foo,@#foo, mmap(@ARO);mmap(74h) @#(foo+2),@(fo0+2)i mmap(12F4h) .dp值是“.dp1200h”伪指令中给出的值(如1200h,或以标号给出),使 其与DP寄存器值相同.若无.dp伪指令则.dp值是0,可用@(0w7Fh)
⚫CPU连接DPH和DP成为一个扩展数据页指针XDP; ⚫汇编器计算偏移地址的方法:因访问数据空间还是存储器 映射寄存器而计算方法有所不同: 22 访问空间 偏移地址(Doffset)的计算 描 述 数据空间 Doffset=(Daddr - .dp)& 7Fh Daddr是一16位的局部地址, .dp伪指令声明采用的DP值, “&”表示与操作 @12F4h mmap(@AR0); , @foo, @#foo, @#(foo+2) , @(foo+2); mmap(12F4h) .dp值是“.dp 1200h”伪指令中给出的值(如1200h, 或以标号给出), 使 其与DP寄存器值相同. 若无.dp伪指令则.dp值是0,可用@(0~7Fh). mmap(74h) 存储单元寻址: DPH:(DP+Doffset) 存储器映 射寄存器 Doffset=Daddr & 7Fh Daddr是一个16 位的局部地 址, “&” 表示与操作, 需要使 用mmap()指令 例:MOV @05h,T2
低7位作为偏移地址Doffset,.尽量用@(0~7Fh) 例4-3:@Daddr用于数据存储器寻址 设DPH=03h,DP=0000h。 CPL=0 (1)MOV@0005h,T2 ;DPH:(DP+Doffset)=03:(0000h+0005h)=030005h ;CPU从030005h处读取数据装入T2 例4-10:@Daddr用于MMR寻址时,DPH=DP=00h 并且采用CPL=O。 MOV mmap(@ACOL),AR2 ;DPH:DP+Doffset)=00:(0000h+0008h)=000008h ;CPU从000008h处读取数据装入AR2 即使DPH,DP两个寄存器的值此时都不为0,也不影响MMR的寻址 按上式计算地址。 mmapO相当于使DPH=DP=O,CPL=O 23
(1) MOV @0005h,T2 ;DPH: (DP+Doffset)=03: (0000h+0005h)=03 0005h ;CPU从03 0005h处读取数据装入T2 例4-10: @Daddr用于MMR寻址时, DPH=DP=00h, MOV mmap(@AC0L), AR2 ;DPH:(DP+Doffset)= 00:(0000h+0008h)=00 0008h ;CPU从00 0008h处读取数据装入AR2 例4-3: @Daddr用于数据存储器寻址。 设DPH=03h, DP=0000h。 23 并且采用CPL=0。 低7位作为偏移地址Doffset,尽量用@(0~7Fh) 即使DPH, DP两个寄存器的值此时都不为0, 也不影响MMR的寻址 按上式计算地址。 CPL=0 mmap()相当于使DPH=DP=0, CPL=0