| [Назад] [Далее] | ![]() |
Команды ADC (сложение с учетом переноса) и SBB (вычитание с учетом займа) специально были введены для подобных операций. При сложении сначала складывают самые младшие байты, слова или двойные слова командой ADD, а затем складывают все остальное командами ADC, двигаясь от младшего конца числа к старшему. Команды SUB/SBB действуют полностью аналогично.
bigval_1 dw 0,0,0 ; 96-битное число
bigval_2 dw 0,0,0
bigval_3 dw 0,0,0
; сложение 96-битных чисел bigval_1 и bigval_2
mov eax,dword ptr bigval_1
add eax,dword ptr bigval_2 ; сложить младшие слова
mov dword ptr bigval_3,eax
mov eax,dword ptr bigval_1[4]
adc eax,dword ptr bigval_2[4] ; сложить средние слова
mov dword ptr bigval_3[4],eax
mov eax,dword ptr bigval_1[8]
adc eax,dword ptr bigval_2[8] ; сложить старшие слова
mov dword ptr bigval_3[8],eax
; вычитание 96-битных чисел bigval_1 и bigval_2
mov eax,dword ptr bigval_1
sub eax,dword ptr bigval_2 ; вычесть младшие слова
mov dword ptr bigval_3,eax
mov eax,dword ptr bigval_1[4]
sbb eax,dword ptr bigval_2[4] ; вычесть средние слова
mov dword ptr bigval_3[4],eax
mov eax,dword ptr bigval_1[8]
sbb eax,dword ptr bigval_2[8] ; вычесть старшие слова
mov dword ptr bigval_3[8],eax