не с использованием стека или регистра. Хочу mov [rcx], 0deadbeefh в одну строку
Нет такой инструкции.
mov [rcx], 0deadbeeh есть, а deadbeef нет.
не слушай что инструкции нет. ее И ПРАВДА НЕТ. но функционал который ты хочешь осуществить такой инструкцией это mov [rcx],-$80000000+$80000000 xor ($DEADBEEF) - и вот такая инструкция есть.
Да, такая есть. И mov dword[rcx],0xdeadbeef есть.
Нет, там будут единицы в старших битах.
верно, но когда прогер пытается поместить в 64разрядный регистр 32 разрядное значение, ему обычно на верхние 32 разряда пофиг и он учитывает что они как бы неопреденные (в данном случае единицы в старших битах).
mov qword [rcx], $DEADBEEF processed: mov qword[rcx],$DEADBEEF error: value out of range.
Ещё раз повторяю, какая инструкция есть, когда кладёшь qword immediate в память: любое число, где биты 32-63 равны 31-ому. 0xdeadbeef подходит? Нет. А вот если dword immediate класть, там ничего никуда не расширяется, клади на здоровье. Поэтому mov qword[rcx],$deadbeef не ок, mov qword[rcx],$0deadbee ок, mov Dword[rcx],$deadbeef ок.
deadbee >32 бит,
Такого в тз не было, тут уже какие-то фантазии. Мы пишем 64-битное значение в память, про регистры вообще речи не шло.
не подходит. Я и 0xdeadbeef и $deadbeef и 0deadbeef и 0deadbeefh пихать пытался
Считай: 0b00001101'11101010'11011011'11101110
Обсуждают сегодня