Так котоны, объясните где я туплю Разве обнулиться должна не младшая часть? 0:000> r rax=000000000000243a rbx=0000000000000000 rcx=000000000000d87b rdx=dddddddddddddddd rsi=0000000000000000 rdi=0000000000000000 rip=00007ff66acc100a rsp=0000004ef35bf958 rbp=0000000000000000 r8=0000004ef361e000 r9=00007ff66acc1000 r10=0000000000000000 r11=0000000000000000 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 iopl=0 nv up ei pl nz na po nc cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000206 test64+0x100a: 00007ff6`6acc100a f7e1 mul eax,ecx 0:000> t test64+0x100c: 00007ff6`6acc100c cc int 3 0:000> r rax=000000001ea257de rbx=0000000000000000 rcx=000000000000d87b rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000 rip=00007ff66acc100c rsp=0000004ef35bf958 rbp=0000000000000000 r8=0000004ef361e000 r9=00007ff66acc1000 r10=0000000000000000 r11=0000000000000000 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 --- Сообщение объединено, 18 дек 2022 --- Можете не отвечать В x86-64 запись в 32-разрядный регистр автоматически zero extends в старшие 32 разряда. О сколько нам открытий чудных... Но если кто процитирует конкретные пункты в Intel/AMD мануалах по этому поводу, мои благодарности заранее.
Intel® 64 and IA-32 Architectures Software Developer’s Manual (3.4.1.1 General-Purpose Registers in 64-Bit Mode):
Благодарю. Не слишком то они пытались обратить внимание на столь неочевидную особенность. При этом в описании самих опкодов mov, mul и т.д. это вроде бы не упоминается?
Не упоминается потому что пришлось бы в тысяче мест упоминать одно и то же. Поэтому эта особенность обозначена в особенностях архитектуры в начале книги и особо потом не упоминается. Но это крайне важная особенность влияющая на большую часть инструкций, поэтому не знать её нельзя тут.