Autor Wątek: dec vs hex czyli wyższość świąt...  (Przeczytany 19784 razy)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #15 dnia: 2013.11.07, 05:09:13 »
za to Allegro i niektóre banki są przeciwne notacji ułamków dziesiętnych. Odruchowo od lat oddzielam je kropką. Allegro jest na tyle wredne, że nie pozwoli wystawić nic za 5.50 zł - wróci całą stronę. Przecinek chyba służy raczej do oddzielania liczb 2, 5, 6.66, 13.72.

W języku polskim do oddzielenia części całkowitej od ułamkowej używa się wyłącznie przecinka. Taka jest norma, koniec, kropka.
To dopiero początek. Notacja matematyczna, muzyczna, języki programowania, symbolika fizyczno-chemiczna to standardy ponadnarodowe. Jak może istnieć taka reguła, a raczej wyjątek od niej, że w tym kraju (nie języku) oddzielamy ułamki kropką, w tamtym przecinkiem a w innym np. apostrofem? Taka sytuacja - piszesz program "na sucho" w edytorze tekstu dla kogoś z innego kraju. Ten ktoś go kopiuje, przenosi jako ustandaryzowany UTF do kompilatora i pomimo dokładnej kopii pliku program nie działa. Jeśli miałbym używać przecinka do separowania ułamka od części całkowitej, w jaki sposób odróżnię go od przecinka oddzielającego liczby? Norma, która utrudnia jednoznaczną wymianę danych jest poważną przeszkodą. Mam na myśli współczesne systemy. Do konstrukcji z ubiegłego wieku musimy się przychylić że każdy system miał inny standard kodowania dodatkowych znaków czy układu klawiatury. Co do ostatniego, to Polska ma szczęście, że przyjął tu się najpowszechniejszy układ dla alfabetu łacińskiego, czego nie mogą powiedzieć w innych krajach Europy (przestawione A/Z czy Y/Z) co niczemu oprócz utrudnienia dziś nie służy. Niech każdy kraj ma swój hymn, każdy region swój język, każde miasto swój herb, lecz nie można budować patriotyzmu na tym, co jest wspólnym dobrem i wysiłkiem ludzkości.
AY Music, ULA plus.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #16 dnia: 2013.11.07, 08:30:22 »
Ale może zrozum różnicę między "językiem codziennym" a "językiem programowania". W tym pierwszym notacja liczbowa, daty, czas itp. zależny jest od kraju i obowiązujących w nim norm. W tym drugim nie ma mowy o pomyłkach - konkretna notacja jest zapisana w specyfikacji danego języka a jedyny problem może się pojawić jeśli chcesz w nim obrabiać dane "języka codziennego" - wtedy musisz zdecydować się na jakiś pośredni format danych (np. zapisu czasu czy daty) a na zewnątrz generować dane w formacie zależnym od tego, co raportuje system operacyjny albo co sobie użytkownik ustawi w preferencjach twojego programu.

Co do sposobów zapisu HEX/BIN w różnych assemblerach - problem polega na tym, że każdy z programów tłumaczących (czyli de facto właśnie assembler) ma własną specyfikację języka, który rozumie i zanim zaczniesz coś pisać musisz zdecydować którego assemblera (programu) będziesz używał i pisać w assemblerze (języku - symbolicznej reprezentacji kodu maszynowego) zgodnym z jego specyfikacją. A jak przenosisz kod między różnymi - niezgodnymi ze sobą na poziomie źródła - assemblerami musisz się liczyć z koniecznością konwersji i akurat zapis liczb może być w tym wypadku najmniejszym problemem.

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #17 dnia: 2013.11.07, 10:03:44 »
Jeśli miałbym używać przecinka do separowania ułamka od części całkowitej, w jaki sposób odróżnię go od przecinka oddzielającego liczby?

Tu akurat problemu nie ma. Liczby, tak samo jak słowa w zdaniu oddziela się przecinkiem i spacją.

