Гарантии есть. Все команды работающие с 32 битными регистрами - обнуляют старшие 32 бита 64 битного регистра.
О, классно) а читается из rax я так понимаю потому, что разрядность x64, но почему тогда пишется в eax в таком случае?
Ну если пишется заведомо 32битное безнаковое число - то его быстрее и компактнее писать в eax, а не в rax.
Обнуляют или записыают единицы. Это зависит от применения. mov, емнип, аналогичен movzx (результат будет дополнен нулевыми битами. Есть movsx - результат будет дополнен битами таким образом, чтобы сохранить знак источника)
не только mov, все. например xor rax, rax; dec rax; dec eax; результат будет 00000000FFFFFFFE
а почему именно так работает?
Честно говоря странно, что 64-битный адрес запихивает в 32-битный регистр. Компилятор надеется на свое везение))
Тоже странно конечно)
для 32ух битного mov всегда расширение нулём, для знакового расшерения отдельная команда вроде
возможно, какой-то особый набор флагов компиляции, позволяющий обходится 32битными адресами
Значит правильно помню
Обсуждают сегодня