当前文档版本为 v0.1.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

sub


sub A, #K

指令格式

sub A, #K

影响标志

C AC Z OV

伪指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
bit T, H
bit[4] L4
bit[3] H3
bit[8] X
X = ~K
{AC, L4} = A[3:0] + X[3:0] + 1
{T, H3} = A[6:4] + X[6:4] + AC
{C, H} = A[7] + X[7] + T
OV = C ^ T
A = {H, H3, L4}
Z = A ? 0 : 1

指令描述

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

注意

按照伪指令的算法,减法C标志在有借位时为0,无借位时为1

范例

1
2
3
4
//0x68 - 0x4C
//C = 0, AC = 0, Z = 1, OV = 0
mov     A, #0x68    //A = 0x68
sub     A, #0x4C    //A = 0x1C, C = 1, AC = 0, Z = 0, OV = 0

sub A, R

指令格式

sub A, R

影响标志

C AC Z OV

伪指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
bit T, H
bit[4] L4
bit[3] H3
bit[8] X
X = ~R
{AC, L4} = A[3:0] + X[3:0] + 1
{T, H3} = A[6:4] + X[6:4] + AC
{C, H} = A[7] + X[7] + T
OV = C ^ T
A = {H, H3, L4}
Z = A ? 0 : 1

指令描述

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

注意

按照伪指令的算法,减法C标志在有借位时为0,无借位时为1

范例

1
2
3
4
5
6
//0x7B - 0xF3
//C = 0, AC = 1, Z = 1, OV = 0
mov     A, #0xF3    //A = 0xF3
mov     0xCB, A     //[0xCB] = 0xF3
mov     A, #0x7B    //A = 0x7B
sub     A, 0xCB     //A = 0x88, C = 0, AC = 1, Z = 0, OV = 1