Робота з дробовими числами на асемблері Assembler
Робота з дробовими числами на асемблері
Отже, із основними командами розібралися. Тепер на радість та щастя студентів напишемо дві процедури, які перетворюють рядок на число з плаваючою точкою і навпаки. Спочатку функція, яка перетворює рядок на число. Загальний принцип процедури такий: початку завантажуємо в st0 нуль у циклі, дивимося черговий символ у рядку, перетворюємо цей символ на число і додаємо до st0, попередньо помноживши його на 10. Після всього виконаного дивимося, скільки у нас символів після коми і ділимо st0 на 10 стільки разів, скільки у нас символів після коми.
Точність значення можна змінити, просто змінивши директиву qword (на dword або tword) у рядку, який я помітив стрілкою. Тільки не забув, процедура GetZSLength
Тепер напишемо процедуру перетворення числа в рядок. Загальний принцип роботи такої: спочатку нормалізуємо число, тобто. робимо його менше одиниці, у циклі ділячи його на 10 поки вона не стане менше нуля, заодно міряємо, скільки у нас символів ДО коми. Після чого у циклі множимо число на 10 і зберігаємо його як ціле число, відкинувши дробову частину, після чого отримане число перетворюємо з символ, додавши до нього 30h. До речі, треба не забути відняти від st0 отриману цілу частину. Робимо цю операцію стільки разів, скільки у нас символів до коми. Після чого додаємо до рядка символ роздільника. Далі проводимо аналогічну операцію, але тільки стільки разів, чому у нас дорівнює точність результату (кількість символів після коми).