O'rnatish: 8 bit chip ustida 32 bit suzuvchi nuqta ko'rsatmalari

Men do'stimga 8 bit AVR chipida (The Atmega8535) ba'zi montaj kodlarini bajarishga yordam berishga harakat qilardim, lekin montaj haqidagi bilimlar juda nozik va ko'pincha zamonaviy chiplar atrofida joylashgan bo'lib, eskirgan fotoalbom emas.

Shunday qilib, FADD kabi suzuvchi nuqta maxsus ko'rsatmalar to'plamlarini qo'llab-quvvatlamaydigan 8 bitlik arxitekturada ikki 32 bitli suzuvchi nuqtalarni qanday qo'shish kerakligi haqidagi savolga qaytib keladi ...

; 3.1415926 (pi) is given by 0x40 0x49 0x0F 0xDA
; 2.7182818 (e)  is given by 0x40 0x2D 0xF8 0x54

Qiziqtirgan bu yerda ushbu jip uchun ma'lumot sahifasi. Buyruqlar to'plami 301 betda boshlanadi.

0
@BlooIt Hech aqldan emas. Taxminan 80-yillarning oxirida har qanday kompyuterdagi suzuvchi nuqtalar noyob va qimmatbaho aksessuarlar edi - agar u mavjud bo'lsa edi. Yaratuvchi kompilyatorlar faqatgina suzuvchi nuqtali matematikani amalga oshirish uchun to'liq ko'rsatmalardan foydalanadigan kutubxonalarga qo'ng'iroq qilishadi. Bu asta sekin ishlaydi. Agar siz kutubxonadan foydalana olmasangiz ham, undan kodni chiqarib olish uchun nima qilish kerakligini oldindan bilishingiz kerak.
qo'shib qo'ydi muallif Gene, manba
@BlooIt Hech aqldan emas. Taxminan 80-yillarning oxirida har qanday kompyuterdagi suzuvchi nuqtalar noyob va qimmatbaho aksessuarlar edi - agar u mavjud bo'lsa edi. Yaratuvchi kompilyatorlar faqatgina suzuvchi nuqtali matematikani amalga oshirish uchun to'liq ko'rsatmalardan foydalanadigan kutubxonalarga qo'ng'iroq qilishadi. Bu asta sekin ishlaydi. Agar siz kutubxonadan foydalana olmasangiz ham, undan kodni chiqarib olish uchun nima qilish kerakligini oldindan bilishingiz kerak.
qo'shib qo'ydi muallif Gene, manba
8 bitli AVRlar zamonaviy texnologiya va eskirgan texnologiya. Intel 32 bit protsessor + quvvat manbalari + xotira tekshirgichi + RAM + to'xtovsiz xotira + ADC + ketma-ket interfeyslarni tekshirgichlar + ... 8 pinli paketda 1 AQSH dollaridan kamroq qiymatga ega bo'lishga harakat qiling.
qo'shib qo'ydi muallif JimmyB, manba
8 bitli AVRlar zamonaviy texnologiya va eskirgan texnologiya. Intel 32 bit protsessor + quvvat manbalari + xotira tekshirgichi + RAM + to'xtovsiz xotira + ADC + ketma-ket interfeyslarni tekshirgichlar + ... 8 pinli paketda 1 AQSH dollaridan kamroq qiymatga ega bo'lishga harakat qiling.
qo'shib qo'ydi muallif JimmyB, manba
8 bitli AVRlar zamonaviy texnologiya va eskirgan texnologiya. Intel 32 bit protsessor + quvvat manbalari + xotira tekshirgichi + RAM + to'xtovsiz xotira + ADC + ketma-ket interfeyslarni tekshirgichlar + ... 8 pinli paketda 1 AQSH dollaridan kamroq qiymatga ega bo'lishga harakat qiling.
qo'shib qo'ydi muallif JimmyB, manba
"tashqi kutubxonalardan foydalanish" variant emasmi? Keyin bu a.k.a uy vazifasi, a?
qo'shib qo'ydi muallif JimmyB, manba
"tashqi kutubxonalardan foydalanish" variant emasmi? Keyin bu a.k.a uy vazifasi, a?
qo'shib qo'ydi muallif JimmyB, manba
"tashqi kutubxonalardan foydalanish" variant emasmi? Keyin bu a.k.a uy vazifasi, a?
qo'shib qo'ydi muallif JimmyB, manba
32-bitlik 32-bitlik mashinada 32 bitlik qattiq nuqta matematika bilan shug'ullanadigan savollarni so'rashingiz mumkin (agar siz float qilishni xohlasangiz, uni hal qilishingiz kerak). qanday qilib ko'paytirish yoki bo'lmaydigan mashinaga ega bo'lishim mumkin yoki qanday qilib X bit bittadan ko'paytiriladimi yoki faqat Y bitsali mashinaga bo'linadi. Hackerlar Delight - yorliqlar bilan bir qatorda bunday narsalarni qanday qilish haqida asoslar uchun yaxshi kitobdir. Shuni e'tiborga olish kerakki, agar siz kutubxonada buni amalga oshirishni xohlasangiz, juda katta bo'ladi va sizning dastur maydoningiz sezilarli miqdorni iste'mol qiladi.
qo'shib qo'ydi muallif old_timer, manba
32-bitlik 32-bitlik mashinada 32 bitlik qattiq nuqta matematika bilan shug'ullanadigan savollarni so'rashingiz mumkin (agar siz float qilishni xohlasangiz, uni hal qilishingiz kerak). qanday qilib ko'paytirish yoki bo'lmaydigan mashinaga ega bo'lishim mumkin yoki qanday qilib X bit bittadan ko'paytiriladimi yoki faqat Y bitsali mashinaga bo'linadi. Hackerlar Delight - yorliqlar bilan bir qatorda bunday narsalarni qanday qilish haqida asoslar uchun yaxshi kitobdir. Shuni e'tiborga olish kerakki, agar siz kutubxonada buni amalga oshirishni xohlasangiz, juda katta bo'ladi va sizning dastur maydoningiz sezilarli miqdorni iste'mol qiladi.
qo'shib qo'ydi muallif old_timer, manba
32-bitlik 32-bitlik mashinada 32 bitlik qattiq nuqta matematika bilan shug'ullanadigan savollarni so'rashingiz mumkin (agar siz float qilishni xohlasangiz, uni hal qilishingiz kerak). qanday qilib ko'paytirish yoki bo'lmaydigan mashinaga ega bo'lishim mumkin yoki qanday qilib X bit bittadan ko'paytiriladimi yoki faqat Y bitsali mashinaga bo'linadi. Hackerlar Delight - yorliqlar bilan bir qatorda bunday narsalarni qanday qilish haqida asoslar uchun yaxshi kitobdir. Shuni e'tiborga olish kerakki, agar siz kutubxonada buni amalga oshirishni xohlasangiz, juda katta bo'ladi va sizning dastur maydoningiz sezilarli miqdorni iste'mol qiladi.
qo'shib qo'ydi muallif old_timer, manba
apparat fpu bo'lsa, u xuddi shu tarzda ishlaydi.
qo'shib qo'ydi muallif old_timer, manba
apparat fpu bo'lsa, u xuddi shu tarzda ishlaydi.
qo'shib qo'ydi muallif old_timer, manba
apparat fpu bo'lsa, u xuddi shu tarzda ishlaydi.
qo'shib qo'ydi muallif old_timer, manba
Shu bilan boshqa har qanday sobit nuqta mashinasi suzuvchi nuqta matematikasi. bu sizning maktabda matematika qilganingiz kabi. siz o'zingizning kasr nuqtalaringiz qatorini qo'shib (ustunlar mos kelishi kerak), qo'shing. Keyinchalik, float uchun bitta kasrni normalizatsiya qilishingiz mumkin. agar siz allaqachon qanday qilib bilsangiz va hatto qilsangiz ham aqldan chiqadigan bo'lsa, faqat manbaani ishchi kutubxonasiga olib boring va uni kompilyatsiya yoki kompilyatsiya qilingan kutubxona ob'ektini oling va uni bog'lang. va uni chaqiring.
qo'shib qo'ydi muallif old_timer, manba
Shu bilan boshqa har qanday sobit nuqta mashinasi suzuvchi nuqta matematikasi. bu sizning maktabda matematika qilganingiz kabi. siz o'zingizning kasr nuqtalaringiz qatorini qo'shib (ustunlar mos kelishi kerak), qo'shing. Keyinchalik, float uchun bitta kasrni normalizatsiya qilishingiz mumkin. agar siz allaqachon qanday qilib bilsangiz va hatto qilsangiz ham aqldan chiqadigan bo'lsa, faqat manbaani ishchi kutubxonasiga olib boring va uni kompilyatsiya yoki kompilyatsiya qilingan kutubxona ob'ektini oling va uni bog'lang. va uni chaqiring.
qo'shib qo'ydi muallif old_timer, manba
Shu bilan boshqa har qanday sobit nuqta mashinasi suzuvchi nuqta matematikasi. bu sizning maktabda matematika qilganingiz kabi. siz o'zingizning kasr nuqtalaringiz qatorini qo'shib (ustunlar mos kelishi kerak), qo'shing. Keyinchalik, float uchun bitta kasrni normalizatsiya qilishingiz mumkin. agar siz allaqachon qanday qilib bilsangiz va hatto qilsangiz ham aqldan chiqadigan bo'lsa, faqat manbaani ishchi kutubxonasiga olib boring va uni kompilyatsiya yoki kompilyatsiya qilingan kutubxona ob'ektini oling va uni bog'lang. va uni chaqiring.
qo'shib qo'ydi muallif old_timer, manba
qo'shib qo'ydi muallif ssnobody, manba
qo'shib qo'ydi muallif ssnobody, manba
qo'shib qo'ydi muallif ssnobody, manba
Agar siz IEEE 754 32 bitli FP-raqamlariga foydalanmasangiz (men buni format deb bilsam), men sizga qanday vakillik qilayotganini ko'rib chiqishni taklif qilaman, qo'l bilan biroz qo'shimcha qilib ko'ring, so'ngra algoritmni faqatgina ch keyin yig'ilishga o'tkazing. Agar bu uy vazifasi yoki o'xshash bo'lmasa, eski AVR chipi uchun derivat izlashingiz mumkin, bu sizda C kodini beradi (baribir barcha qiziqarli narsalar yo'qoladi).
qo'shib qo'ydi muallif user781847, manba
Agar siz IEEE 754 32 bitli FP-raqamlariga foydalanmasangiz (men buni format deb bilsam), men sizga qanday vakillik qilayotganini ko'rib chiqishni taklif qilaman, qo'l bilan biroz qo'shimcha qilib ko'ring, so'ngra algoritmni faqatgina ch keyin yig'ilishga o'tkazing. Agar bu uy vazifasi yoki o'xshash bo'lmasa, eski AVR chipi uchun derivat izlashingiz mumkin, bu sizda C kodini beradi (baribir barcha qiziqarli narsalar yo'qoladi).
qo'shib qo'ydi muallif user781847, manba
Agar siz IEEE 754 32 bitli FP-raqamlariga foydalanmasangiz (men buni format deb bilsam), men sizga qanday vakillik qilayotganini ko'rib chiqishni taklif qilaman, qo'l bilan biroz qo'shimcha qilib ko'ring, so'ngra algoritmni faqatgina ch keyin yig'ilishga o'tkazing. Agar bu uy vazifasi yoki o'xshash bo'lmasa, eski AVR chipi uchun derivat izlashingiz mumkin, bu sizda C kodini beradi (baribir barcha qiziqarli narsalar yo'qoladi).
qo'shib qo'ydi muallif user781847, manba
Afsuski, bu vazifa bu eskirgan 8-bit AVRda amalga oshirilishi kerak, chunki bu ayanchli, u atrofida hech qanday yo'l yo'q (tashqi kutubxonalarni ulash yoki ishlatish kabi).
qo'shib qo'ydi muallif Alhamza Alnaimi, manba
Afsuski, bu vazifa bu eskirgan 8-bit AVRda amalga oshirilishi kerak, chunki bu ayanchli, u atrofida hech qanday yo'l yo'q (tashqi kutubxonalarni ulash yoki ishlatish kabi).
qo'shib qo'ydi muallif Alhamza Alnaimi, manba
Afsuski, bu vazifa bu eskirgan 8-bit AVRda amalga oshirilishi kerak, chunki bu ayanchli, u atrofida hech qanday yo'l yo'q (tashqi kutubxonalarni ulash yoki ishlatish kabi).
qo'shib qo'ydi muallif Alhamza Alnaimi, manba

