Я читаю сборочную книгу ARM Дж. Гибсона, глава 5. В пояснениях к целочисленным инструкциям ADD
и SUB
приведена таблица для обновления флага после вычисления результата.
Чем я не являюсьв состоянии понять, является ли флаг обновлением целого числа без знака для 2 целых чисел A
, B
, где A
и B
"не оба равны 0", а результат равен 2^31-1 < result < 2^32
(то есть между 0x7FFFFFFF
, 0x100000000
)
В нем говорится, что приведенные выше результаты приводят к установке флагов N=1
, Z=0
, C=0
, V=X
(все равно) и расширению мнемонических инструкций команд как
EQ = No, NE = Yes, CS = No, CC = Yes, MI = Yes, PL = No, VS, VC = X, HI = No, LS = Yes, LT, GT, LE = X
Почему добавление без знака, приводящее к значению в пределах 32-битного диапазона, вызывает установку N
бит (и, следовательно, MI
и LS
равны Yes
)
Что я ожидал, так это *Можно установить флаг 1027 *, поскольку 31-й бит равен 1
(считая от бита 0
), но в любом случае результат является положительным (т. Е. PL = Yes
, поскольку он находится в диапазоне 2^31-1 ~ 2^32
).
Я что-то здесь не понимаю?