Assembly 更改减法后有符号位的值

Assembly 更改减法后有符号位的值,assembly,x86,Assembly,X86,我用16位汇编程序x86编写了这部分代码: mov dl, F3h mov bh, 72h sub dl, bh 当我在turbo debugger中调试代码时,我发现,在sub dl之后,bh的带符号平面变为1,如果操作结果为负,则bud signed flag设置为1。那么,在这种情况下,当结果为正时,为什么带符号平面设置为1?F3h-72h的结果为81h。由于sub-dl,bh是一种8位操作,符号位是值的第八位(其中值的第一位是最低阶位)。由于设置了结果81h的八位,因此设置了符号标志。

我用16位汇编程序x86编写了这部分代码:

mov dl, F3h
mov bh, 72h
sub dl, bh

当我在turbo debugger中调试代码时,我发现,在sub dl之后,bh的带符号平面变为1,如果操作结果为负,则bud signed flag设置为1。那么,在这种情况下,当结果为正时,为什么带符号平面设置为1?

F3h-72h的结果为81h。由于
sub-dl,bh
是一种8位操作,符号位是值的第八位(其中值的第一位是最低阶位)。由于设置了结果81h的八位,因此设置了符号标志。当无符号值81h被解释为有符号8位值时,它变成负数-7F(-127)

F3h-72h的结果是81h。由于
sub-dl,bh
是一种8位操作,符号位是值的第八位(其中值的第一位是最低阶位)。由于设置了结果81h的八位,因此设置了符号标志。当无符号值81h被解释为有符号8位值时,它变成负数-7F(-127)

F3h-72h的结果是81h。由于
sub-dl,bh
是一种8位操作,符号位是值的第八位(其中值的第一位是最低阶位)。由于设置了结果81h的八位,因此设置了符号标志。当无符号值81h被解释为有符号8位值时,它变成负数-7F(-127)

F3h-72h的结果是81h。由于
sub-dl,bh
是一种8位操作,符号位是值的第八位(其中值的第一位是最低阶位)。由于设置了结果81h的八位,因此设置了符号标志。当无符号值81h被解释为有符号8位值时,它变成负数-7F(-127)

但是为什么这个值被解释为有符号的8位值,sub-dl,bh意味着dl=dl-bh,因此243(F3)-114(72)是+129(81h)@net_-man,如果您选择这样做,它只被视为有符号值。CPU在允许任何一种解释的操作后提供状态寄存器信息。@net\n如果符号标志做什么,它总是将结果解释为有符号值。因此,就符号标志而言,您的计算实际上是-0Dh-72h=-7Fh或十进制-13-114=-127。换句话说,符号标志始终与结果的符号位相同,符号位是该值的最高阶位。但为什么该值被解释为有符号8位值,sub-dl,bh意味着dl=dl-bh,因此243(F3)-114(72)是+129(81h)@net_-man。如果您选择这样做,它仅被视为有符号值。CPU在允许任何一种解释的操作后提供状态寄存器信息。@net\n如果符号标志做什么,它总是将结果解释为有符号值。因此,就符号标志而言,您的计算实际上是-0Dh-72h=-7Fh或十进制-13-114=-127。换句话说,符号标志始终与结果的符号位相同,符号位是该值的最高阶位。但为什么该值被解释为有符号8位值,sub-dl,bh意味着dl=dl-bh,因此243(F3)-114(72)是+129(81h)@net_-man。如果您选择这样做,它仅被视为有符号值。CPU在允许任何一种解释的操作后提供状态寄存器信息。@net\n如果符号标志做什么,它总是将结果解释为有符号值。因此,就符号标志而言,您的计算实际上是-0Dh-72h=-7Fh或十进制-13-114=-127。换句话说,符号标志始终与结果的符号位相同,符号位是该值的最高阶位。但为什么该值被解释为有符号8位值,sub-dl,bh意味着dl=dl-bh,因此243(F3)-114(72)是+129(81h)@net_-man。如果您选择这样做,它仅被视为有符号值。CPU在允许任何一种解释的操作后提供状态寄存器信息。@net\n如果符号标志做什么,它总是将结果解释为有符号值。因此,就符号标志而言,您的计算实际上是-0Dh-72h=-7Fh或十进制-13-114=-127。换句话说,符号标志始终与结果的符号位相同,符号位是值的最高阶位。