- No category
advertisement
▼
Scroll to page 2
of 13
HT8 MCU 扩展指令集应用须知 HT8 MCU 扩展指令集应用须知 文件编码:HA0407S 简介 Holtek Flash MCU 扩展指令用来提供更大范围的数据存储器寻址。当被存取的数据存储器 位于 Bank0 之外的任何数据存储器 Sector,扩展指令可直接存取数据存储器而无需使用间 接寻址,此举也提高了 CPU 韧体性能。支持扩展指令的 MCU,每条扩展指令比对应的普 通指令增加 1 个指令周期。本文档将以 HT66F70A 为例对扩展指令的应用进行说明。 使用扩展指令存取各 Bank 的 RAM 以 HT66F70A 为例,用扩展指令对不同 Bank 的 RAM 进行存取,并进行简单的算术运算。 对于扩展指令而言,RAM 的地址格式要明确,例如 Bank 3,Address A3H,在扩展指令中 其地址为 03A3H,即地址高 8 位为 Bank 的序号,低 8 位为对应 Bank 中的地址。以下为扩 展指令对 Bank 1 和 Bank 2 的 RAM 分别赋值, 并且取 Bank 1 和 Bank 2 的值进行加法运算, 把和存于 Bank 3 中。我们注意到,扩展指令以“L”开头,若使用非扩展指令则编译时提 示出错,因为非扩展指令默认对 Bank 0 数据进行操作。 扩展指令存取举例: include HT66F70A.inc ds .section AT 080H 'data' cs .section 'code' ORG 00H MAIN: MOV A,11H LMOV [0180H],A MOV A,22H LMOV [0280H],A LMOV A,[0180H] LADD A,[0280H] LMOV [0380H],A ; HT66F70A RESET VECTOR ; 将数值 11H 赋值给 Bank1 地址 80h 所指的位置 ; 将数值 22H 赋值给 Bank2 地址 80h 所指的位置 ; 将 Bank1 地址 80h 所指的数值赋给 ACC ; Bank1 80h 的数值和 Bank2 80h 的数值相加 ; 相加后的和储存在 Bank3 地址 80h 所在的位置 以上举例是直接对地址进行存取,我们程序设计习惯对变量进行操作,下面给出用扩展指 令对各 Bank 变量进行存取的例子。其功能和上例一样。(本范例中若使用非扩展指令,则 编译不会出错,但非扩展指令只对 Bank 0 的变量操作,如 MAIN 函数第二行 LMOV ADDRESS1,A 改为非扩展指令 MOV,则 ADDRESS1 的值不会改变,而 Bank 0 的首地址被 赋值 11H)。 HA0407S V1.00 1 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 include HT66F70A.inc RAMBank 1 DS1 RAMBank 2 DS2 RAMBank 3 DS3 ds1 .section AT 080H 'data' ADDRESS1 DB ? ds2 .section AT 080H 'data' ADDRESS2 DB ? ds3 .section AT 080H 'data' ADDRESS3 DB ? cs .section 'code' ORG 00H MAIN: MOV A,11H LMOV ADDRESS1,A MOV A,22H LMOV ADDRESS2,A LMOV A,ADDRESS1 LADD A,ADDRESS2 LMOV ADDRESS3,A JMP $ ; ; ; ; 声明 DS1 位于 RAM Bank 1 声明 DS2 位于 RAM Bank 2 声明 DS3 位于 RAM Bank 3 声明位于 RAM Bank 1 的变数 ; 声明位于 RAM Bank 2 的变数 ; 声明位于 RAM Bank 3 的变数 ; HT66F70A RESET VECTOR ; 将数值 11H 赋值给位于 Bank 1 地址为 80h 的变量 ADDRESS1 ; 将数值 22H 赋值给位于 Bank 2 地址为 80h 的变量 ADDRESS1 ; 将 Bank 1 的 ADDRESS1 赋值给 ACC ; Bank1 ADDRESS1 和 Bank 2 ADDRESS2 相加,和存于 ACC ; 将相加得到的和存于 Bank 3 的变数 ADDRESS3 中 最终 ADDRESS3 的值为 33H,地址为 0380H,该范例实现了对不同 Bank 的存取。 使用间接寻址 MP1L/1H、MP2L/2H 存取各 Bank 的 RAM HT66F70A 提供五个间接寻址指针,即 MP0、MP1L、MP1H、MP2L 和 MP2H。由于这些 指标在数据存储器中能像普通的寄存器一般被操作,因此提供了一个寻址和数据追踪的有 效方法。当对间接寻址寄存器进行任何操作时,微控制器指向的实际地址是由间接寻址指 针所指定的地址。MP0,IAR0 用于访问 Section0,而 MP1L/MP1H 和 IAR1、MP2L/MP2H 和 IAR2 根据 MP1H 或 MP2H 寄存器可以访问所有的 Section (MP1H、 MP2H 指向 RAM Bank 的序号,作用类似于 BP 指针)。以 HT66F70A 为例,利用间接寻址指令给 RAM 的整个 Bank 1 赋值为 11H,给整个 Bank 2 赋值为 22H,然后对整个 Bank 1 和 Bank 2 的内容进行互换。 以往 MCU 间接寻址指令通常只有两组,并且需要 BP 切换,也没有扩展指令,对于除 Bank 0 外的 Bank 之间的内容 MP1L/MP1H 和 IAR1、MP2L/MP2H 和 IAR2 存取 RAM 举例: include HT66F70A.inc RAMBank 1 DS1 RAMBank 2 DS2 ds .section AT 080H 'data' BLOCK DB ? NUM DB ? ds1 .section AT 080H 'data' ADDRESS1 DB ? ds2 .section AT 080H 'data' ADDRESS2 DB ? cs .section 'code' ORG 00H MAIN: MOV A,080H MOV BLOCK,A MOV A,01H MOV MP1H,A MOV A,02H MOV MP2H,A MOV A,OFFSET ADDRESS1 HA0407S V1.00 ;声明 DS1 位于 RAM Bank 1 ;声明 DS2 位于 RAM Bank 2 ;默认位于 RAM Bank 0 的变数 ;声明位于 RAM Bank 1 的变数 ;声明位于 RAM Bank 2 的变数 ; HT66F70A RESET VECTOR ; RAM 一个 Bank 共 080H=128 个字节 ; MP1H=01H, 设定 MP1L/MP1H,IAR1 对 Bank 1 进行间接寻址 ; MP2H=01H, 设定 MP2L/MP2H,IAR2 对 Bank 2 进行间接寻址 2 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 MOV MOV MOV LOOP: MP1L,A A,OFFSET ADDRESS2 MP2L,A MOV MOV MOV MOV INC INC SDZ JMP MOV MOV DEC DEC LOOP1: A,011H IAR1,A A,022H IAR2,A MP1L MP2L BLOCK LOOP A,080H BLOCK,A MP1L MP2L LMOV LMOV LMOV LMOV LMOV LMOV DEC DEC SDZ JMP JMP ; 取 Bank 1 变量 ADDRESS1 的地址,即 Bank1 首地址[0180h] ; 取 Bank 2 变量 ADDRESS2 的地址,即 Bank2 首地址[0280h] ; LOOP 的作用是使整个 RAM Bank 1 赋值为 011h, ; 整个 RAM Bank 2 赋值为 022h ; 对 Bank 1 赋值 011h ; 对 Bank 2 赋值 022h ; Bank 1 指针加 1 ; Bank 2 指针加 1 ; LOOP1 的作用是使整个 RAM Bank 1 的数值和整个 ; RAM Bank 2 的数值进行互换 A,IAR1 NUM,A A,IAR2 IAR1,A A,NUM IAR2,A MP1L MP2L BLOCK LOOP1 $ ; Bank 1 数值赋给中间变数 NUM ; Bank 2 数值赋给 Bank 1 ; 中间变数(Bank 1)数值赋给 Bank 2 ; Bank 1 指针减 1 ; Bank 2 指针减 1 ;停止 执行完 LOOP 后,整个 Bank 1 的值为 11H,Bank 2 的值为 22H;而执行 LOOP1 互换后, 整个 Bank 1 的值为 22H,Bank 2 的值为 11H。 扩展指令与非扩展指令的差异 (多 RAM Bank 时效率提升) 因 Holtek C V3 的架构与 Holtek C V2 不同,扩展指令对 Holtek C V3 及 Holtek C V2 的影响 也不同,下面主要介绍 Holtek C V3。 非扩展指令只能直接处理到 RAM bank0, 而扩展指令则可以直接处理到所有的 RAM bank。 非扩展指令 HA0407S V1.00 对应的扩展指令 MOV, ADD, SUB …… 每条指令 size : 1 word LMOV, LADD, LSUB …… 每条指令 size : 2 words 只能直接处理到 RAM bank 0 可以直接处理所有 RAM bank 3 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 非扩展指令对 RAM 的存取 对无扩展指令架构的 MCU,RAM BANK0 以外的地址只能用间接寻址的方式访问,下面范 例可以看出,间接寻址的指令比直接寻址多出 5 条,所以当 RAM bank0 溢出时,用户可以 选择把较少用到的变量定义到其它 bank,比较常用的变量定义在 bank0。 (非扩展指令)直接寻址(Bank 0) (非扩展指令)间接寻址(非 Bank 0) Rambank 0 ds ds .section ‘data’ _var0 db ? Rambank 1 ds ds .section ‘data’ _var1 db ? MOV A, 40H MOV _var0, A MOV A, BANK _var1 OR A, ROM_BANK FUNC MOV BP, A MOV A, OFFSET _var1 MOV MP1, A MOV A, 40H MOV IAR1, A Code size : 2 words Code size : 7 words 扩展指令和非扩展指令对非 bank0 的 RAM 的存取对比 若无扩展指令的 IC:对非 bank0 的 RAM 采间接寻址的写法。 若有扩展指令的 IC:对非 bank0 的 RAM 也可以用直接寻址的写法,存取 RAM 动作所 需指令的 code size 比使用间接寻址的方式小。以 LMOV 为例,使用汇编语言: 非扩展指令间接寻址(非 Bank 0) 扩展指令直接寻址(非 Bank 0) Rambank 1 ds ds .section ‘data’ _var1 db ? Rambank 1 ds ds .section ‘data’ _var1 db ? MOV A, BANK _var1 OR A, ROM_BANK FUNC MOV BP, A MOV A, OFFSET _var1 MOV MP1, A MOV A, 40H MOV IAR1, A MOV A, 40H LMOV _var1, A Code size : 7 words Code size : 3 words 有无扩展指令对 C Compiler 结果影响 MCU 无扩展指令时 Holtek C V3 的做法 Holtek C V2 对变量存取(不论是在 bank0 与否)都使用间接寻址,较没效率。 Holtek C V3 架构上已改成将所有的变量配置在 bank0,以方便使用直接寻址。 优点: 直接寻址的 code 较有效率 缺点: 若变数太多,bank0 用尽,user 需自行手动调整将部份变数定义到 Bank1 以后(若有扩展 指令,则可改善) 对于非 bank0 变量的存取,也只能使用间接寻址 HA0407S V1.00 4 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 MCU 有扩展指令时 Holtek C V3 的做法 若 Holtek C V3 可以使用扩展指令的 MCU,User 不再需要手动调整变量的配置空间。 可完全由 Compiler/Linker 安排 对 bank0 的蛮数,使用非扩展指令直接寻址 对非 bank0 的变量,可以使用扩展指令直接寻址 Compiler产生指令: MOV A,40H LMOV _var1 , A 于 bank0 分配地址 于 bank0外 MOV A,40H MOV [xxh] , A MOV A,40H MOV [xxh] , A Holtek C V3 加入使用扩展指令后的效益估算 C 程序中,每一个对变量的存取指令,可以节省 4 words 一个实际的应用程序:使用 ROM size 为 4K words 的 MCU,存取了 86 次变数,则约可 减少 20%的 code,变量的使用量越大,效益越明显。 备注:变量存取次数,视产品而定, 86 次是根据搜集到的 Sample 计算得到。 效益估算范例: HA0407S V1.00 Total ROM Code Size 使用非扩展指令 间接寻址 4096 words 1668 words 使用扩展指令 直接寻址 4096 words 1668-86×4 =1324 words 5 / 13 效益说明 使用扩展指令的 code size 为原来使用 间接寻址的 80%(1324/1668) January 25, 2016 HT8 MCU 扩展指令集应用须知 扩展指令说明 惯例 x:立即数。 m:数据存储器地址,为了方便起见直接用“寄存器[m]”称之。 A:累加器。 i:第 0~7 位。 addr:程序内存地址。 助记符 说明 指令周期 影响标志位 算术运算 LADD A,[m] ACC 与寄存器[m]相加,结果放入 ACC LADDM A,[m] ACC 与寄存器[m]相加,结果放入寄存器[m] LADC A,[m] ACC 与寄存器[m]、进位标志位相加,结果放入 ACC LADCM A,[m] ACC 与寄存器[m]、进位标志位相加,结果放入寄存器[m] 2 Z, C, AC, OV, SC 2注 Z, C, AC, OV, SC 2 Z, C, AC, OV, SC 2注 Z, C, AC, OV, SC LSUB A,[m] ACC 与寄存器[m]相减,结果放入 ACC 2 Z, C, AC, OV, SC, CZ LSUBM A,[m] ACC 与寄存器[m]相减,结果放入寄存器[m] 2注 Z, C, AC, OV, SC, CZ LSBC A,[m] ACC 与寄存器[m]、进位旗目标反相减,结果放入 ACC 2 Z, C, AC, OV, SC, CZ LSBCM A,[m] ACC 与寄存器[m]、进位标志位相减,结果放入寄存器[m] 2注 Z, C, AC, OV, SC, CZ LDAA [m] 将加法运算中放入 ACC 的值调整为十进制数,并将结果放入寄存器[m] 2注 C LAND A,[m] ACC 与寄存器[m]做“与”运算,结果放入 ACC 2 Z LOR A,[m] ACC 与寄存器[m]做“或”运算,结果放入 ACC 2 Z LXOR A,[m] ACC 与寄存器[m]做“异或”运算,结果放入 ACC 2 Z 逻辑运算 LANDM A,[m] ACC 与寄存器[m]做“与”运算,结果放入寄存器[m] 2注 Z ACC 与寄存器[m]做“或”运算,结果放入寄存器[m] 2注 Z LORM A,[m] LXORM A,[m] ACC 与寄存器[m]做“异或”运算,结果放入寄存器[m] 2注 Z LCPL [m] 对寄存器[m]取反,结果放入寄存器[m] 2注 Z LCPLA [m] 对寄存器[m]取反,结果放入 ACC 2 Z LINCA [m] 递增寄存器[m],结果放入 ACC 2 Z LINC [m] 递增寄存器[m],结果放入寄存器[m] 2注 Z LDECA [m] 递减寄存器[m],结果放入 ACC 2 Z LDEC [m] 递减寄存器[m],结果放入寄存器[m] 2注 Z LRRA [m] 寄存器[m]右移一位,结果放入 ACC 2 无 LRR [m] 寄存器[m]右移一位,结果放入寄存器[m] 2注 无 LRRCA [m] 带进位将寄存器[m]右移一位,结果放入 ACC 2 C LRRC [m] 带进位将寄存器[m]右移一位,结果放入寄存器[m] 2注 C LRLA [m] 寄存器[m]左移一位,结果放入 ACC 2 无 LRL [m] 寄存器[m]左移一位,结果放入寄存器[m] 2注 无 LRLCA [m] 带进位将寄存器[m]左移一位,结果放入 ACC 2 C LRLC [m] 带进位将寄存器[m]左移一位,结果放入寄存器[m] 2注 C LMOV A,[m] 将寄存器[m]送至 ACC 2 无 LMOV [m],A 将 ACC 送至寄存器[m] 2注 无 LCLR [m].i 清除寄存器[m]的位 2注 无 LSET [m].i 置位寄存器[m]的位 2注 无 LSZ [m] 如果寄存器[m]为零,则跳过下一条指令 2注 无 LSZA [m] 寄存器[m]送至 ACC,如果内容为零,则跳过下一条指令 1注 无 LSNZ [m] 如果寄存器[m]不为零,则跳过下一条指令 2注 无 LSZ [m].i 如果寄存器[m]的第 i 位为零,则跳过下一条指令 2注 无 LSNZ [m].i 如果寄存器[m]的第 i 位不为零,则跳过下一条指令 2注 无 LSIZ [m] 递增寄存器[m],如果结果为零,则跳过下一条指令 2注 无 LSDZ [m] 递减寄存器[m],如果结果为零,则跳过下一条指令 2注 无 LSIZA [m] 递增寄存器[m],将结果放入 ACC,如果结果为零,则跳过下一条指令 2注 无 LSDZA [m] 递减寄存器[m],将结果放入 ACC,如果结果为零,则跳过下一条指令 2注 无 递增和递减 移位 数据传送 位运算 转移 HA0407S V1.00 6 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 助记符 说明 指令周期 影响标志位 查表 LTABRD [m] 读取当前页的 ROM 内容,并送至寄存器[m]和 TBLH 3注 无 LTABRDL [m] 读取最后页的 ROM 内容,并送至寄存器[m]和 TBLH 3注 无 LITABRD [m] 读表指针 TBLP 自加,读取当前页的 ROM 内容,并送至寄存器[m]和 TBLH 3 注 无 LITABRDL [m] 读表指针 TBLP 自加,读取最后页的 ROM 内容,并送至寄存器[m]和 TBLH 3 注 无 其它指令 LCLR [m] 清除寄存器[m] 2注 无 LSET [m] 置位寄存器[m] 2注 无 LSWAP [m] 交换寄存器[m]的高低字节,结果放入寄存器[m] 2注 无 LSWAPA [m] 交换寄存器[m]的高低字节,结果放入 ACC 2 无 注:1. 对扩展跳转指令而言,如果比较的结果牵涉到跳转即需 4 个周期,如果没有发生跳转,则只需两个周期。 2. 任何扩展指令若要改变 PCL 的内容将需要 3 个周期来执行。 扩展指令定义 扩展指令被用来直接存取存储在任何寄存器[m] Sector 中的数据。 LADC A, [m] Add Data Memory to ACC with Carry 指令说明 将指定的寄存器[m]、累加器内容以及进位标志位相加,结果存放到累加器。 菜单示 ACC ← ACC + [m] + C 影响标志位 OV、Z、AC、C、SC LADCM A, [m] Add ACC to Data Memory with Carry 指令说明 将指定的寄存器[m]、累加器内容和进位标志位相加,结果存放到指定的寄存器[m]。 菜单示 影响标志位 OV、Z、AC、C、SC LADD A, [m] Add Data Memory to ACC 指令说明 将指定的寄存器[m]和累加器内容相加,结果存放到累加器。 菜单示 影响标志位 OV、Z、AC、C、SC LADDM A, [m] 指令说明 菜单示 影响标志位 HA0407S V1.00 [m] ← ACC + [m] + C ACC ← ACC + [m] Add ACC to Data Memory 将指定的寄存器[m]和累加器内容相加,结果存放到指定的寄存器[m]。 [m] ← ACC + [m] OV、Z、AC、C、SC LAND A, [m] Logical AND Data Memory to ACC 指令说明 将累加器中的数据和指定寄存器[m]内容做逻辑与,结果存放到累加器。 菜单示 影响标志位 Z ACC ← ACC“AND”[m] LANDM A, [m] Logical AND ACC to Data Memory 指令说明 将指定寄存器[m]内容和累加器中的数据做逻辑与,结果存放到寄存器[m]。 菜单示 [m] ← ACC“AND”[m] 影响标志位 Z LCLR [m] Clear Data Memory 指令说明 将指定寄存器[m]的内容清零。 菜单示 [m] ← 00H 影响标志位 无 LCLR [m].i Clear bit of Data Memory 指令说明 指将指定寄存器[m]的 i 位内容清零。 菜单示 [m].i ← 0 影响标志位 无 7 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 LCPL [m] Complement Data Memory 指令说明 将指定寄存器[m]中的每一位取逻辑反,相当于从 1 变 0 或 0 菜单示 [m] ← [m] 影响标志位 Z LCPLA [m] Complement Data Memory with result in ACC 指令说明 将指定寄存器[m]中的每一位取逻辑反,相当于从 1 变 0 或 0 变 1,结果被存放回累加器 且数据寄存器的内容保持不变。 菜单示 ACC ← [m] 影响标志位 LDAA [m] 指令说明 Z Decimal-Adjust ACC for addition with result in Data Memory 将累加器中的内容转换为 BCD (二进制转成十进制)码。如果低四位的值大于“9”或 AC=1, 那么 BCD 调整就执行对低四位加“6”,否则低四位保持不变;如果高四位的值大于“9”或 C=1,那么 BCD 调整就执行对高四位加“6”。 BCD 转换实质上是根据累加器和标志位执行 00H,06H,60H 或 66H 的加法运算,结果 存放到寄存器[m]。只有进位标志位 C 受影响,用来指示原始 BCD 的和是否大于 100, 并可以进行双精度十进制数的加法运算。 菜单示 影响标志位 HA0407S V1.00 [m] ← ACC + 00H 或 [m] ← ACC + 06H 或 [m] ← ACC + 60H 或 [m] ← ACC + 66H C LDEC [m] Decrement Data Memory 指令说明 将指定寄存器[m]的内容减 1。 菜单示 [m] ← [m] – 1 影响标志位 Z LDECA [m] Decrement Data Memory with result in ACC 指令说明 将指定寄存器[m]的内容减 1,把结果存放回累加器并保持指定寄存器[m]的内容不变。 菜单示 ACC ← [m] – 1 影响标志位 Z LINC [m] Increment Data Memory 指令说明 将指定寄存器[m]的内容加 1。 菜单示 [m] ← [m] + 1 影响标志位 Z LINCA [m] Increment Data Memory with result in ACC 指令说明 将指定寄存器[m]的内容加 1,结果存放回累加器并保持指定的寄存器[m]内容不变。 菜单示 ACC ← [m] + 1 影响标志位 Z LMOV A, [m] Move Data Memory to ACC 指令说明 将指定寄存器[m]的内容复制到累加器中。 菜单示 ACC ← [m] 影响标志位 无 LMOV [m], A Move ACC to Data Memory 指令说明 将累加器的内容复制到指定寄存器[m]。 菜单示 [m] ← ACC 影响标志位 无 LOR A, [m] Logical OR Data Memory to ACC 指令说明 将累加器中的数据和指定的寄存器[m]内容逻辑或,结果存放到累加器。 菜单示 ACC ← ACC“OR”[m] 影响标志位 Z 8 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 HA0407S V1.00 LORM A, [m] Logical OR ACC to Data Memory 指令说明 将存在指定寄存器[m]中的数据和累加器逻辑或,结果放到寄存器[m]。 菜单示 [m] ← ACC“OR”[m] 影响标志位 Z LRL [m] Rotate Data Memory left 指令说明 将指定寄存器[m]的内容左移 1 位,且第 7 位移到第 0 位。 菜单示 [m].(i+1) ← [m].i (i=0~6) [m].0 ← [m].7 影响标志位 无 LRLA [m] Rotate Data Memory left with result in ACC 指令说明 将指定寄存器[m]的内容左移 1 位,且第 7 位移到第 0 位,结果送到累加器,而指定 寄存器[m]的内容保持不变。 菜单示 ACC.(i+1) ← [m].i (i=0~6) ACC.0 ← [m].7 影响标志位 无 LRLC [m] Rotate Data Memory Left through Carry 指令说明 将指定寄存器[m]的内容连同进位标志位左移 1 位,第 7 位取代进位标志位且原本的 进位标志位移到第 0 位。 菜单示 [m].(i+1) ← [m].i (i=0~6) [m].0 ← C 影响标志位 C ← [m].7 C LRLC A [m] Rotate Data Memory left through Carry with result in ACC 指令说明 将指定寄存器[m]的内容连同进位标志位左移 1 位,第 7 位取代进位标志位且原本的进位 标志位移到第 0 位,移位结果送回累加器,但是指定数据寄存器的内容保持不变。 菜单示 ACC.(i+1) ← [m].i (i=0~6) ACC.0 ← C 影响标志位 C ← [m].7 C LRR [m] Rotate Data Memory right 指令说明 将指定寄存器[m]的内容循环右移 1 位且第 0 位移到第 7 位。 菜单示 [m].i ← [m].(i+1) (i=0~6) [m].7 ← [m].0 影响标志位 无 LRRA [m] Rotate Data Memory right with result in ACC 指令说明 将指定寄存器[m]的内容循环右移 1 位,第 0 位移到第 7 位,移位结果存放到累加器,而 指定寄存器[m]的内容保持不变。 菜单示 ACC.i ← [m].(i+1) (i=0~6) ACC.7 ← [m].0 影响标志位 无 LRRC [m] Rotate Data Memory right through Carry 指令说明 将指定寄存器[m]的内容连同进位标志位右移 1 位,第 0 位取代进位标志位且原本的 进位标志位移到第 7 位。 菜单示 [m].i ← [m].(i+1) (i=0~6) [m].7 ← C C ← [m].0 影响标志位 C 9 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 LRRCA [m] Rotate Data Memory right through Carry with result in ACC 指令说明 将指定寄存器[m]的内容连同进位标志位右移 1 位,第 0 位 取代进位 标志位且原本的进位标志位移到第 7 位,移位结果送回累加器,但是指定数据寄存器的 内容保持不变。 菜单示 ACC.i ← [m].(i+1) (i=0~6) ACC.7 ← C C ← [m].0 影响标志位 C LSBC A, [m] 指令说明 菜单示 影响标志位 HA0407S V1.00 Subtract Data Memory from ACC with Carry 将累加器减去指定寄存器[m]的内容以及进位旗目标反,结果存放到累加器。如果结果为 负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 ACC ← ACC – [m] – C OV、Z、AC、C、SC、CZ LSBCM A, [m] Subtract Data Memory from ACC with Carry and result in Data Memory 指令说明 将累加器减去指定寄存器[m]的内容以及进位旗目标反,结果存放到寄存器[m]。如果结 果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 菜单示 [m] ← ACC – [m] – C 影响标志位 OV、Z、AC、C、SC、CZ LSDZ [m] Skip if Decrement Data Memory is 0 指令说明 将指定的寄存器[m]的内容减 1,判断是否为 0,若为 0 则跳过下一条指令,由于取得下 一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0, 则程序继续执行下一条指令。 菜单示 [m] ← [m] -1,如果[m]=0 跳过下一条指令执行影响。 影响标志位 无 LSDZA [m] Skip if decrement Data Memory is zero with result in ACC 指令说明 将指定寄存器[m]内容减 1,判断是否为 0,如果为 0 则跳过下一条指令,此结果将存放 到累加器,但指定数据存储器内容不变。由于取得下一个指令时会要求插入一个空指令 周期,所以此指令为 2 个周期的指令。如果结果不为 0,则程序继续执行下一条指令。 菜单示 ACC ← [m]-1,如果 ACC=0 跳过下一条指令执行 影响标志位 无 LSET [m] Set Data Memory 指令说明 将指定寄存器[m]的每一个位置位为 1。 菜单示 [m] ← FFH 影响标志位 无 LSET [m].i Set bit of Data Memory 指令说明 将指定寄存器[m]的第 i 位置位为 1。 菜单示 [m].i 影响标志位 无 LSIZ [m] Skip if increment Data Memory is 0 指令说明 将指定的寄存器[m]的内容加 1,判断是否为 0,若为 0 则跳过下一条指令。由于取得下 一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0, 则程序继续执行下一条指令。 菜单示 [m] ← [m]+1,如果[m]=0 跳过下一条指令执行 影响标志位 无 LSIZA [m] Skip if increment Data Memory is zero with result in ACC 指令说明 将指定寄存器[m]的内容加 1,判断是否为 0,如果为 0 则跳过下一条指令,此结果会被 存放到累加器,但是指定数据内存的内容不变。由于取得下一个指令时会要求插入一个 空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0,则程序继续执行下一条指 令。 菜单示 ACC ← [m]+1,如果 ACC=0 跳过下一条指令执行 影响标志位 无 10 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 LSNZ [m].i Skip if bit i of Data Memory is not 0 指令说明 判断指定寄存器[m]的第 i 位,若不为 0,则程序跳过下一条指令执行。由于取得下一个 指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果为 0,则程 序继续执行下一条指令。 菜单示 如果 [m].i≠0,跳过下一条指令执行 影响标志位 无 LSNZ [m] Skip if Data Memory is not 0 指令说明 判断指定寄存器[m],若不为 0,则程序跳过下一条指令执行。由于取得下一个指令时会 要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果为 0,则程序继续执 行下一条指令。 菜单示 如果 [m]≠0,跳过下一条指令执行 影响标志位 无 LSUB A, [m] Subtract Data Memory from ACC 指令说明 将累加器的内容减去指定的寄存器[m]的数据,把结果存放到累加器。如果结果为负, C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 菜单示 ACC ← ACC – [m] 影响标志位 OV、Z、AC、C、SC、CZ LSUBM A, [m] Subtract Data Memory from ACC with result in Data Memory 指令说明 将累加器的内容减去指定寄存器[m]的数据,结果存放到指定的寄存器[m]。如果结果为 负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 菜单示 [m] ← ACC – [m] 影响标志位 OV、Z、AC、C、SC、CZ LSWAP [m] Swap nibbles of Data Memory 指令说明 将指定寄存器[m]的低 4 位和高 4 位互相交换。 菜单示 [m].3~[m].0 ↔ [m].7~[m].4 影响标志位 无 LSWAPA [m] Swap nibbles of Data Memory with result in ACC 指令说明 将指定寄存器[m]的低 4 位和高 4 位互相交换,再将结果存放到累加器且指定数据寄存器 的数据保持不变。 菜单示 ACC.3~ACC.0 ← [m].7~[m].4 ACC.7~ACC.4 ← [m].3~[m].0 影响标志位 无 LSZ [m] Skip if Data Memory is 0 指令说明 判断指定寄存器[m]的内容是否为 0,若为 0,则程序跳过下一条指令执行。由于取得下 一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0, 则程序继续执行下一条指令 菜单示 如果 [m]=0,跳过下一条指令执行 影响标志位 无 LSZA [m] Skip if Data Memory is 0 with data movement to ACC 指令说明 将指定寄存器[m]内容复制到累加器,并判断指定数据存储器的内容是否为 0,若为 0 则 跳过下一条指令。由于取得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0,则程序继续执行下一条指令。 菜单示 ACC ← [m],如果[m]=0,跳过下一条指令执行 影响标志位 无 LSZ [m].i 指令说明 Skip if bit i of Data Memory is 0 判断指定寄存器[m]的第 i 位是否为 0,若为 0,则跳过下一条指令。 由于取得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。 如果结果不为 0,则程序继续执行下一条指令。 HA0407S V1.00 菜单示 如果 [m].i=0,跳过下一条指令执行 影响标志位 无 11 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 LTABRD [m] Move the ROM code to TBLH and data memory 指令说明 将表格指针 TBLP 所指的程序代码低字节(当前页)移至指定寄存器[m],且将高字节 移至 TBLH。 菜单示 [m] ← 程序代码 (低字节) TBLH ← 程序代码 (高字节) 影响标志位 无 LTABRDL [m] Read table ( last page ) to TBLH and Data Memory 指令说明 将表格指针 TBLP 所指的程序代码低字节(最后一页)移至指定寄存器[m],且将高字节 移至 TBLH。 菜单示 [m] ← 程序代码 (低字节) TBLH ← 程序代码 (高字节) 影响标志位 无 LITABRD [m] 指令说明 菜单示 [m] ← 程序代码 (低字节) TBLH ← 程序代码 (高字节) 影响标志位 LITABRDL [m] 无 Increment table pointer low byte first and read table(last page) to TBLH and data memory 指令说明 将自加表格指针 TBLP 所指的程序代码低字节(最后一页)移至指定的寄存器[m],且将 高字节移至 TBLH。 菜单示 [m] ← 程序代码 (低字节) TBLH ← 程序代码 (高字节) 影响标志位 HA0407S V1.00 Increment table pointer low byte first and read table to TBLH and data memory 将自加表格指针 TBHP 和 TBLP 所指的程序代码低字节移至指定的寄存器[m],且将 高字节移至 TBLH。 无 LXOR A, [m] Logical XOR Data Memory to ACC 指令说明 将累加器的数据和指定的寄存器[m]内容逻辑异或,结果存放到累加器。 菜单示 ACC ← ACC“XOR”[m] 影响标志位 Z LXORM A, [m] Logical XOR ACC to Data Memory 指令说明 将累加器的数据和指定的寄存器[m]内容逻辑异或,结果放到寄存器[m]。 菜单示 [m] ← ACC“XOR”[m] 影响标志位 Z 12 / 13 January 25, 2016 HT8 MCU 扩展指令集应用须知 版本及修改信息 Date 日期 Author 作者 2015.12.17 冯毅韬(Fengyi Tao) Issue 发行 First Version 免责声明 免责声明 本网页所载的所有数据、商标、图片、链接及其他数据等(以下简称「数据」),只供参 考之用,盛群半导体股份有限公司(以下简称「本公司」)将会随时更改资料,并由本公 司决定而不作另行通知。虽然本公司已尽力确保本网页的数据准确性,但本公司并不保证 该等数据均为准确无误。本公司不会对任何错误或遗漏承担责任。 本公司不会对任何人士使用本网页而引致任何损害(包括但不限于计算机病毒、系统固障、 数据损失)承担任何赔偿。本网页可能会连结至其他机构所提供的网页,但这些网页并不 是由本公司所控制。本公司不对这些网页所显示的内容作出任何保证或承担任何责任。 责任限制 在任何情况下,本公司并不须就任何人由于直接或间接进入或使用本网站,并就此内容上 或任何产品、信息或服务,而招致的任何损失或损害负任何责任。 管辖法律 本免责声明受中华民国法律约束,并接受中华民国法院的管辖。 免责声明更新 本公司保留随时更新本免责声明的权利,任何更改于本网站发布时,立即生效。 HA0407S V1.00 13 / 13 January 25, 2016
advertisement
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project