|
语 法 |
DAA | ||||
|
编 码 |
0 |
0000 |
0001 |
0001 |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0001 |
10rr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0001 |
11rr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0101 |
10rr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0101 |
11rr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0101 |
00rr |
rrrrr |
|
|
操作內容 |
R + 1 --> A | ||||
|
受影响的标志 |
Z﹔零标志 | ||||
|
说 明 |
将被指定R寄存器的內含值加1,并将结果储于A寄存器中。 | ||||
|
举例说明 |
MOV A,@0x11 MOV 0x10,A ;R10 = 0x11 INCA 0x10 ;A = 0x12 | ||||
|
语 法 |
INC R | ||||
|
编 码 |
0 |
0101 |
01rr |
rrrrr |
|
|
操作內容 |
R + 1 --> R | ||||
|
受影响的标志 |
Z﹔零标志 | ||||
|
说 明 |
将被指定R寄存器的內含值加1﹐並且将结果再存回R寄存器中。 | ||||
|
举例说明 |
MOV A,@0x11 MOV 0x10,A ;R10 = 0x11 INC 0x10 ;R10 = 0x12 | ||||
|
语 法 |
INT | ||||
|
编 码 |
1 |
1110 |
0000 |
0001 |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0000 |
0001 |
rrrr |
|
|
操作內容 |
IOCR --> A | ||||
|
受影响的标志 |
无 | ||||
|
说 明 |
将控制寄存器IOCR中的值移到寄存器A中。 | ||||
|
举例说明 |
IOR 0xf ;取得 IOCF 中的內容﹐并载入A中
MOV 0x10,A ;储存在寄存器 0x10中 | ||||
|
语 法 |
IOW R | ||||
|
编 码 |
0 |
0000 |
0000 |
rrrr |
|
|
操作內容 |
A <-- IOCR | ||||
|
受影响的标志 |
无 | ||||
|
说 明 |
将A寄存器(累加器)的内容载入控制寄存器IOCR中。 | ||||
|
举例说明 |
将port6設定成输出口。 MOV A,@0 IOW 0x6 | ||||
|
语 法 |
JMP k | ||||
|
编 码 |
1 |
01kk |
kkkk |
kkkk |
|
|
操作內容 |
k --> PC(9::0) R3(7::5) --> PC(12::10) | ||||
|
受影响的标志 |
无 | ||||
|
说 明 |
当执行一个跳转指令﹐指令后所描述的执行位址会载入程序计数器中。 | ||||
|
举例说明 |
HERE JMP BRANCH 执行JMP指令之前 PC = address HERE 执行JMP指令之后 PC = address BRANCH | ||||
|
语 法 |
JZA R | ||||
|
编 码 |
0 |
0111 |
10rr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0111 |
11rr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
110b |
bbrr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
111b |
bbrr |
rrrrr |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0000 |
01rr |
rrrr |
|
|
操作內容 |
A --> R | ||||
|
受影响的标志 |
无 | ||||
|
说 明 |
将A寄存器中的值载入寄存器R中。 | ||||
|
语 法 |
MOV A,R | ||||
|
编 码 |
0 |
0100 |
00rr |
rrrr |
|
|
操作內容 |
R --> A | ||||
|
受影响的标志 |
Z (零标志) | ||||
|
|
将R寄存器中的值载入A寄存器﹐如果A寄存器的結果为零﹐就会将Z标志设成1﹔否则将Z标志清为0。 | ||||
|
|
| ||||
|
语 法 |
MOV A, k | ||||
|
编 码 |
1 |
1000 |
kkkk |
kkkk |
|
|
操作內容 |
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 | ||||
|
编 码 |
0 |
0000 |
0000 |
0000 |
|
|
操作內容 |
No Operation | ||||
|
受影响的标志 |
None | ||||
|
说 明 |
不做任何工做﹐用来做时间的延迟。 | ||||
|
|
| ||||
|
举例说明 |
P50输出3 ms的突波. (system clock = 2MHz)
BS 0x5,0x0 ;P50输出为high NOP ;延迟两个指令周期 NOP BC 0x5,0x0 ;P50输出为low | ||||
|
|
| ||||
|
语 法 |
OR A,R | ||||
|
编 码 |
0 |
0010 |
00rr |
rrrrr |
|
|
操作內容 |
AÚR --> A | ||||
|
受影响的标志 |
Z 零标志 | ||||
|
说 明 |
将A寄存器中的值和R寄存器中的值OR在一起﹐在存入A寄存器中。 | ||||
|
|
| ||||
|
语 法 |
OR R,A | ||||
|
编 码 |
0 |
0010 |
01rr |
rrrrr |
|
|
操作內容 |
AÚR --> R | ||||
|
受影响的标志 |
Z 零标志 | ||||
|
说 明 |
將A寄存器中的值和R寄存器中的值OR在一起﹐在存入R寄存器中。 | ||||
|
|
| ||||
|
语 法 |
OR A, k | ||||
|
编 码 |
1 |
1001 |
kkkk |
kkkk |
|
|
操作內容 |
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 | ||||