Допустим, мы имеем линию сборки, как это:переходе от 32 бит до 64 бит в сборке
.loop:
cmp %esi, %rcx
Я знаю, что один регистр используется для 32-битной, а другой для 64-битных. Но можно ли превратить %rcx
в 32-разрядный, чтобы я не получал ошибку при попытке запустить код? Я знаю, что могу использовать ecx
, но я хочу увидеть, если это возможно использовать %rcx
То, что вы просите сделать, невозможно и не имеет смысла. Однако вы можете использовать% rsi, 64-битный регистр, нижняя половина которого равна% esi. Изменить: чтобы быть ясным, я предлагаю вам выполнить 64-битное сравнение. В противном случае возникает вопрос, что должно сравниться с 32-битным и 64-битным значением? Является ли 32-битное значение неподписанным или подписанным? – icecreamsword
Hi, 32-разрядное значение без знака. – Andrew
Существует 2^64 уникальных значения, которые могут быть представлены в 64 бит. Есть только 2^32 уникальных значения, которые могут быть представлены в 32 битах. Поэтому попытка сохранить 64-битное значение в 32-битной переменной будет потерять данные. Обратное неверно. Как это бывает, всякий раз, когда вы пишете 32-разрядный регистр на AMD64, он равен нулю - до 64 бит. Если вы знаете, что что-то написано в% esi, то% rsi - это 64-битное, ноль-расширенное значение. – icecreamsword