当前页面为 开发中 版本,查看特定版本的文档,请在页面左下角的下拉菜单中进行选择。

add


add A, #K

指令格式

add A, #K

影响标志

C AC Z OV

伪代码描述

1
2
3
4
5
6
7
AC = ((A & 0x0f) + (K & 0x0f)) >> 4;
SC = ((A & 0x7f) + (K & 0x7f)) >> 7;
C_A = A + K;
C = C_A >> 8;
A = C_A & 0xff;
OV = C ^ SC;
Z = A == 0 ? 1 : 0;

指令描述

累加器A和立即数K加法,结果存储到累加器A。

范例

1
2
3
4
//0xE9 + 0x1D
//C = 0, AC = 0, Z = 0, OV = 0
mov A, #0xE9    //A = 0xE9
add A, #0x1D    //A = 0x06, C = 1, AC = 1, Z = 0, OV = 0

add A, R

指令格式

add A, R

影响标志

C AC Z OV

伪代码描述

1
2
3
4
5
6
7
AC = ((A & 0x0f) + (R & 0x0f)) >> 4;
SC = ((A & 0x7f) + (R & 0x7f)) >> 7;
C_A = A + R;
C = C_A >> 8;
A = C_A & 0xff;
OV = C ^ SC;
Z = A == 0 ? 1 : 0;

指令描述

累加器A和寄存器R加法,结果存储到累加器A。

范例

1
2
3
4
5
6
//0x20 + 0xE0
//C = 0, AC = 0, Z = 0, OV = 0
mov A, #0xE0    //A = 0xE0
mov 0x80, A     //[0x80] = 0xE0
mov A, #0x20    //A = 0x20
add A, 0x80     //A = 0x00, C = 1, AC = 0, Z = 1, OV = 0

add R, A

指令格式

add R, A

影响标志

C AC Z OV

伪代码描述

1
2
3
4
5
6
7
AC = ((A & 0x0f) + (R & 0x0f)) >> 4;
SC = ((A & 0x7f) + (R & 0x7f)) >> 7;
C_R = A + R;
C = C_R >> 8;
R = C_R & 0xff;
OV = C ^ SC;
Z = R == 0 ? 1 : 0;

指令描述

寄存器R和累加器A加法,结果存储到寄存器R。

范例

1
2
3
4
5
6
//0x6E + 0x12
//C = 0, AC = 0, Z = 0, OV = 0
mov A, #0x6E    //A = 0x6E
mov 0x90, A     //[0x90] = 0x6E
mov A, #0x12    //A = 0x12
add 0x90, A     //[0x90] = 0x80, C = 0, AC = 1, Z = 0, OV = 1

add PCL, A

指令格式

add PCL, A

影响标志

C AC Z OV

伪代码描述

1
2
3
4
5
6
7
8
AC = ((A & 0x0f) + (PCL & 0x0f)) >> 4;
SC = ((A & 0x7f) + (PCL & 0x7f)) >> 7;
C_PCL = A + PCL;
C = C_PCL >> 8;
PCL = C_PCL & 0xff;
OV = C ^ SC;
Z = A == 0 ? 1 : 0;
PCH = PCH + C;

指令描述

将累加器A的内容与PC的内容进行相加,结果放到PC中。 该指令会引起程序跳转,主要用来实现跳转表功能。

范例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 * 设置累加器A的值,然后调用或者跳转到jmp_tbl,如果
 * A=0: 程序最终跳转到prog_0;
 * A=1: 程序最终跳转到prog_1;
 * A=2: 程序最终跳转到prog_2;
 * A=3: 程序最终跳转到prog_3;
 * A=4: 程序最终跳转到prog_4。
 */
    cseg
jmp_tbl:        //跳转表
    add PCL, A
    jmp prog_0
    jmp prog_1
    jmp prog_2
    jmp prog_3
    jmp prog_4
    
    cseg
prog_0:
    //do something

    cseg
prog_1:
    //do something

    cseg
prog_2:
    //do something

    cseg
prog_3:
    //do something

    cseg
prog_4:
    //do something