6 javoblar

Sizda quyidagi variantlar mavjud:

  • look at the avr-libc for implementation details
  • write your program in c.
    I bet that avr-gcc writes better (in terms of efficiency and correctness) assembly code than you
  • use an easier number format. eg:

Shuningdek, asosiy tushuncha uchun yaxshi manba quyidagi kitobdir:

"Boshlang'ich vazifalar uchun dasturiy ta'minot qo'llanmasi" William J. Cody, Uilyam Waite tomonidan

U turli (shuningdek, asosiy) operatsiyalarni va algoritmlarni faqat tamsayıli arifmetika yordamida amalga oshirishni ko'rsatadi.

3
qo'shib qo'ydi
OPga ko'ra, ba'zi uy vazifalari bajarilishi kerak, bu unga kerakli narsalarni o'rganishga yordam berish uchun juda yaxshi javob. +1
qo'shib qo'ydi muallif JimmyB, manba

Sizda quyidagi variantlar mavjud:

  • look at the avr-libc for implementation details
  • write your program in c.
    I bet that avr-gcc writes better (in terms of efficiency and correctness) assembly code than you
  • use an easier number format. eg:

Shuningdek, asosiy tushuncha uchun yaxshi manba quyidagi kitobdir:

"Boshlang'ich vazifalar uchun dasturiy ta'minot qo'llanmasi" William J. Cody, Uilyam Waite tomonidan

