Учебник по булевой логике как используется в Assembly - PullRequest
0 голосов
/ 17 января 2012

Есть ли где-нибудь учебник, который объясняет все тонкости булевых логических операций, которые возможны на ассемблере.Например, я понятия не имею, что делает следующий блок кода сборки:

mov     [ebp-8h], 31982853h
mov     eax, [ebp+Ch]
shl     eax, 8
mov     ecx, [ebp+Ch]
shr     ecx, 8
or      eax, ecx

Я понимаю, что делают инструкции shl, shr и или, но понятия не имею об их комбинированном результате.Кто-нибудь может направить меня к учебнику, который подробно объясняет логические операции в сборке?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Аннотированный код:

mov     eax, [ebp+Ch]   ; grab our 32-bit value
shl     eax, 8          ; shift it left 8 bits, so the top 8 bits are shifted out 
                        ; and the bottom 8 bits are filled w/ 0
mov     ecx, [ebp+Ch]   ; grab our 32-bit value again
shr     ecx, 8          ; shift this copy right 8 bits, so the bottom 8 bits are 
                        ; shifted out and the top 8 bits are filled w/ 0
or      eax, ecx        ; perform A = A or C for each set of same-aligned bits in
                        ; EAX (A) and ECX (C)

Таким образом, если исходное значение было ABCD (каждая буква была 8-битным байтом), то перед выполнением или у EAX будет BCD0, а у ECX будет 0ABC.

1 голос
/ 17 января 2012

Если переменная в [ebp+Ch] содержит 16-битное значение (т.е. только 16 младших разрядов могут быть ненулевыми), то этот фрагмент кода эффективно меняет свои байты (биты с 0 по 7 с битами с 8 по 15).Однако результат в eax после or eax, ecx должен быть замаскирован (and 'ed) с 0FFFFh, если в следующем коде вместо eax.

не используется ax.
...