Частина 21 – Дебагування ADC
Для повного змісту змісту всіх уроків натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.
Для підсумовування, ADC є тим же, що і ADD, за винятком того, що воно додає 1, якщо флаг переносу встановлений. Нам потрібно особливо звернути увагу на CPSR або реєстр стану, коли ми працюємо з ADC.
Давайте переглянемо свій код:
Ми додаємо 100 десятичне в r1, 4,294,967,295 в r2, 100 десятичне в r3 і 100 десятичне в r4. Потім ми додаємо r1 і r2 і розміщуємо в r0 і потім додаємо r3 і r4 і розміщуємо в r5.
Ми бачимо додаємо, яке встановлює флаги в CPSR. Нам знову потрібно згадати, коли ми дебагуємо в GDB, значення CPSR знаходиться в шістнадцятковому вигляді. Для того, щоб побачити, які флаги встановлені, нам потрібно перетворити шістнадцятковий на бінарний. Це зробить сенс, коли ми почнемо дебагувати і хакувати цей приклад у майбутніх уроках.
У минулому тижні я піднімав питання, де я хотів, щоб ви запитали себе, що відбувається, коли r3(100 десятичне) додається до r4(100 десятичне)? Що ви думаєте, що буде значення r5 з прикладом встановлення флагів з результатом додавання?
Ок, так ми додаємо 100 десятичне і 100 десятичне разом в r3 і r4 і отримуємо 201 десятичне в r5! Чи щось зламано? ADC є тим же, що і ADD, за винятком того, що воно додає 1, якщо флаг переносу встановлений. Тому ми отримуємо додатковий 1 в r5.
Нам знову потрібно згадати, що біти 31, 20, 29 і 28 в CPSR вказують наступне:
біт 31 - N = Флаг Негативного стану
біт 30 - Z = Флаг Змінного стану
біт 29 - C = Флаг Переносу стану
біт 28 - V = Флаг Перезапису стану
Ми бачимо CPSR в 20000010 шістнадцятковий. Найвисокі біти 20000010 шістнадцятковий в бінарному вигляді 0010.
Отже, якщо значення в бінарному вигляді було 0010 біт 31, 30, 29 і 28 (NZCV), це означало б:
Флаг Негативного стану не встановлений
Флаг Змінного стану не встановлений
Флаг Переносу встановлений
Флаг Перезапису стану не встановлений
Як ми можемо побачити, флаг переносу був встановлений. Я надіюся, ви зможете засвоїти і зрозуміти кожну з цих дуже простих операцій і як вони впливають на CPSR.
У наступному тижні ми вийдемо на хакінг ADC.