U turli (shuningdek, asosiy) operatsiyalarni va algoritmlarni faqat tamsayıli arifmetika yordamida amalga oshirishni ko'rsatadi.

3
qo'shib qo'ydi
OPga ko'ra, ba'zi uy vazifalari bajarilishi kerak, bu unga kerakli narsalarni o'rganishga yordam berish uchun juda yaxshi javob. +1
qo'shib qo'ydi muallif JimmyB, manba

Sizda quyidagi variantlar mavjud:

  • look at the avr-libc for implementation details
  • write your program in c.
    I bet that avr-gcc writes better (in terms of efficiency and correctness) assembly code than you
  • use an easier number format. eg:

Shuningdek, asosiy tushuncha uchun yaxshi manba quyidagi kitobdir:

"Boshlang'ich vazifalar uchun dasturiy ta'minot qo'llanmasi" William J. Cody, Uilyam Waite tomonidan

U turli (shuningdek, asosiy) operatsiyalarni va algoritmlarni faqat tamsayıli arifmetika yordamida amalga oshirishni ko'rsatadi.

3
qo'shib qo'ydi
OPga ko'ra, ba'zi uy vazifalari bajarilishi kerak, bu unga kerakli narsalarni o'rganishga yordam berish uchun juda yaxshi javob. +1
qo'shib qo'ydi muallif JimmyB, manba

Shunday qilib, 8 bitli arxitekturada ikkita 32 bitlik suzuvchi nuqtani qanday qo'shish kerakligi haqida savolga tushib qoladi, bu hatto FADD kabi suzuvchi nuqta maxsus ko'rsatmalarini qo'llab-quvvatlamaydi.

The avr-libc library does it like this. Therefore you should too.

2
qo'shib qo'ydi

Shunday qilib, 8 bitli arxitekturada ikkita 32 bitlik suzuvchi nuqtani qanday qo'shish kerakligi haqida savolga tushib qoladi, bu hatto FADD kabi suzuvchi nuqta maxsus ko'rsatmalarini qo'llab-quvvatlamaydi.

The avr-libc library does it like this. Therefore you should too.

2
qo'shib qo'ydi

Shunday qilib, 8 bitli arxitekturada ikkita 32 bitlik suzuvchi nuqtani qanday qo'shish kerakligi haqida savolga tushib qoladi, bu hatto FADD kabi suzuvchi nuqta maxsus ko'rsatmalarini qo'llab-quvvatlamaydi.

The avr-libc library does it like this. Therefore you should too.

2
qo'shib qo'ydi