Thread View: pl.comp.lang.asm
6 messages
6 total messages
Started by identifikator: 20040501
Sun, 09 May 2010 16:36
moja zagadka
Author: identifikator: 20040501
Date: Sun, 09 May 2010 16:36
Date: Sun, 09 May 2010 16:36
2 lines
1044 bytes
1044 bytes
no to jak w szybki sposób zamienić cyfrę binarną 16 bitów na ciąg znaków ASCII?
Re: moja zagadka
Author: Wojciech Muła
Date: Mon, 10 May 2010 14:31
Date: Mon, 10 May 2010 14:31
8 lines
1072 bytes
1072 bytes
"identifikator: 20040501" <NOSPAMtestowanije@go2.pl> wrote: > no to jak w szybki sposób zamienić cyfrę binarną 16 bitów na ciąg znaków > ASCII? Te znaki co mają reprezentować? Zapis szesnastkowy, dwójkowy, dziesiętny liczby? w.
Re: moja zagadka
Author: identifikator: 20040501
Date: Mon, 10 May 2010 18:08
Date: Mon, 10 May 2010 18:08
7 lines
1485 bytes
1485 bytes
Te znaki co mają reprezentować? Zapis szesnastkowy, dwójkowy, dziesiętny liczby? cyferki dziesiętne, już w problem zamiany cyferek na znaki sobie darujmy... oczywiście można pomyśleć o algorytmie uniwersalnym, coby na przykład wyliczał cyferki w kodzie piątkowym... albo na cyfrach rzymskich...
Re: moja zagadka
Author: Wojciech Muła
Date: Mon, 10 May 2010 21:06
Date: Mon, 10 May 2010 21:06
44 lines
2196 bytes
2196 bytes
"identifikator: 20040501" <NOSPAMtestowanije@go2.pl> wrote:
> > Te znaki co mają reprezentować? Zapis szesnastkowy, dwójkowy, dziesiętny
> > liczby?
>
> cyferki dziesiętne, już w problem zamiany cyferek na znaki sobie darujmy...
> oczywiście można pomyśleć o algorytmie uniwersalnym, coby na przykład
> wyliczał cyferki w kodzie piątkowym...
> albo na cyfrach rzymskich...
Problem konwersji sprowadza się w zasadzie do obliczenia:
do {
cyfra := x mod podstawa
zapis cyfry
x := x div podstawa
} while (x > 0)
Dzielenie jest ogólnie wolne, ale skoro podstawa jest stała, można użyć mnożenia
przez specjalnie dobrane liczby, a resztę liczyć w standardowy sposób, tj.
x - ((x div podstawa) * podstawa). Jeśli podstawa jest równa 10, wówczas:
mov ebx, 0xcccccccd ; magiczna liczba
mov eax, [x]
loop:
xor edx, edx
mov eax, ecx ; zapisanie x
mul eax
shr edx, 3 ; edx = eax div 10
mov eax, edx ; zapis nowej wart. x' do następnej iteracji
add edx, edx
lea edx, [edx + edx*4] ; edx = edx * 10
sub ecx, edx ; ecx = x mod 10
; zapis cl
test eax, eax
jnz loop
To tak pi*drzwi, nie testowane. Warto poszukać w sieci informacji
o współczesnych optymalizacjach kompilatorów.
w.
Re: moja zagadka
Author: Wojciech Muła
Date: Tue, 11 May 2010 19:44
Date: Tue, 11 May 2010 19:44
9 lines
1340 bytes
1340 bytes
"identifikator: 20040501" <NOSPAMtestowanije@go2.pl> wrote: > mnożenie zamiast dzielenia? ale numer, tego nie znałem, a jakiś przykład > jakiegoś obliczenia mógłbyś przedstawić? Przeczytaj np. to "Division by Invariant Integers using Multiplication", metody tam opisane są stosowane w gcc. w.
Re: moja zagadka
Author: Wojciech Muła
Date: Wed, 12 May 2010 09:00
Date: Wed, 12 May 2010 09:00
10 lines
1230 bytes
1230 bytes
"Wiktor S." <wswiktor&poczta,fm@no.spam> wrote: > > mov ebx, 0xcccccccd ; magiczna liczba > > której nigdzie nie używasz. Faktycznie, wysłało się mul eax, a powinno być oczywiście mul ebx. w.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads