имеет бит 16, установленный в 1, но не увеличивается.
Инструкция addi
PowerPC работает аналогично инструкции с тем же именем на процессорах MIPS:
Вы можете добавить число в диапазоне (-0x8000) к (+ 0x7FFF) в регистр.
Инструкция addis
добавит кратное 0x10000 в регистр.
Поскольку 0x9f321062= 0x9f320000 + 0x1062, вы можете добавить 0x9f321062 в регистр, добавив в регистр 0x9f320000 и 0x1062, используя одну addis
и одну addi
инструкцию.
Здесь важно то, что старший бит из 16-битное число 0x1062 ясно, что означает, что 0x1062 не больше 0x7FFF и, следовательно, в диапазоне addi
может иметь дело.
Теперь давайте рассмотрим другой случай:
0x760ae53 =0x7600000 + 0xae53, так что вы можете добавить 0x760ae53 в регистр, добавив 0x7600000 и 0xae53 в регистр.К сожалению, addi
может работать только с диапазоном (-0x8000) до (+ 0x7FFF), поэтому добавление 0xae53 не работает.
Если задан старший бит операнда addi
, addi
инструкция знак-расширяет значение, что фактически означает, что инструкция добавляет (отрицательное значение) (N-0x10000) вместо (положительное значение) N. в регистр.
Таким образом, вы должны сделатьвычисление выполняется следующим образом:
0x760ae53 = 0x7600000 + (0xae53 - 0x10000) + 0x10000 = 0x7610000 + (0xae53 - 0x10000)
Другими словами: необходимо увеличить операнд addis
(0x760) по одному, чтобы компенсировать эффект, из которого addi
будет вычитать 0x10000.
бит 16
Обратите внимание, что в документации PowerPC используется очень запутанная битовая нумерация, которая дажеКажется, для разных процессоров процессоры различаются:
В некоторых документациях 32-разрядного (!) автомобильного PowerPC используются имена регистров от «бит 32» (старший бит) до «бит 63» (младший бит), так что битовые числаОт 0 до 31 даже не эксист ...