2つの数字6789と1234が追加されているx86ダンプからアセンブリプログラムのスニペットを理解しようとしていますが、問題はこのプログラムがどのように処理するかです。BCD追加アセンブリプログラムロジック
結果が9より大きい場合は6を追加することがわかりますが、このプログラムは多くのステップがあり、ほとんど意味がありません。
and ecx,0F0F0F0F
// masking zoned bits -> 06 07 08 09
and eax,0F0F0F0F
// masking zoned bits -> 01 02 03 04
add ecx,eax
// ecx value after addition 07 09 0B 0D (this is simple Binary add result,now need to convert it to BCD addition)
add ecx,F6F6F6F6
// after addition FE 00 02 03
mov eax,ecx
// eax = ecx = FE 00 02 03
and eax,60606060
// eax = 60 00 00 00
shr eax,04
// eax = 06 00 00 00
and ecx,0F0F0F0F
// FE 00 02 03 & 0F 0F 0F 0F = 0E 00 02 03(ECX)
sub ecx,eax
// 0E 00 02 03 - 06 00 00 00 = 08 00 02 03 // 8023 ans
ていた場合、私を修正してください?可能であれば、Plzのヘルプ、詳細は – user143252
@ user143252あなたが実際に働いているBCD数字の間の場所、たとえば01020304ではすべてゼロです。私はそれが意味をなさないと思ったので私はちょうど穴と呼ばれました、私が知る限り実際には実際の用語ではありません。 – harold
キャリーの管理方法をバイナリ形式で記述することができます – user143252