HT8 MCU 扩展指令集应用须知

Add to my manuals
13 Pages

advertisement

HT8 MCU 扩展指令集应用须知 | Manualzz
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

Was this manual useful for you? Yes No
Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Related manuals

Download PDF

advertisement

Languages