Assembly 擴充精度運算

2018-10-27 09:59 更新
匯編語言同樣提供允許你執(zhí)行大于雙字的數(shù)的加減法的指令。這些指令使用了進位標志位。就像上面規(guī)定的,ADD 和SUB 指令在進位或借位產(chǎn)生時分別修改了進位標志位。儲存在進位標志位里的信息可以用來做大的數(shù)字的加減法,通過將這些操作數(shù)分成小的雙字(或更小) 塊。


擴充精度運算


ADC 和SBB 指令使用了進位標志位里的信息。ADC指令執(zhí)行下面的操作:


operand1 = operand1 + carry flag + operand2


SBB執(zhí)行下面的操作:


operand1 = operand1 - carry flag - operand2


這些如何使用?考慮在EDX:EAX和EBX:ECX中的64位整形的總數(shù)。下面的代碼將總數(shù)儲存到EDX:EAX中:


1       add       eax, ecx      ; 低32位相加
2       adc       edx, ebx      ; 高32位帶以前總數(shù)的進位相加


減法也是一樣的。下面的代碼用EDX:EAX減去EBX:ECX:


1       sub       eax, ecx ;     低32位相減
2       sbb       edx, ebx ;     高32位帶借位相減


對于實際上大的數(shù)字,可以使用一個循環(huán)(看小節(jié)2.2)。對于一個求和的循環(huán),對于每一次重復(替代所有的,除了第一次重復)使用ADC指令將會非常便利。通過在循環(huán)開始之前使用CLC (CLear Carry(清除進位))指令初始化進位標志位為0,可以使這個操作正確執(zhí)行。如果進位標志位為0,那
么ADD和ADC指令就沒有區(qū)別了。這個在減法中也是一樣的。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號