Частина 30 – Дебагування змінних типу Float
Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.
Давайте знову розглянемо наш код.
Давайте спробуємо знайти помилку!
Давайте зупинимося на main+20 і продовжимо на цьому місці.
Давайте побачимо, яку вартість знаходиться всередині r11-8. Візьміть за приклад, що вона становить 1337.09998, яка наближає нашу вартість в нашому оригінальному коді C++. Увага! Число з плаваючою точкою має близько 7 цифр після коми точності, тому ми не бачимо 1337.1. Будьте уважні до цього, оскільки це дуже важливо далі.
Ми також бачимо цю вартість в високій пам'яті.
Давайте зупинимося на main+28 і продовжимо.
Давайте побачимо дивну нову інструкцію. Ми бачимо vldr і значення всередині r11, #8__ переміщується в s0. А що таке s0? У нас є математичний процесор, який має серію додаткових регістрів, які працюють з десятковими або плаваючими-цілочисельними числами. Тут ми бачимо приклад такого, до якого значення 1337.09998 переміщується в s0. Інструкція vldr завантажує константне значення в кожний елемент однобайтового або подвійної точності регістра, наприклад s0.
Ми можемо побачити ці спеціальні регістри лише тоді, коли ми виконуватимемо команду info registers all, як ми робимо нижче.
Нижче ми бачимо значення, яке тепер переміщується в s0.
Наступна неділя ми вийдемо на тему Хакінгу змінних типу Float.