Zgadzam się, że jest dużo takich narodowych nonsensów: inne szerokości torów, ruch lewostronny, inne napięcia w sieci. Wszystko to powoduje dodatkowe koszty, ale dopóki się tego nie zmieni - trzeba się stosować. Przypomnij sobie co się stało z "Anal Intruderem" w filmie Top Secret ;D
Chyba nie będziesz również protestował przeciw ruchowi lewostronnemu w Londynie jeżdżąc po prawej stronie???

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #18 dnia: 2014.12.21, 17:19:36 »
Ok, wróćmy do tematu przewodniego.
Poszukuję edytora tekstu lub pluginu, który zamieni w pliku tekstowym wszystkie liczby hex na dec (i odwrotnie).
Podejrzewam, że Notepad++ ma taką opcję, ale jedyne co znalazłem to hex <-> ascii i okienko do konwersji pojedynczej liczby.
AY Music, ULA plus.

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #19 dnia: 2014.12.21, 17:56:07 »
Prościej Ci będzie program napisać.
W N++ możesz używać regexpów w wyszukiwaniu z zamianą.
« Ostatnia zmiana: 2014.12.21, 19:26:12 wysłana przez trojacek »

Gelip

  • *****
  • Wiadomości: 769
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #20 dnia: 2014.12.22, 23:24:17 »
Może da się jakoś wykorzystać programy ZX-Blockeditor lub Tapir - mają fajne przełączniki widoku danych DEC HEX

P.S. Dziwne, ale mój ulubiony edytor WinHex tak nie potrafi  :-\
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #21 dnia: 2014.12.23, 12:35:41 »
Wiesz co, byłem przekonany że takie coś znajdę w 2 minuty przez Google i klapa :(

Ja bardzo potrzebujesz to daj znać i w wolnym czasie w pół godziny machnę jakąś miniaplikację okienkową to robiącą.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #22 dnia: 2014.12.23, 15:57:04 »
Taki problem powstaje przy "Save disassembly" z debuggera ZX Spin:
Gdy debugger pracuje w dec, zapisze w pliku .asm adresy dziesiętnie, ale etykiety są w hex, więc taki plik jest bezużyteczny.
Przy zapisie w hex, plik nadaje się do modyfikacji i re-assemblacji.
Debugger ma jednak błąd, podczas zapisu disassembly w hex, domaga sie podania adresu początkowego i długości (lub adresu końcowego) w hex, a przyjmuje jedynie cyfry 0-9. Nie jest problemem zapisanie kilkanaście bajtów więcej, tak aby adres składał się z samych cyfr i później obcięcie.

Rafal, jeśli potrafisz, to napisz. Nie dla mnie, dla ludzkości.  W adresach LD, JP, CALL zapisywane są z prefixem $, w etykietach L_ a w komentarzach (adresy i wartości) bez prefixu. Trzeba domyślnie przyjąć że wszystkie numery są w hex.
Przykładowy kod z debuggera wygląda tak:

LD ($5C8D), A ; 764B 32 8D 5C
LD ($5C8F), A ; 764E 32 8F 5C
LD A, $00 ; 7651 3E 00
CALL $229B ; 7653 CD 9B 22
CALL $0DAF ; 7656 CD AF 0D
RET ; 7659 C9
L_765A: LD A, $19 ; 765A 3E 19
LD ($7D29), A ; 765C 32 29 7D
LD A, $03 ; 765F 3E 03
LD HL, L_7D1C ; 7661 21 1C 7D
CP (HL) ; 7664 BE
JP NZ, L_767E ; 7665 C2 7E 76
LD A, $09 ; 7668 3E 09
LD HL, $7D1B ; 766A 21 1B 7D
CP (HL) ; 766D BE
JP NZ, L_7679 ; 766E C2 79 76
LD A, $23 ; 7671 3E 23
LD (L_7D2A), A ; 7673 32 2A 7D
JP L_767E ; 7676 C3 7E 76
L_7679: LD A, $31 ; 7679 3E 31
LD (L_7D2A), A ; 767B 32 2A 7D
L_767E: LD A, $02 ; 767E 3E 02
LD HL, L_7D1C

Tutaj przykład kodu przy zapisie dziesiętnym. Etykiety pozostają w hex i pojawia się problem interpretacji, czy np. 7607 to liczba w dec czy hex. Wydaje się, że wystarczy poprawić etykiety i adresy skoków do nich, które zawsze zaczynają sie od L_ i liczba jest w hex.

LD A, 68 ; 30173 62     68
LD (23693), A ; 30175 50     141 92
LD (23695), A ; 30178 50     143 92
LD A, 13 ; 30181 62     13
CALL L35473 ; 30183 205 145 138
CALL L32483 ; 30186 205 227 126
L_75ED: CALL L32558 ; 30189 205 46 127
CALL 654 ; 30192 205 142 2
LD HL, L32005 ; 30195 33     5 125
LD (HL), 0 ; 30198 54     0
LD A, E ; 30200 123
CP 36 ; 30201 254 36
JR Z, L_7607 ; 30203 40     10
INC (HL) ; 30205 52
CP 28 ; 30206 254 28
JR Z, L_7607 ; 30208 40     5
INC (HL) ; 30210 52
CP 20 ; 30211 254 20
JR NZ, L_75ED ; 30213 32     230
L_7607: RET ; 30215 201
L_7608: LD A, 0 ; 30216 62     0
LD (32043), A ; 30218 50     43 125
AY Music, ULA plus.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #23 dnia: 2014.12.23, 16:06:20 »
Abrimaal, a zechciałbyś mi wytłumaczyć po co chcesz mieć to dziesiętnie? Jeżeli dalej to kompilujesz, to nie ma to najmniejszego znaczenia.
Jeżeli analizujesz kod, to wszelkie dobre edytory programisty umieją podświetlać zaznaczony tekst. Chyba że chodzi tylko i wyłącznie o kwestie wizualne...

Wydaje mi się że podmiankę tekstu można łatwo zrobić za pomocą skryptu perlowego.


RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #24 dnia: 2014.12.23, 16:57:15 »
Pozwól że poprawię :)

