SP直接寻址方式CPL=1 用法:*SP(offset) 23位地址的形成:[SPH:(SP+offset)] ◆高7位由SPH提供; 不允许超出0~127,超出则编译报错 ◆低16位为SP和一个7位的偏移地址(offset)的和; ●SPH和SP合并后形成扩展数据堆栈指针(XSP): ◆可以单独向SPH和SP赋值,也可以使用一条指令 向XSP赋值。 女主数据页0中的堆栈只能用000060h~00 FFFFh 中的空间。因为000000h~00005Fh是保留给存 储映射寄存器用的。 24
2. SP直接寻址方式 ⚫ 23位地址的形成: [SPH:(SP+offset)] ◆高7位由SPH提供; ◆低16位为SP和一个7 位的偏移地址(offset)的和; ⚫ SPH和SP合并后形成扩展数据堆栈指针(XSP); ◆可以单独向SPH和SP赋值, 也可以使用一条指令 向XSP赋值。 ☼主数据页0中的堆栈只能用00 0060h~00 FFFFh 中的空间。因为00 0000h~00 005Fh是保留给存 储映射寄存器用的。 24 不允许超出0~127, 超出则编译报错 CPL=1 用法:*SP(offset)
SPH SP+offset 数据空间 0000000 0000000000000000 主数据页0: 0000000 1111111111111111 0000h~00 FFFFh 0000001 0000000000000000 主数据页1: 0000001 1111111111111111 010000h~01 FFFFh 0000010 0000000000000000 主数据页2: 8 0000010 1111111111111111 020000h~02 FFFFh ●●●●● 8 1111111 0000000000000000 主数据页127: 1111111 1111111111111111 7F 0000h~7F FFFFh 图4-5SP直接寻址方式 25
图4-5 SP直接寻址方式 25 SPH SP+offset 数据空间 000 0000 .. . 000 0000 0000 0000 0000 0000 .. . 1111 1111 1111 1111 主数据页 0: 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
SP直接寻址方式举例 例4-4*SP(offset)用于数据存储器寻址, 设SPH=0,SP=FFO0h。 CPL=1 (1) MOV *SP(5),T2 SPH:(SP+offset)=00:FF05h ,CPU从00FF05h处读取数据装入T2 DP直接寻址方式和SP直接寻址方式相互排斥,在程 序的任一位置只能有一种方式存在,并符合CPL值。 CPL值定义:BCLR CPL ;清零CPL(运行时) :.CPL off ;告知汇编器CPL=O BSET CPL ;置位CPL(运行时 ) .CPL_ n :告知汇编器CPL=1 26
例4-4 *SP(offset)用于数据存储器寻址, 设 SPH=0, SP=FF00h。 (1) MOV *SP(5),T2 ; SPH: (SP+offset)=00:FF05h ; CPU从00 FF05h处读取数据装入T2 SP直接寻址方式举例 26 CPL=1 ⚫ DP直接寻址方式和SP直接寻址方式相互排斥, 在程 序的任一位置只能有一种方式存在, 并符合CPL值。 CPL值定义: BCLR CPL ;清零CPL(运行时) .CPL_off ;告知汇编器CPL=0 BSET CPL ;置位CPL(运行时) .CPL_on ;告知汇编器CPL=1
3.寄存器位直接寻址方式 如果bitoffset为0,侧访问寄存器的最低位(D0); 如果bitoffset为3,则访问寄存器的第3位(D3)。 Bitoffset:M 11109876543 2 MSB 寄存器 LSB M为39或15(根据不同的寄存器而定) ●操作数中偏移@bitoffset是相对于寄存器最低位来说的; ●仅有寄存器位测试/设置/清零/求补等指令支持这种寻 址方式; 例:BCLR@3,AC2;CPU将AC2的位3清0 ●仅能访问下列寄存器的各位:AC0~AC3,AR0~AR7, 例:BSET@0,AR2; T0~T3。 27
3. 寄存器位直接寻址方式 ⚫操作数中偏移@bitoffset是相对于寄存器最低位来说的; ⚫仅有寄存器位测试/设置/清零/求补等指令支持这种寻 址方式; ⚫仅能访问下列寄存器的各位: AC0~AC3,AR0~AR7, T0~T3。 M 11 10 9 8 7 6 5 4 3 2 1 0 MSB LSB ... ... M为39或15(根据不同的寄存器而定) Bitoffset: 寄存器 如果bitoffset为0, 则访问寄存器的最低位(D0); 如果bitoffset为3, 则访问寄存器的第3位(D3) 。 27 例: BCLR @3, AC2 ;CPU将AC2的位3清0 例: BSET @0, AR2 ;
3.寄存器位直接寻址方式 例4-12@bitoffset用于对寄存器位的寻址。 (见114页)(4.1.6寄存器位的寻址) (1 BSET @O,AC3 ;CPU将AC3的位0置为1 (2)BTSTP@30,AC3;把AC3的位30和位31分别 复制到状态寄存器ST055的位TC1和TC2 再如:BCLR@3,AC2 ;CPU将AC2的位3清0 28
例4-12 @bitoffset用于对寄存器位的寻址。 3. 寄存器位直接寻址方式 28 (2) BTSTP @30, AC3; 把AC3的位30和位31分别 复制到状态寄存器ST0_55的位TC1和TC2 再如: BCLR @3, AC2 ;CPU将AC2的位3清0 (见114页) (4.1.6 寄存器位的寻址) (1) BSET @0, AC3 ; ;CPU将AC3的位0置为1