|
|
|
|
语 法
|
DAA
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
if [A<3::0> > 9].OR.[DC=1]
then A<3::0> + 6 ->
A<3::0>;
if [A<7::4> > 9].OR.[C=1]
then A<7::4> + 6 ->
A<7::4>;
|
|
受影响的标志
|
C进位标志
|
|
说 明
|
DAA用来调整在累加器中的8位的2进位数值﹐使累加器中的数值变成10进位的表示法﹐分別用两个4位來表示十位及个位。
|
|
举例说明
|
做一个十进位加法运算6+9
MOV A,@0x6
MOV 0x10,A
MOV A,@0x9
ADD A,0x10 ;A = 0xf
DAA
;A = 15H (packed BCD)
|
|
|
|
|
|
|
|
语 法
|
DECA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R-1 --> A
|
|
受影响的标志
|
Z零标志
|
|
说 明
|
递减R寄存器的值﹐并且将结果存入A寄存器中。
|
|
举例说明
|
说明如何作一个计数16次的循环
STATUS == 3
﹔状态寄存器
Z_FLAG == 2
﹔零标志在状态暂存中是BIT2
MOV A,@0x10
MOV 0x10,A
LOOP:
DECA 0x10
MOV 0x10,A
JBS
STATUS,Z_FLAG
JMP
LOOP
|
|
|
|
|
|
|
|
语 法
|
DEC R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R-1 --> R
|
|
受影响的标志
|
Z﹔零标志
|
|
说 明
|
将所指定的R寄存器內含值减1。
|
|
举例说明
|
说明如何作一个计数16次的循环
STATUS == 3 ;
状态寄存器
Z_FLAG == 2
﹔零标志在状态暂存中是BIT2
MOV A,@0x10
MOV 0x10,A
LOOP:
DEC 0x10
JBS
STATUS,Z_FLAG
JMP
LOOP
|
|
|
|
|
语 法
|
DJZA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R - 1 --> A, skip if 0
|
|
受影响的标志
|
无
|
|
说 明
|
将所指定R寄存器的內含值减1﹐并将结果存於A寄存器上﹔如果结果为0﹐则下一个指令将被跳过。
|
|
举例说明
|
HERE:
DJZA 0x9
CONT:
MOV A,0x10
SKIP:
ADD A,@10
在执行DJZA指令之前
PC = address HERE
在执行DJZA指令之后
A=R9-1
if A = 0, PC = address SKIP
if A ¹ 0, PC = address CONT
|
|
|
|
|
语 法
|
DJZ R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R - 1 --> R, skip if 0
|
|
受影响的标志
|
无
|
|
说 明
|
将所指定R寄存器的內含值减1﹐并将结果存回R寄存器上﹔如果结果为0﹐则下一个指令将被跳过。
|
|
举例说明
|
MOV A,@100
MOV 0x10,A
LOOP:
·
·
·
DJZ 0x10 ;寄存器R10递减﹐
若结果不等于
;0 , 执行JMP指令﹐若結果等于0﹐
;JMP指令不执行
JMP LOOP
|
|
|
|
|
语 法
|
INCA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R + 1 --> A
|
|
受影响的标志
|
Z﹔零标志
|
|
说 明
|
将被指定R寄存器的內含值加1,并将结果储于A寄存器中。
|
|
举例说明
|
MOV A,@0x11
MOV 0x10,A
;R10 = 0x11
INCA 0x10
;A = 0x12
|
|
|
|
|
语 法
|
INC R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R + 1 --> R
|
|
受影响的标志
|
Z﹔零标志
|
|
说 明
|
将被指定R寄存器的內含值加1﹐並且将结果再存回R寄存器中。
|
|
举例说明
|
MOV A,@0x11
MOV 0x10,A
;R10 = 0x11
INC
0x10
;R10 = 0x12
|
|
|
|
|
语 法
|
INT
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
PC + 1 --> [Top of Stack]
0001H --> PC
|
|
受影响的标志
|
无
|
|
说 明
|
软件中断指令﹐首先将下一个位址存入堆栈中﹐然后将0x01载入程序寄存器中。
|
|
举例说明
|
ORG 0x001
JMP SET_INT
·
·
SET_INT﹕
·
·
RET
MAIN﹕
·
·
HERE﹕
INT
CONT﹕
CLRA
执行INT指令之前
PC = address HERE
执行INT指令之后
PC = 0001H
[Top of Stack] = address CONT
|
|
|
|
|
语 法
|
IOR R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
IOCR --> A
|
|
受影响的标志
|
无
|
|
说 明
|
将控制寄存器IOCR中的值移到寄存器A中。
|
|
举例说明
|
IOR
0xf ;取得 IOCF
中的內容﹐并载入A中
MOV 0x10,A ;储存在寄存器
0x10中
|
|
|
|
|
语 法
|
IOW R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
A <-- IOCR
|
|
受影响的标志
|
无
|
|
说 明
|
将A寄存器(累加器)的内容载入控制寄存器IOCR中。
|
|
举例说明
|
将port6設定成输出口。
MOV A,@0
IOW
0x6
|
|
|
|
|
语 法
|
JMP k
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
k --> PC(9::0)
R3(7::5) --> PC(12::10)
|
|
受影响的标志
|
无
|
|
说 明
|
当执行一个跳转指令﹐指令后所描述的执行位址会载入程序计数器中。
|
|
举例说明
|
HERE JMP BRANCH
执行JMP指令之前
PC = address HERE
执行JMP指令之后
PC = address BRANCH
|
|
|
|
|
语 法
|
JZA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R+1 --> A, skip if result = 0
|
|
受影响的标志
|
无
|
|
说 明
|
将所选定的寄存器R的內容加1﹐并将结果存于A寄存器﹐若结果为0﹐则跳过下一个指令。
|
|
举例说明
|
Port 6输出递减的二进位数值。
MOV A,@x00
LOOP:
MOV 0x6,A
MOV 0x10,A
JZA 0x10
JMP LOOP
|
|
|
|
|
语 法
|
JZ R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R+1 --> R, skip if result = 0
|
|
受影响的标志
|
无
|
|
说 明
|
将所选定的寄存器R的內容加1﹐并将结果存於R寄存器﹐若结果为0﹐则跳过下一个指令。
|
|
举例说明
|
HERE:
JZ 0x10
CONT:
MOV A,0x10
SKIP:
ADD A,@10
执行JZ指令之前
PC = address HERE
执行JZ指令之后
R10 = R10-1
if R10 = 0, PC = address SKIP
if R10 ¹ 0, PC = address CONT
|
语 法
|
|
|
|
语 法
|
JBC R,b
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
if R(b) = 0, skip
|
|
受影响的标志
|
无
|
|
说 明
|
如果寄存器R的位 “b” 是“0”,则跳过下一个指令。
|
|
举例说明
|
测试0x10寄存器的bit0﹐若是为”0”则port5的bit0设成”0”﹔若0x10寄存器的bit0为”1”﹐則port5的bit0设成”1”。
JBC 0x10,0
BS 0x5,0
JBS 0x10,0
BC 0x5,0
|
|
|
|
|
语 法
|
JBS R,b
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
if R(b) = 1, skip
|
|
受影响的标志
|
无
|
|
说 明
|
如果寄存器R的位 “b” 是“1”,则跳过下一个指令。
|
|
举例说明
|
HERE JBC 0x9,3
CONT MOV A,@10
SKIP ADD A,0x10
执行JBC指令之前
PC = address HERE
执行JBC指令之后
if R9(3) = 0, PC = address CONT
if R9(3) ¹ 0, PC = address SKIP
|
语 法
|
|
|
|
语 法
|
MOV R,A
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
A --> R
|
|
受影响的标志
|
无
|
|
说 明
|
将A寄存器中的值载入寄存器R中。
|
|
语 法
|
MOV A,R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R --> A
|
|
受影响的标志
|
Z (零标志)
|
|
|
将R寄存器中的值载入A寄存器﹐如果A寄存器的結果为零﹐就会将Z标志设成1﹔否则将Z标志清为0。
|
|
|
|
|
语 法
|
MOV A, k
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
k --> A
|
|
受影响的标志
|
无
|
|
说 明
|
将立即k载入A寄存器中。
|
|
举例说明
|
將A Move data from accumulator to register
MOV A,@0x11 ;将立即值载入A寄存器中
MOV 0x10,A ;将A中的内容载入0X10中
MOV A,9
;将寄存器9的值载入A中
|
|
|
|
|
|
|
语 法
|
NOP
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
No Operation
|
|
受影响的标志
|
None
|
|
说 明
|
不做任何工做﹐用来做时间的延迟。
|
|
|
|
|
举例说明
|
P50输出3 ms的突波. (system clock = 2MHz)
BS 0x5,0x0 ;P50输出为high
NOP ;延迟两个指令周期
NOP
BC 0x5,0x0 ;P50输出为low
|
|
|
|
|
|
|
|
语 法
|
OR A,R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
AÚR --> A
|
|
受影响的标志
|
Z 零标志
|
|
说 明
|
将A寄存器中的值和R寄存器中的值OR在一起﹐在存入A寄存器中。
|
|
|
|
|
语 法
|
OR R,A
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
AÚR --> R
|
|
受影响的标志
|
Z 零标志
|
|
说 明
|
將A寄存器中的值和R寄存器中的值OR在一起﹐在存入R寄存器中。
|
|
|
|
|
语 法
|
OR A, k
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
AÚk --> A
|
|
受影响的标志
|
Z 零标志
|
|
说 明
|
将A寄存器中的值和立即值k﹐OR在一起﹐在存入A寄存器中。
|
|
|
|
|
举例说明
|
将port6的值和0x10寄存器的值﹐OR在一起﹐并将结果输出到port6。
MOV A,0x6 ;将port6的值载入A中
OR
A,0x10 ;OR,A和0x10的值﹐存入A中
MOV 0x6,A ;將A的值输出到port6
说明右式应该如何完成﹕R10
= R11 OR R12.
MOV A,0x11
MOV 0x10,A
MOV A,0x12
OR
0x10,A ;R10=R11
OR R12
说明右式应該如何完成﹕ A = A OR 0xF0.
MOV A,@0x03
;A = 0x03
OR
A,0xF0 ;A = 0xF3
|
|
|
|
|
|
|