Cytuj
Wydaje mi się że podmiankę tekstu można łatwo zrobić za pomocą skryptu perlowego.

Próbowałem w życiu coś walczyć z Perlem i wyrażeniami regularnymi i to była masakra.

Wolę napisac 5 razy dłuższy kod ale taki w którym będę wiedział o co chodzi


Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #25 dnia: 2014.12.23, 17:01:05 »
Piszę ogólnie o braku takiego przydatnego narzędzia, nie dlatego że "ja chcę". Analizując kod od razu widzi się, czy np. ingeruje w zmienne systemowe, adresy które człowiek zna raczej w postaci dziesietnej. Z pewnością wiekszość z nas eksperymentowala w Basic wpisując POKE do 23624 czy 23606/07 i takie wartości widzi w kodzie odruchowo.

Prosta ankieta:
1. Kto wie co robi w C64 POKE 53280?
2. Kto zna na pamięć tą liczbę w hex?

AY Music, ULA plus.

steev

  • *****
  • Wiadomości: 1366
  • Miejsce pobytu:
    inode 42
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #26 dnia: 2014.12.23, 18:27:07 »
Pozwól że poprawię :)
Cytuj
Wydaje mi się że podmiankę tekstu można łatwo zrobić za pomocą skryptu perlowego.
Próbowałem w życiu coś walczyć z Perlem i wyrażeniami regularnymi i to była masakra.
Wolę napisac 5 razy dłuższy kod ale taki w którym będę wiedział o co chodzi

A co tu masakrycznego?

#!/usr/bin/perl

use warnings;
use strict;

