logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom] Przepisanie 8 bitów liczby Double do liczby Byte

matul 15 Lis 2012 09:50 1974 4
  • #1 11531373
    matul
    Poziom 11  
    Witam ...

    Mam taki problem jak w temacie ... a mianowicie chodzi o to żeby przepisać dowolny Bajt liczby Double (liczba 8-mio bajtowa) do liczby typu Byte.

    Jak to zrobić najprościej ... w rozumieniu najszybciej ???

    Aktualnie mam zrobione przepisanie na pętli FOR która wykonuje się 8 razy i przepisuje po jednym bicie - strasznie wolno działa program jak ma do przepisania 1kB pamięci RAM.

    W assemblerze jest taka funkcja która zwraca 1, 2, 3 i 4 Bajt liczby 4-bajtowej (LOW, HIGH, BYTE3, BYTE4), może jakoś to wykorzystać ??
  • #2 11531396
    KJ
    Poziom 31  
    Wystarczy odpowiednio zadeklarować zmienne np:

    dim A as double at <- i tu podajesz fizyczny adres w pamieci ram
    dim a1 as byte at <- i tu podajesz tensam adres co wyżej OVERLAY
    dim a2 as byte at <- i tu podajesz adres o 1 wiekszy niż wyżej OVERLAY
    dim a3 as byte at <- i tu podajesz adres o 2 wiekszy niż wyżej OVERLAY
    dim a4 as byte at <- <- i tu podajesz adres o 3 wiekszy niż wyżej OVERLAY


    np:

    Dim A as double at 100
    dim a1 as byte at 100 overlay
    dim a2 as byte at 101 overlay
    dim a3 as byte at 102 overlay
    dim a4 as byte at 103 overlay
    masz bajty z doubla w zmiennych byte ;)
  • #3 11534497
    matul
    Poziom 11  
    Dzięki za naprowadzenie ... kierunek dobry ale zrobiłem bez tworzenia zbędnych zmiennych.

    Według przykładu musiałbym stworzyć ich 1152 szt. a co najważniejsze je nazwać i samo operowanie na nich było by problemem.

    Moje rozwiązanie wygląda tak:

    Dim Liczba(128) As Double At &H400 - zapis lokuje 1kB pamięci począwszy od 1024 komórki

    Odwołanie robię bezpośrednio do pamięci ram funkcją:

    Liczba_x = Inp(x) gdzie x to nr komórki pamięci

    Trochę prostej matematyki i odpowiednio przeliczam pozycję danych w pamięci.
    Jest to dla mnie pseudo tablica o wymiarach 128*8.

    Problem rozwiązany.
  • #4 11534843
    ZbeeGin
    Poziom 39  
    matul napisał:
    Dim Liczba(128) As Double At &H400 - zapis lokuje 1kB pamięci począwszy od 1024 komórki

    Zamiast bezpośrednio przydzielać adres bazowy (mieszając kompilatorowi w jego pracy), mogłeś go wyłuskać za pomocą VARPTR().
  • #5 11537187
    Konto nie istnieje
    Poziom 1  
REKLAMA