Написал такую ерунду: Код (Text): #include <iostream.h> main() { short unsigned int suiPeremennaya = 0; cout << "suiPeremennaya = " << suiPeremennaya << endl; _asm { mov ax, 300 mov ah, 0 shr ax, 1 mov suiPeremennaya, ax } cout << "suiPeremennaya = " << suiPeremennaya << endl; return 0; } Думал, получу 128. Пишет: 22... Я считал, что AH - верхняя восьмибитная часть 16-разрядного регистра AX. Что обнуляю я верхние 44, и оставляю 256. Затем совершаю сдвиг вправо. Память в x86 адресуется вроде от большего к меньшему, но это вроде здесь нипричём? Всё. Я "завис". Жму reset для перезагрузки головного мозга. Sorry, я "чайник". используем тег [ code ]!
Код (Text): _asm { mov ax, 300 00401031 mov ax,12Ch mov ah, 0 00401035 mov ah,0 shr ax, 1 00401037 shr ax,1 mov suiPeremennaya, ax 0040103A mov word ptr [esp],ax } короче в ax 300 (0x12c) затем обрезается единичка так как она попадает в ah, получается 0x2с, затем делится на 2, в итоге 0х16 = 22
Действительно туплю... 00000001 00101100 00000000 00101100 00000000 00010110 ...спасибо за помощь. Всё правильно...
Опять туплю... Такая заморочка: Код (Text): #include <iostream.h> main() { short int matrix = 47; matrix = matrix | 32768; cout << matrix << endl; return 0; } или так: Код (Text): #include <iostream.h> main() { short int matrix = 47; _asm { OR matrix, 32768 } cout << matrix << endl; return 0; } Возвращает: -32721. А не -47. В чём проблема? С размещением в памяти многобайтовых данных, так?
32768 в битах выглядит как 1000000000000000 47 как 0000000000101111 1000000000000000 or 0000000000101111 = 1000000000101111 1000000000101111 = 32815 или -32721
GNTB Не многобайтовых, а знаковых. Отрицательные числа (любой разрядности) представляются не в прямом коде, а в дополнительном, т.е. char (-1) в хекс-виде записывается как FFh, а не 81h, а твои short int (-47) будут FFD1h, а не 802Fh как ты пытаешься делать. Чтобы изменить знак числа нужно не знаковый бит менять, а нужно инвертировать все биты числа операцией NOT (или XOR c 0) и прибавить 1
leo xor c 0 любого числа выдаст тоже самое число вот ксор с (-1), расширенной до величины машинного слова, - другое дело ж)