while(<>) {
    s/L_([0-9A-Z]{4})/sprintf("L%05d",eval("0x".$1))/eg;
    print $_;
}
Machines should work. People should think.

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #27 dnia: 2014.12.23, 18:35:11 »
while(<>) {
    s/L_([0-9A-Z]{4})/sprintf("L%05d",eval("0x".$1))/eg;
    print $_;
}

A wielkie/małe litery?
Dla większości ludzi regexpy są całkowicie nieczytelne i niezrozumiałe. Również dla mnie, choć czasami musiałem je stosować, po czym starałem się szybko pozbyć traumy ;)

steev

  • *****
  • Wiadomości: 1366
  • Miejsce pobytu:
    inode 42
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #28 dnia: 2014.12.23, 19:00:29 »
while(<>) {
    s/L_([0-9A-Z]{4})/sprintf("L%05d",eval("0x".$1))/eg;
    print $_;
}

A wielkie/małe litery?
Dla większości ludzi regexpy są całkowicie nieczytelne i niezrozumiałe. Również dla mnie, choć czasami musiałem je stosować, po czym starałem się szybko pozbyć traumy ;)
Na oko w kodzie po deasemblacji małe litery w adresach nie występują, więc ich uwzględnianie to była by sztuka dla sztuki.
A regexpów trzeba po prostu poużywać, same się 'zrozumieją' :)
Machines should work. People should think.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #29 dnia: 2014.12.24, 08:56:33 »
Piszę ogólnie o braku takiego przydatnego narzędzia, nie dlatego że "ja chcę".

Bo do pewnych zadań używa się odpowiednich narzędzi. Analizę kodu "na zimno" robi się po jego deassemblacji przeznaczonymi do tego narzędziami (Ida albo inne prawdziwe disassemblery - choćby cytowany przeze mnie we wcześniejszych dyskusjach z80dis) a nie emulatorem. Debugger w emulatorze to fajna rzesz do analizy "na gorąco" - na żywmy organizmie.

Cytuj
Analizując kod od razu widzi się, czy np. ingeruje w zmienne systemowe, adresy które człowiek zna raczej w postaci dziesietnej.

Jak chcesz się bawić assemblerem to może w końcu zacznij używać hexa. Cały świat go używa to pewnie i tobie się przyda. Pewne rzeczy lepiej widać w hexie niż dziesiętnie.
Co do zmiennych systemowych - na pamięć to przychodzą mi może ze trzy a resztę i tak muszę sprawdzać więc nie robi mi różnicy czy sprawdzam hex czy dec. Poza tym jednak częściej potrzebna jest analiza "normalnego" kodu, który nie używa zmiennych systemowych czy nawet procedur w ROMie.

Cytuj
Z pewnością wiekszość z nas eksperymentowala w Basic wpisując POKE do 23624 czy 23606/07 i takie wartości widzi w kodzie odruchowo.
No to ja nie widzę - podane przez ciebie zmienne z niczym konkretnym mi się nie kojarzyły i musiałem zajrzeć do dokumentacji, żeby ustalić, że to BORDCR (nigdy nie używałem) i CHARS (nie używałem od czasu jak przestałem próbować robić cokolwiek bardziej zaawansowanego w BASICu).

[/quote]
Prosta ankieta:
1. Kto wie co robi w C64 POKE 53280?
[/quote]

Really? Na C64? Niby czemu miałbym to wiedzieć? ;)

Cytuj
2. Kto zna na pamięć tą liczbę w hex?

Szybki googiel powiedział, że to rejestr VICa odpowiedzialny za kolor ramki. Drugi powiedział, że w hexie to D020. I gdybym programował w assemblerze na C64 to na 99% pamiętałbym go własnie w tej postaci choć raczej przed użyciem upewniałbym się zaglądając do stosownej tabelki.

Ale oczywiście każdemu jego porno - jak się upierasz, że się nie będziesz uczył hexa to się nie ucz - wiem, że są ludzie, którym bardzo dobrze idzie programowania i bez tego. Tyle, że jak się człowiek nauczy to potem - nawet jak na co dzień nie używa - jest mu łatwiej ;)