汇编语言 ADC指令和SBB指令
Posted ʚVVcatɞ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言 ADC指令和SBB指令相关的知识,希望对你有一定的参考价值。
ADC指令
ADC(带进位加法)指令将源操作数和进位标志位的值都与目的操作数相加。该指令格式与ADD指令一样,且操作数大小必须相同。
例如下述指令实现两个16位整数相加(FFFFH + 1000H),产生的和分别存入DX:AX
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov ax, 0FFFFH ; 存放低16bit
mov dx, 1000H ; 高 16bit
add ax, 0FFFFH
adc dx, 0 ; 结果 DX = 1001
mov ax, 4C00H
int 21H
code ends
end start
例如下述指令实现两个8位整数相加(FFH + FFH),产生的和分别存入DL:AL
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov dl, 0
mov al, 0FFH
add al, 0FFH
adc dl, 0
mov ax, 4C00H
int 21H
code ends
end start
总结:
add与adc的区别
add: ax, bx ax = ax + bx
adc: ax, bx ax = ax + bx + CF(进位标志位)
SBB指令
SBB(带借位减法)指令从目的操作数中减去源操作数和进位标志位的值。允许使用的操作数与ADC指令相同。
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov dx, 1000
mov ax, 0005
sub ax, 6 ; AX = FFFH
sbb dx, 0 ; DX = 03E7H AX = FFFH
mov ax, 4C00H
int 21H
code ends
end start
add与adc的区别
sub: ax, bx ax = ax - bx
sbb: ax, bx ax = ax - bx - CF(进位标志位)
以上是关于汇编语言 ADC指令和SBB指令的主要内容,如果未能解决你的问题,请参考以下文章