سلام.
یک قطعه کد برای تست عملگر sbb
این قطعه کد رو در دیباگ اجرا کنید:
;a 100
mov ax,0200
mov bx,00ff
sub al,bl
sbb ah,bh
int 21
به نتیجه اجرای دستورات دقت کنید:
AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0103 NV UP EI PL NZ NA PO NC
0AE9:0103 BBFF00 MOV BX,00FF
-t
AX=0200 BX=00FF CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0106 NV UP EI PL NZ NA PO NC
0AE9:0106 28D8 SUB AL,BL
-t
AX=0201 BX=00FF CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0108 NV UP EI PL NZ AC PO CY
0AE9:0108 18FC SBB AH,BH
-t
AX=0101 BX=00FF CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=010A NV UP EI PL NZ NA PO NC
0AE9:010A CD21 INT 21
سوال:چرا در نتیجه اجرای دستور:
sub al,bl
بیت های پرچم af,cf فعال میشن(1)؟؟؟
در جمع دو عدد 00h و مکمل دو عدد ffh که برابر 01h میشه:
00000000
+
00000001
-----------
00000001
هیج cf و یا ax ایجاد نمیشه...پس این موضوع به چه صورت هست که cf و af رو 1 میبینیم؟
-------------------------------
سوال بعدی ,وقتی sbb عمل تفریق رو منهای cf میکنه بعد از این عمل cf رو صفر قرار میده ...
و یا بر روی بیت های پرچم عمل خاصی رو انجام میده؟؟ (با توجه به دستور sbb در کد ,فلگ
های cf , af برابر صفر قرار گرفتند..!!!)