本文共 1461 字,大约阅读时间需要 4 分钟。
ADC(带进位加法)指令将源操作数和进位标志位的值都与目的操作数相加。该指令格式与ADD指令一样,且操作数大小必须相同。
例如下述指令实现两个16位整数相加(FFFFH + 1000H),产生的和分别存入DX:AX
assume cs:code, ds:data, ss:stackdata segment db 256 dup(0)data endsstack segment stack db 128 dup(0)stack endscode 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 endsend start例如下述指令实现两个8位整数相加(FFH + FFH),产生的和分别存入DL:AL
assume cs:code, ds:data, ss:stackdata segment db 256 dup(0)data endsstack segment stack db 128 dup(0)stack endscode 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 endsend start总结: add与adc的区别
add: ax, bx ax = ax + bxadc: ax, bx ax = ax + bx + CF(进位标志位)
SBB(带借位减法)指令从目的操作数中减去源操作数和进位标志位的值。允许使用的操作数与ADC指令相同。
assume cs:code, ds:data, ss:stackdata segment db 256 dup(0)data endsstack segment stack db 128 dup(0)stack endscode 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 endsend startadd与adc的区别
sub: ax, bx ax = ax - bxsbb: ax, bx ax = ax - bx - CF(进位标志位)
转载地址:http://vbqzi.baihongyu.com/