если ты просто сORишь оба этих числа, то верхнее слово будет 0 а нижнее результат выражения (bbbb|cccc) Вообще, если у тебя есть число XXYYZZQQ, то в памяти оно лежит как QQ ZZ YY XX. Старшая часть (high word) здесь это XXYY, а младшая ZZQQ. Такой способ хранения называется Little-Endian, потому как сначала идет самый младший байт (QQ), а потом по старшинству. к самому "верхнему", как ты выразился
Поставлю вопрос по другому, потомучто ещё немного не допонял... Пример Факт что: Нижнее слово wParam содержит ID_MENU or ID_CONTROL Верхнее слово wParam содержит 0 в случае с меню и код уведомления в случае с контролом когда мы проверяем меню ли это Когда мы проверяем wParam на ID_MENU мы пишем mov eax,wParam .IF ax==IDM_???///тут мы отсекаем 16 бит выходит что eax это нижнее слово а ax верхнее?? Или в чём фишка?
ax - это младшее слово eax al - младший байт ax, ah - старший байт eax старшее слово eax получить можно битовым сдвигом вправо на 16 бит shr eax, 16 тогда старшее слово сдвинется "на младшее", а что там было затрется нулями вот тебе картинка тоже самое с ebx, ecx, edx. почти тоже самое с остальными. НО это все только на 32-битных платформах) нет., читай выше
Почему нет, младшее слово ax мы занесли wParam в еax, а проверяем только ax,по факту мы отсекаем Старшее слово и оставляем только младшее...почему НЕТ???
Да, AX это младшее слово EAX'а Но старшее его слово напрямую недоступно - см. картинку. mov eax, wParam mov ebx, eax shr ebx, 16 ; теперь ax - младшее слово wParam, bx - старшее
У-у-ф.. IParam = LoWord+HiWord*2^16 LoWord = LParam and 0FFFFh //зануляем HiWord, остается только LoWord HiWord = IParam shr 16 //сдвинаем на 16 бит = делим на 2^16, LoWord "исчезает", остается HiWord Пример: LParam = 87654321h LoWord = 00004321h HiWord = 00008765h
нижнее =\ and и shr мало чего общего имеют. как раз and FFFF выделит нижнее слово, а shr на 16 бит выделит верхнее